虚拟主机域名注册-常见问题 → 服务器知识 → 操作系统 | ||||
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教程系列三部分就到此结束了。
|
||||
>> 相关文章 | ||||
没有相关文章。 |