帮助中心

立即注册 咨询客服

当前位置:首页 > 帮助中心> 如何在CentOS 8中设置Redis集群(启用集群模式)

如何在CentOS 8中设置Redis集群(启用集群模式)

发布时间:2020年04月13日 09:07:04    来源: A5互联

Redis Cluster是一个内置的Redis功能,它支持自动分片、复制和高可用性,以前是通过Sentinels实现的。它的设计有两个主要目的:一是在多个实例之间自动拆分数据集;二是在分区期间提供一定程度的可用性;当某些实例(尤其是主实例)发生故障或无法与大多数实例通信时,继续操作集群中的节点。

但是,如果发生较大故障(例如,大多数主实例不可用时),集群将停止运行。此外,如果主服务器和从服务器同时发生故障,集群将无法继续正常运行(尽管解决方法是在集群中添加更多节点或创建不对称性,以自动更改集群布局)。

根据Redis集群文档,按预期工作的“ 最小集群 ”要求至少包含3个主节点。但是,最适合高可用性的设置应该至少有6个节点,其中包含三个主节点和三个从节点,每个主节点都有一个从节点。

重要提示:Redis Cluster还具有一些局限性,例如,对NATted环境以及在Docker下重新映射IP地址或TCP端口的环境缺乏支持。此外,并非每个客户端库都支持它。

本文展示了如何在CentOS 8中设置Redis集群(禁用集群模式)。它包括如何安装Redis,配置集群节点,创建集群以及测试集群故障转移。

注意:在本文中,我们将使用全新安装的Redis实例来运行集群模式。集群模式不适用于我们的Redis系列的前两个指南中完成的某些配置,特别是在使用参数副本时无法使用。

准备工作:

安装了CentOS 8系统的服务器

测试环境设置

Redis Master1: 10.42.0.247

Redis Master2: 10.42.0.197

Redis Master3: 10.42.0.132


Redis Slave1: 10.42.0.200

Redis Slave2: 10.42.0.21

Redis Slave3: 10.42.0.34

Redis集群逻辑图

我们的设置有3个读/写主节点和3个只读副本节点,每个主节点都有一个副本,因此三个分片包含每个节点中所有集群的数据。应用程序API或CLI客户端只能写入主节点,但可以读取集群中的任何节点。

步骤1:在所有节点上安装Redis

1.通过SSH登录所有实例,然后运行以下命令以使用DNF软件包管理器安装Redis模块。

# dnf module install redis

2.接下来,启动Redis服务,使其在系统启动时自动启动,并检查其状态以验证其是否正在运行(在所有6个实例上验证该服务):

# systemctl start redis

# systemctl enable redis

# systemctl status redis

步骤2:在所有节点上配置Redis实例

3.本节介绍如何配置Redis集群节点。请记住在这里在所有节点上执行配置。

使用/etc/redis.conf配置文件来配置Redis服务器。建议的做法是,在使用所选的命令行文本编辑器编辑原始文件之前,先对其进行备份。

# cp /etc/redis.conf /etc/redis.conf.orig

# vi /etc/redis.conf

4.接下来,找到以下配置参数并编辑它们的值,如图所示。该绑定参数集Redis的服务器的接口将监听,其值设置为实例LAN IP。删除127.0.0.1,因为我们意识到将其保留在其中会减慢集群创建的过程,特别是加入集群的阶段。

bind 10.42.0.247

然后将保护模式设置no为允许来自集群中其他实例的连接。

protected-mode no

port参数定义Redis服务器将侦听连接的端口,默认值为6379。这是用于与客户端通信的数据端口。

port 6379

设置Redis监听接口和端口

5.下一组参数将启用集群模式并设置其一些有用的功能。在启用集群的参数,设置为yes,激活集群模式。

cluster-enabled yes

接下来,cluster-config-file参数设置集群节点的集群配置文件的名称(例如,nodes-6379.conf)。该文件在工作目录中创建(默认是使用dir参数定义的/ var / lib / redis),并且用户不可编辑。

cluster-config-file nodes-6379.conf

下一个有用的集群选项是cluster-node-timeout,用于设置实例不可用的最长时间(以毫秒为单位),以将其视为故障状态。值15000等于15秒。

cluster-node-timeout 15000

设置集群节点超时

6.我们还需要在磁盘上启用Redis持久性。我们可以使用一种持久性模式,即“ Append Only File”(AOF):它记录服务器成功接收的每个写入操作(在工作目录下创建的appendonly.aof文件中)。数据将在服务器启动期间播放,以重建原始数据集。

要启用它,请将appendonly参数设置为yes。

appendonly yes

设置持久性选项

7.进行所有更改后,在所有节点上重新启动Redis服务以应用最近的更改。

# systemctl restart redis

8.此时,每个集群节点现在都应具有一个ID。您可以在/var/log/redis/redis.log的日志文件中进行检查。

# cat /var/log/redis/redis.log

检查集群节点日志文件

9.接下来,在所有实例上打开端口6397和16379。后面的端口用于集群总线(使用二进制协议的节点到节点通信通道)。这是Redis集群TCP连接的基本要求。

# firewall-cmd --zone=public --permanent --add-port=6379/tcp

# firewall-cmd --zone=public --permanent --add-port=16379/tcp

# firewall-cmd --reload

第三步:创建Redis集群

10.要创建集群,请使用redis-cli命令行客户端,如下所示。使用 --cluster create 可以创建集群,而 --cluster-replicas 1 表示每个主节点创建一个副本。

对于具有6个节点的设置,我们将有3个主节点和3个从节点。

注意,前6个节点将被视为主节点(M),后3个节点将被视为从节点(S)。第一个从属节点即10.42.0.200:6379复制第一个主节点即10.42.0.247:6379,第二个从属节点依次复制第二个主节点。

下面的命令格式化后的结果将代表上面的逻辑设置。

# redis-cli --cluster create 10.42.0.247:6379 10.42.0.197:6379 10.42.0.132:6379 10.42.0.200:6379 10.42.0.21:6379 10.42.0.34:6379 --cluster-replicas 1

创建Redis集群

11.成功创建集群后,在任何主机上运行以下命令(使用该-h标志指定其IP地址)以列出所有集群节点。

# redis-cli -h 10.42.0.247 -p 6379 cluster nodes

您应该能够看到所有集群节点,从节点表示其主节点,如以下屏幕截图所示。

检查任何节点上的所有集群节点

不同的字段按以下顺序排列:节点ID,IP地址:端口,标志,发送的最后ping,接收的最后的pong,配置时期,链接状态,插槽(对于主设备)。

步骤4:测试Redis集群故障转移

12.在本节中,我们将演示如何测试集群故障转移。首先,让我们注意master。

# redis-cli -h 10.42.0.247 -p 6379 cluster nodes | grep master

列出Redis集群主机

另外,请注意Redis从主机。

# redis-cli -h 10.42.0.247 -p 6379 cluster nodes | grep slave

列出所有Redis集群从站

13.接下来,让我们在一个主节点(例如10.42.0.197)上停止Redis服务,并检查集群中的所有主节点。

# systemctl stop redis

# redis-cli -h 10.42.0.247 -p 6379 cluster nodes | grep master

从下面的截图中,可以看到该节点10.42.0.197:6367处于失效状态,其从10.42.0.21:6379已经晋升为大师地位。

检查集群故障转移状态

14.现在,让我们在发生故障的节点上再次启动Redis服务,并检查集群中的所有主服务器。

# systemctl start redis

# redis-cli -h 10.42.0.247 -p 6379 cluster nodes | grep master

检查所有Redis集群主服务器状态

另外,检查集群从属服务器,以确认发生故障的主服务器现在是从属服务器。

# redis-cli -h 10.42.0.247 -p 6379 cluster nodes | grep slave

检查所有Redis集群从站

步骤5:测试跨Redis集群的数据复制

15.最后一部分说明了如何验证集群数据复制。我们将在其中一个主节点上创建一个键和值,然后尝试从所有集群节点中读取它,如下所示。使用该-c开关在redis-cli实用程序下启用集群支持,并在集群模式下访问数据。

# redis-cli -c -h 10.42.0.247 -p 6379 set name 'a5idc.net'

# redis-cli -c -h 10.42.0.247 -p 6379 get name

# redis-cli -c -h 10.42.0.21 -p 6379 get name

# redis-cli -c -h 10.42.0.132 -p 6379 get name

# redis-cli -c -h 10.42.0.200 -p 6379 get name

# redis-cli -c -h 10.42.0.197 -p 6379 get name

# redis-cli -c -h 10.42.0.34 -p 6379 get name

验证Redis集群数据复制

Redis集群是获得自动分片,复制和高可用性的首选方法。至此,Redis教程系列三部分就到此结束了。