Redis是一个开源的内存数据结构存储库,具有用于持久性的可选磁盘写入。它可以用作键值数据库,也可以用作缓存和消息代理。Redis具有内置事务,复制和对各种数据结构(如字符串,哈希,列表,集等)的支持。Redis可以通过Redis Sentinel高度可用,并支持使用Redis Cluster自动分区。
本文档提供了部署Redis服务器的说明,以及在CentOS 7上维护Redis实例的最佳实践概述。由于Redis提供内存中的所有数据,因此我们建议在本指南中使用高内存Linode。
注意本指南是为非root用户编写的。需要提升权限的命令带有前缀
sudo
。如果您不熟悉该sudo
命令,可以查看我们的“ 用户和组”指南。 要使用本指南中的复制步骤,您至少需要两个Linode。
在本节中,您将添加EPEL存储库,然后使用它来安装Redis。
验证Redis是否正在运行redis-cli
:
redis-cli ping
如果Redis正在运行,它将返回:
PONG
在本节中,您将为Redis配置一些基本的持久性和调优选项。
Redis提供了两种磁盘持久性选项:
每个选项都有自己的优点和缺点,Redis文档中对此进行了详细说明。为了获得最高级别的数据安全性,请考虑运行两种持久性方法。
由于默认情况下启用了Point-in-time快照持久性,因此您只需设置AOF持久性:
appendonly
和appendfsync
设置设置了以下值redis.conf
:
/etc/redis.conf1 2
appendonly yes appendfsync everysec要提高Redis性能,请将Linux内核过载内存设置为1:
sudo sysctl vm.overcommit_memory=1
这会立即更改过度使用的内存设置,但更改将不会在重新启动后持续存在。要使其永久化,请添加vm.overcommit_memory = 1
到/etc/sysctl.conf
:
/etc/sysctl.conf中
1 | vm.overcommit_memory = 1 |
---|
根据您的使用情况,您可能会发现有必要添加额外的交换磁盘空间。您可以通过在Linode Manager中调整磁盘大小来添加交换。在Redis的文档建议您交换磁盘大小的可用内存量相匹配您的系统。
Redis提供了几种用于设置分布式数据存储的选项。下面介绍的最简单的选项是主/从复制,它创建数据副本。只要所有写操作都由主服务器处理,它还允许在从副本组之间分配读取。
使用Redis Sentinel可以使上述主/从设置高度可用。可以将Sentinel配置为监视主实例和从属实例,并在主节点未按预期工作时执行自动故障转移。这意味着其中一个从节点将被选为主节点,所有其他从节点将被配置为使用新主节点。
使用Redis 3.0及更高版本,您可以使用Redis Cluster,这是一种自动管理复制和故障转移的数据分片解决方案。使用Redis Cluster,您可以在多个节点之间自动拆分数据集,这在数据集大于单个服务器的RAM时非常有用。它还使您能够在节点的子集遇到故障或无法与群集的其余部分通信时继续操作。
以下步骤将指导您完成主/从复制,并将从站设置为只读模式。
对于本节,您将使用两个Linode,主服务器和从服务器。
注意要通过专用网络进行通信,主从Linode必须位于同一数据中心。
bind
配置选项,配置主Redis实例以侦听专用IP地址redis.conf
。替换192.0.2.100
为主Linode的私有IP地址:
/etc/redis.conf1
bind 127.0.0.1 192.0.2.100slaveof
指令添加redis.conf
到设置复制来配置从属实例。再次192.0.2.100
使用主Linode的私有IP地址替换:
/etc/redis.conf1
slaveof 192.0.2.100 6379该slaveof
指令有两个参数:第一个是主节点的IP地址; 第二个是主服务器配置中指定的Redis端口。测试复制是否有效。在主Linode上,运行redis-cli
并执行命令set 'a' 1
redis-cli
127.0.0.1:6379> set 'a' 1
OK
键入exit
或按Ctrl-C退出redis-cli
提示。
接下来,redis-cli
在slave Linode上运行并执行get 'a'
,它应该返回与master上相同的值:
redis-cli
127.0.0.1:6379> get 'a'
"1"
您的主/从复制设置正常。
由于Redis旨在在受信任的环境中工作并且与受信任的客户端一起工作,因此您应该控制对Redis实例的访问。一些建议的安全步骤包括:
此外,为了确保没有外部流量访问您的Redis实例,我们建议您只监听localhost接口或Linode的私有IP地址上的连接。
要获得额外的安全层,请使用密码身份验证来保护主从Linode之间的连接。
requirepass
Redis配置中的行并master_password
使用安全密码替换:
/etc/redis.conf1
requirepass master_passwordmasterpass
,然后为从属Linode创建一个唯一的密码requirepass
:
/etc/redis.conf1 2
masterpass master_password requirepass slave_password替换master_password
为在主服务器上配置的密码,并替换slave_password
为用于从服务器Linode的密码。redis-cli
您的主Linode,并使用AUTH
您的主密码进行身份验证:
redis-cli 127.0.0.1:6379> AUTH master_passwordINFO
。这提供了大量信息,因此您可以在命令中专门请求“复制”部分:
127.0.0.1:6379> INFO replication
输出应类似于以下内容:
# Replication role:master connected_slaves:1 slave0:ip=192.0.2.105,port=6379,state=online,offset=1093,lag=1
它应该确认您的Linode的主要角色,以及有多少从属Linode连接到它。redis-cli
使用您的从属密码连接并进行身份验证:
redis-cli 127.0.0.1:6379> AUTH slave_passwordINFO
确认您的从属Linode角色及其与主服务器的连接:
127.0.0.1:6379> INFO replication # Replication role:slave master_host:192.0.2.100 master_port:6379 master_link_status:up有关此主题的其他信息,您可能需要参考以下资源。虽然提供这些是希望它们有用,但请注意,我们无法保证外部托管材料的准确性或及时性。