Redis是一个开源键值数据存储,使用内存存储模型和可选的磁盘写入来实现持久性。它具有事务,发布/订阅和自动故障转移等功能。建议将Redis与Linux一起用于生产环境,但开发人员还将OS X作为他们开发和测试的平台。Redis的客户使用大多数语言编写,其网站上有推荐的语言。
对于生产环境,至少在两个节点上复制数据被认为是最佳实践。冗余允许在环境发生故障时进行恢复,这在应用程序的用户群增长时尤为重要。
在本指南结束时,我们将设置两个Redis 腾讯CVM,如下所示:
我们还将演示如何切换到从属服务器并将其设置为临时主服务器。
随意设置多个从服务器。
虽然这可能适用于早期版本和其他Linux发行版,但我们建议使用CentOS 7。
出于测试目的,我们将使用小型实例,因为没有实际工作负载需要处理,但生产环境可能需要更大的服务器。
从将托管我们的主服务器的腾讯CVM开始,我们的第一步是安装Redis。首先,我们需要在我们的机器上启用EPEL存储库。如果您不熟悉它,EPEL是由Fedora项目开发的Enterprise Linux repo额外软件包,旨在为基于RHEL的发行版的企业用户提供高质量的第三方软件包。
wget http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
如果wget
无法识别,请尝试yum install wget
在上述命令之前运行。
现在运行:
sudo rpm -ivh epel-release-7-5.noarch.rpm
现在键入:
sudo yum -y update
请注意,这可能需要一段时间才能完成。现在,您可以通过运行以下命令在您的计算机上安装Redis:
sudo yum install redis -y
安装过程完成后,通过输入以下命令来启动Redis服务:
sudo systemctl start redis.service
可以使用以下命令检查其状态:
sudo systemctl status redis.service
其中输出类似于:
Output
redis.service - Redis persistent key-value database
Loaded: loaded (/usr/lib/systemd/system/redis.service; disabled)
Drop-In: /etc/systemd/system/redis.service.d
└─limit.conf
Active: active (running) since Wed 2015-07-22 02:26:31 EDT; 13s ago
Main PID: 18995 (redis-server)
CGroup: /system.slice/redis.service
└─18995 /usr/bin/redis-server 127.0.0.1:6379
最后,让我们通过运行来测试我们的Redis设置:
redis-cli ping
这应该打印一个PONG
作为响应。如果是这种情况,您现在可以在服务器上运行Redis,我们可以开始配置它。可以通过运行以下命令对我们的设置进行额外测试:
redis-benchmark -q -n 1000 -c 10 -P 5
上面的命令说我们想要redis-benchmark
以安静模式运行,总共有1000个请求,10个并行连接和5个管道请求。有关为Redis运行基准测试的更多信息,键入redis-benchmark --help
终端将打印有用的信息和示例。
让基准测试运行。完成后,您应该看到类似于以下内容的输出:
Output
PING_INLINE: 166666.67 requests per second
PING_BULK: 249999.98 requests per second
SET: 200000.00 requests per second
GET: 200000.00 requests per second
INCR: 200000.00 requests per second
LPUSH: 200000.00 requests per second
LPOP: 200000.00 requests per second
SADD: 200000.00 requests per second
SPOP: 249999.98 requests per second
LPUSH (needed to benchmark LRANGE): 200000.00 requests per second
LRANGE_100 (first 100 elements): 35714.29 requests per second
LRANGE_300 (first 300 elements): 11111.11 requests per second
LRANGE_500 (first 450 elements): 7194.24 requests per second
LRANGE_600 (first 600 elements): 5050.50 requests per second
MSET (10 keys): 100000.00 requests per second
现在为Redis 从服务器重复此部分。如果要配置更多腾讯CVM,则可以根据需要设置多个从属服务器。
此时,Redis已在我们的两个节点上安装并运行。如果任何节点的输出与上面显示的不相似,请仔细重复设置过程并检查是否满足所有先决条件。
既然Redis已经在我们的双腾讯CVM集群上运行,我们就必须编辑它们的配置文件。正如我们将看到的,配置主服务器和从服务器之间存在细微差别。
让我们先从我们的主服务器开始吧。
用您喜欢的文本编辑器打开/etc/redis.conf
:
sudo vi /etc/redis.conf
编辑以下行。
为TCP的keepalive计时器设置一个合理的值:
tcp-keepalive 60
通过注释掉这一行,让网络上的任何人都可以访问服务器:
#bind 127.0.0.1
鉴于Redis的性质及其非常高的速度,攻击者可能会在没有太多问题的情况下强行输入密码。这就是为什么我们建议取消注释该requirepass
行并添加复杂的密码(或最好是复杂的密码):
requirepass your_redis_master_password
根据您的使用场景,您可以更改以下行。出于本教程的目的,我们假设不必进行密钥删除。取消注释该行并将其设置如下:
maxmemory-policy noeviction
最后,我们要进行以下更改,以备份数据。取消注释和/或设置这些行,如下所示:
appendonly yes
appendfilename "appendonly.aof"
保存更改。
重新启动Redis服务以重新加载配置更改:
sudo systemctl restart redis.service
现在我们已准备好主服务器,让我们转到的从机。
我们需要进行一些更改,以允许我们的从服务器连接到我们的主实例:
用您喜欢的文本编辑器打开/etc/redis.conf
:
sudo vi /etc/redis.conf
编辑以下行; 一些设置将类似于主服务器的设置。
通过为这一行添加注释,可以让网络上的任何人都能够访问服务器:
#bind 127.0.0.1
从服务器也需要密码,因此我们可以给它命令(例如INFO
)。取消为此行注释并设置服务器密码:
requirepass your_redis_slave_password
取消注释该行并指出一个可以连接主服务器的IP地址,然后指定该计算机上设置的端口。默认情况下,端口设置为6379:
slaveof your_redis_master_ip 6379
取消注释该masterauth
行并提供您之前在主服务器上设置的密码/口令短语:
masterauth your_redis_master_password
现在保存这些更改,然后退出该文件。接下来,重启服务,就像我们在主服务器上所做的那样:
sudo systemctl restart redis.service
这将重新初始化Redis并加载我们修改过的文件。
连接到Redis:
redis-cli -h 127.0.0.1 -p 6379
使用从服务器的密码进行授权:
AUTH your_redis_slave_password
此时,我们正在运行一个功能性的主从Redis群集,并且两台机器都已正确配置。
当我们想要开始编写故障转移行为脚本的时候,测试我们的设置将使我们能够更好地理解Redis 腾讯CVM的行为。我们现在要做的是确保我们的配置正常工作,并且我们的主Redis正在与从属Redis实例进行通信。
首先,我们通过主服务器上的终端连接到Redis :
首先连接到本地实例,在默认的端口6379上运行。如果您更改了端口,请相应地修改命令。
redis-cli -h 127.0.0.1 -p 6379
现在使用您在配置主服务器时设置的密码对Redis进行身份验证:
AUTH your_redis_master_password
你应该得到一个OK
的回应。现在,你只需要运行:
INFO
您将看到有关Redis主服务器的所有信息。我们对#Replication
部分特别感兴趣,该部分应如下所示:
Output. . .
# Replication
role:master
connected_slaves:1
slave0:ip=111.111.111.222,port=6379,state=online,offset=407,lag=1
master_repl_offset:407
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:406
. . .
注意connected_slaves:1
这一行,这表示我们的另一个实例正在与主腾讯CVM交谈。您还可以看到我们会获取有关从属IP地址,端口,状态和其他的一些信息。
现在让我们来看看我们的从属服务器上的#Replication
部分。该过程与我们的主服务器相同。登录Redis实例,发出INFO
命令并且查看输出:
Output. . .
# Replication
role:slave
master_host:111.111.111.111
master_port:6379
master_link_status:up
master_last_io_seconds_ago:3
master_sync_in_progress:0
slave_repl_offset:1401
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
. . .
我们可以看到,这台机器具有从属的角色,正在与主Redis服务器通信,但是并没有自己的从属。
构建此体系结构意味着我们还希望以这样的方式处理故障,即我们确保数据完整性并尽可能减少应用程序的停机时间。任何从服务器都可以被提升为主服务器为。首先,让我们手动测试切换。
在从机上,我们应该连接到Redis实例:
redis-cli -h 127.0.0.1 -p 6379
现在使用您在配置从站时设置的密码对Redis进行身份验证
AUTH your_redis_slave_password
关闭从属行为:
SLAVEOF NO ONE
答案应该是OK
。现在输入:
INFO
查找# Replication
部分以查找以下输出:
Output
. . .
# Replication
role:master
connected_slaves:0
master_repl_offset:1737
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
. . .
正如我们所料,从服务器已经变成了主服务器,现在准备接受来自其他机器(如果有的话)的连接。我们可以在调试主服务器时将其当作临时备用。
如果您有多个依赖于初始主服务器的从服务器,则必须将它们都指向新升级的主服务器。
这其实可以很容易的编写脚本,当检测到故障时,则执行以下步骤:
SLAVEOF NO ONE
命令。从Redis版本1.0.0开始,此命令告诉从属服务器停止复制数据,并开始充当主服务器。SLAVEOF hostname
命令将指示它们停止从旧主站复制,完全丢弃现在已弃用的数据,并从新主站开始复制。确保从新升级的主服务器那里替换 hostname
和 port
并使用正确的值。虽然有许多方法可以完成上述步骤,但是您应当根据您的所在的环境来实施一个适当的解决方案,并确保在发生任何实际故障之前对其进行彻底测试。
让我们重新连接到原始主服务器。在从属服务器上,登录Redis并执行以下命令:
SLAVEOF your_redis_master_ip 6379
如果INFO
再次运行该命令,您应该看到我们已经返回到原始设置。
我们已经正确地建立了一个由两个服务器组成的环境,一个服务器充当Redis主服务器,另一个服务器复制数据作为从服务器。这样,如果主服务器脱机或丢失我们的数据,我们就知道如何切换到我们的一个从服务器进行恢复,直到问题得到解决。
接下来的步骤可能包括:编写自动故障转移过程的脚本,或通过使用OpenV**等V**解决方案确保所有腾讯CVM之间的安全通信。此外,测试过程和脚本对于验证配置也是非常重要的。
此外,在生产环境中部署此类设置时应采取预防措施。你应该认真学习研究Redis的文档,必须对足以满足您应用程序的安全模型有一个清晰的认识。我们经常使用Redis作为会话存储,它包含的信息对攻击者来说很有价值。但通常的做法也只是通过专用网络访问这些机器,然后再为它们设置多层安全措施。
更多CentOS教程请前往腾讯云+社区学习更多知识。
参考文献:《 How To Configure a Redis Cluster on CentOS 7》介绍
Redis是一个开源键值数据存储,使用内存存储模型和可选的磁盘写入来实现持久性。它具有事务,发布/订阅和自动故障转移等功能。建议将Redis与Linux一起用于生产环境,但开发人员还将OS X作为他们开发和测试的平台。Redis的客户使用大多数语言编写,其网站上有推荐的语言。
对于生产环境,至少在两个节点上复制数据被认为是最佳实践。冗余允许在环境发生故障时进行恢复,这在应用程序的用户群增长时尤为重要。
在本指南结束时,我们将设置两个Redis 腾讯CVM,如下所示:
我们还将演示如何切换到从属服务器并将其设置为临时主服务器。
随意设置多个从服务器。
虽然这可能适用于早期版本和其他Linux发行版,但我们建议使用CentOS 7。
出于测试目的,我们将使用小型实例,因为没有实际工作负载需要处理,但生产环境可能需要更大的服务器。
从将托管我们的主服务器的腾讯CVM开始,我们的第一步是安装Redis。首先,我们需要在我们的机器上启用EPEL存储库。如果您不熟悉它,EPEL是由Fedora项目开发的Enterprise Linux repo额外软件包,旨在为基于RHEL的发行版的企业用户提供高质量的第三方软件包。
wget http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
如果wget
无法识别,请尝试yum install wget
在上述命令之前运行。
现在运行:
sudo rpm -ivh epel-release-7-5.noarch.rpm
现在键入:
sudo yum -y update
请注意,这可能需要一段时间才能完成。现在,您可以通过运行以下命令在您的计算机上安装Redis:
sudo yum install redis -y
安装过程完成后,通过输入以下命令来启动Redis服务:
sudo systemctl start redis.service
可以使用以下命令检查其状态:
sudo systemctl status redis.service
其中输出类似于:
Output
redis.service - Redis persistent key-value database
Loaded: loaded (/usr/lib/systemd/system/redis.service; disabled)
Drop-In: /etc/systemd/system/redis.service.d
└─limit.conf
Active: active (running) since Wed 2015-07-22 02:26:31 EDT; 13s ago
Main PID: 18995 (redis-server)
CGroup: /system.slice/redis.service
└─18995 /usr/bin/redis-server 127.0.0.1:6379
最后,让我们通过运行来测试我们的Redis设置:
redis-cli ping
这应该打印一个PONG
作为响应。如果是这种情况,您现在可以在服务器上运行Redis,我们可以开始配置它。可以通过运行以下命令对我们的设置进行额外测试:
redis-benchmark -q -n 1000 -c 10 -P 5
上面的命令说我们想要redis-benchmark
以安静模式运行,总共有1000个请求,10个并行连接和5个管道请求。有关为Redis运行基准测试的更多信息,键入redis-benchmark --help
终端将打印有用的信息和示例。
让基准测试运行。完成后,您应该看到类似于以下内容的输出:
Output
PING_INLINE: 166666.67 requests per second
PING_BULK: 249999.98 requests per second
SET: 200000.00 requests per second
GET: 200000.00 requests per second
INCR: 200000.00 requests per second
LPUSH: 200000.00 requests per second
LPOP: 200000.00 requests per second
SADD: 200000.00 requests per second
SPOP: 249999.98 requests per second
LPUSH (needed to benchmark LRANGE): 200000.00 requests per second
LRANGE_100 (first 100 elements): 35714.29 requests per second
LRANGE_300 (first 300 elements): 11111.11 requests per second
LRANGE_500 (first 450 elements): 7194.24 requests per second
LRANGE_600 (first 600 elements): 5050.50 requests per second
MSET (10 keys): 100000.00 requests per second
现在为Redis 从服务器重复此部分。如果要配置更多腾讯CVM,则可以根据需要设置多个从属服务器。
此时,Redis已在我们的两个节点上安装并运行。如果任何节点的输出与上面显示的不相似,请仔细重复设置过程并检查是否满足所有先决条件。
既然Redis已经在我们的双腾讯CVM集群上运行,我们就必须编辑它们的配置文件。正如我们将看到的,配置主服务器和从服务器之间存在细微差别。
让我们先从我们的主服务器开始吧。
用您喜欢的文本编辑器打开/etc/redis.conf
:
sudo vi /etc/redis.conf
编辑以下行。
为TCP的keepalive计时器设置一个合理的值:
tcp-keepalive 60
通过注释掉这一行,让网络上的任何人都可以访问服务器:
#bind 127.0.0.1
鉴于Redis的性质及其非常高的速度,攻击者可能会在没有太多问题的情况下强行输入密码。这就是为什么我们建议取消注释该requirepass
行并添加复杂的密码(或最好是复杂的密码):
requirepass your_redis_master_password
根据您的使用场景,您可以更改以下行。出于本教程的目的,我们假设不必进行密钥删除。取消注释该行并将其设置如下:
maxmemory-policy noeviction
最后,我们要进行以下更改,以备份数据。取消注释和/或设置这些行,如下所示:
appendonly yes
appendfilename "appendonly.aof"
保存更改。
重新启动Redis服务以重新加载配置更改:
sudo systemctl restart redis.service
现在我们已准备好主服务器,让我们转到的从机。
我们需要进行一些更改,以允许我们的从服务器连接到我们的主实例:
用您喜欢的文本编辑器打开/etc/redis.conf
:
sudo vi /etc/redis.conf
编辑以下行; 一些设置将类似于主服务器的设置。
通过为这一行添加注释,可以让网络上的任何人都能够访问服务器:
#bind 127.0.0.1
从服务器也需要密码,因此我们可以给它命令(例如INFO
)。取消为此行注释并设置服务器密码:
requirepass your_redis_slave_password
取消注释该行并指出一个可以连接主服务器的IP地址,然后指定该计算机上设置的端口。默认情况下,端口设置为6379:
slaveof your_redis_master_ip 6379
取消注释该masterauth
行并提供您之前在主服务器上设置的密码/口令短语:
masterauth your_redis_master_password
现在保存这些更改,然后退出该文件。接下来,重启服务,就像我们在主服务器上所做的那样:
sudo systemctl restart redis.service
这将重新初始化Redis并加载我们修改过的文件。
连接到Redis:
redis-cli -h 127.0.0.1 -p 6379
使用从服务器的密码进行授权:
AUTH your_redis_slave_password
此时,我们正在运行一个功能性的主从Redis群集,并且两台机器都已正确配置。
当我们想要开始编写故障转移行为脚本的时候,测试我们的设置将使我们能够更好地理解Redis 腾讯CVM的行为。我们现在要做的是确保我们的配置正常工作,并且我们的主Redis正在与从属Redis实例进行通信。
首先,我们通过主服务器上的终端连接到Redis :
首先连接到本地实例,在默认的端口6379上运行。如果您更改了端口,请相应地修改命令。
redis-cli -h 127.0.0.1 -p 6379
现在使用您在配置主服务器时设置的密码对Redis进行身份验证:
AUTH your_redis_master_password
你应该得到一个OK
的回应。现在,你只需要运行:
INFO
您将看到有关Redis主服务器的所有信息。我们对#Replication
部分特别感兴趣,该部分应如下所示:
Output. . .
# Replication
role:master
connected_slaves:1
slave0:ip=111.111.111.222,port=6379,state=online,offset=407,lag=1
master_repl_offset:407
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:406
. . .
注意connected_slaves:1
这一行,这表示我们的另一个实例正在与主腾讯CVM交谈。您还可以看到我们会获取有关从属IP地址,端口,状态和其他的一些信息。
现在让我们来看看我们的从属服务器上的#Replication
部分。该过程与我们的主服务器相同。登录Redis实例,发出INFO
命令并且查看输出:
Output. . .
# Replication
role:slave
master_host:111.111.111.111
master_port:6379
master_link_status:up
master_last_io_seconds_ago:3
master_sync_in_progress:0
slave_repl_offset:1401
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
. . .
我们可以看到,这台机器具有从属的角色,正在与主Redis服务器通信,但是并没有自己的从属。
构建此体系结构意味着我们还希望以这样的方式处理故障,即我们确保数据完整性并尽可能减少应用程序的停机时间。任何从服务器都可以被提升为主服务器为。首先,让我们手动测试切换。
在从机上,我们应该连接到Redis实例:
redis-cli -h 127.0.0.1 -p 6379
现在使用您在配置从站时设置的密码对Redis进行身份验证
AUTH your_redis_slave_password
关闭从属行为:
SLAVEOF NO ONE
答案应该是OK
。现在输入:
INFO
查找# Replication
部分以查找以下输出:
Output
. . .
# Replication
role:master
connected_slaves:0
master_repl_offset:1737
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
. . .
正如我们所料,从服务器已经变成了主服务器,现在准备接受来自其他机器(如果有的话)的连接。我们可以在调试主服务器时将其当作临时备用。
如果您有多个依赖于初始主服务器的从服务器,则必须将它们都指向新升级的主服务器。
这其实可以很容易的编写脚本,当检测到故障时,则执行以下步骤:
SLAVEOF NO ONE
命令。从Redis版本1.0.0开始,此命令告诉从属服务器停止复制数据,并开始充当主服务器。SLAVEOF hostname
命令将指示它们停止从旧主站复制,完全丢弃现在已弃用的数据,并从新主站开始复制。确保从新升级的主服务器那里替换 hostname
和 port
并使用正确的值。虽然有许多方法可以完成上述步骤,但是您应当根据您的所在的环境来实施一个适当的解决方案,并确保在发生任何实际故障之前对其进行彻底测试。
让我们重新连接到原始主服务器。在从属服务器上,登录Redis并执行以下命令:
SLAVEOF your_redis_master_ip 6379
如果INFO
再次运行该命令,您应该看到我们已经返回到原始设置。
我们已经正确地建立了一个由两个服务器组成的环境,一个服务器充当Redis主服务器,另一个服务器复制数据作为从服务器。这样,如果主服务器脱机或丢失我们的数据,我们就知道如何切换到我们的一个从服务器进行恢复,直到问题得到解决。
接下来的步骤可能包括:编写自动故障转移过程的脚本,或通过使用OpenV**等V**解决方案确保所有腾讯CVM之间的安全通信。此外,测试过程和脚本对于验证配置也是非常重要的。
此外,在生产环境中部署此类设置时应采取预防措施。你应该认真学习研究Redis的文档,必须对足以满足您应用程序的安全模型有一个清晰的认识。我们经常使用Redis作为会话存储,它包含的信息对攻击者来说很有价值。但通常的做法也只是通过专用网络访问这些机器,然后再为它们设置多层安全措施。
更多CentOS教程请前往腾讯云+社区学习更多知识。
参考文献:《 How To Configure a Redis Cluster on CentOS 7》
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。