前言
前两天分享了Redis集群的主从模式和哨兵模式,有需要的可以点下面连接回顾一下,本篇是Redis集群教程的最后一片,我们来学习一下Redis Cluster模式,也是实际应用场景中选择的最多的方式。
一、主从复制模式
主从复制模式https://blog.csdn.net/u014374743/article/details/135862183
二、哨兵模式
哨兵模式 https://blog.csdn.net/u014374743/article/details/135869720
三、Redis Cluster模式
Redis Cluster是Redis中推荐的分布式集群解决方案。它将数据自动分片到多个节点上,每个节点负责—部分数据。
Redis Cluster采用主从复制模式来提高可用性。每个分片都有一个主节点和多个从节点。主节点负责处理写操作,而从节点负责复制主节点的数据并处理读请求。
Redis Cluster能够自动检测节点的故障。当一个节点失去连接或不可达时,Redis Cluster会尝试将该节点标记为不可用,并从可用的从节点中提升一个新的主节点。
Redis Cluster是适用于大规模应用的解决方案,它提供了更好的横向扩展和容错能力。它自动管理数据分片和故障转移,减少了运维的负担。
Cluster模式的特点是数据分片存储在不同的节点上,每个节点都可以单独对外提供读写服务。不存在单点故障的问题。
实现方式:
本次实现通过三主三从6个节点来实现,有了前两种方式的经验,我们直接开始配置,三个主redis端口分别设置6001,6002,6003,对应的从redis端口设置为26001,26002,26003,具体配置如下:
新建了一个cluster-config用于存储6份配置
1.redis节点基本配置
master:三份master的配置相同
# 修改端口号port,分别为6001/6002/6003
port 6001
# 开启cluster模式
cluster-enabled yes
# 设定存储集群信息的文件名
cluster-config-file nodes-6001.conf
# 节点超时时间
cluster-node-timeout 5000
# 开启AOF持久化
appendonly yes
slave:三份slave配置也是相同的,跟master基本一样,只不过如果有密码的,需要设置密码授权
# 修改端口号port,分别为6001/6002/6003
port 6001
# 开启cluster模式
cluster-enabled yes
# 设定存储集群信息的文件名
cluster-config-file nodes-6001.conf
# 节点超时时间
cluster-node-timeout 5000
# 开启AOF持久化
appendonly yes
# 主节点是否有密码
masterauth 111111
2.启动6个节点
# 三个主redis
redis-server.exe cluster-config/redis6001.conf
redis-server.exe cluster-config/redis6002.conf
redis-server.exe cluster-config/redis6003.conf
# 三个从redis
redis-server.exe cluster-config/redis26001.conf
redis-server.exe cluster-config/redis26002.conf
redis-server.exe cluster-config/redis26003.conf
3.建立节点关系
启动之后,随便连接一个redis,输入cluster nodes查看节点状态,会发现是这样的
还是孤单的一个节点
这时候我们需要建立节点的连接,可以理解成让节点彼此认识,加入到一个集群中,使用cluster meet命令
CLUSTER MEET 127.0.0.1 6002
CLUSTER MEET 127.0.0.1 6003
CLUSTER MEET 127.0.0.1 26001
CLUSTER MEET 127.0.0.1 26002
CLUSTER MEET 127.0.0.1 26003
注意
有些小伙伴可能会问,为什么6001没有执行这个方法,其实很好理解,你通过6001去执行这个命令,就代表6001介绍他们互相认识了,所以就不用再介绍自己了
这时候再输入cluster nodes查看节点状态:
这代表节点之间已经有了关联。
4.分配槽位
这时候我们可以输入cluster info来查看集群状态:
会发现状态是fail,这是因为我们要分配槽位,这里有一个重要的知识,那就是数据槽,在Redis Cluster中,数据被划分为16384个槽(slots),每个槽都有一个唯一的编号,从0到16383。这些槽负责存储数据的分布。每个主节点负责处理其中的一部分槽,从而存储数据。
所以,当主节点挂掉后,Redis Cluster会自动进行故障转移。其他从节点会竞选出一个新的主节点,接管A负责的槽。这确保了槽上的数据在主节点故障后仍然可用。
分配槽的命令是:
# 先退出redis再执行命令
redis-cli -h 127.0.0.1 -p 6001 -a 111111 cluster addslots {0..5461}
redis-cli -h 127.0.0.1 -p 6002 -a 111111 cluster addslots {5462..10922}
redis-cli -h 127.0.0.1 -p 6003 -a 111111 cluster addslots {10923..16383}
注意
1)只需给主节点分配槽
2)如果在window操作系统下,出现下图问题,这是因为cmd命令下不支持{0..5461}这种区间写法
解决办法:可以直接找到对应节点的nodes.config,就是上面定义的集群信息文件
在对应的6001,6002,6003文件后面加上分配槽设置,如下图
5.设置从节点
分配完槽之后,重启6个节点,再输入cluster info查看集群状态
发现已经变成ok,接下来把26001,26002,26003设置成6001,6002,6003的从机节点,先输入cluster nodes查看节点状态
会发现6个master
设置从机节点命令,需要用到上述节点的ID,退出redis
# 最后是6001的节点ID,通过cluster nodes可以查看
redis-cli.exe -h 127.0.0.1 -p 26001 -a 111111 cluster replicate 8e291319a5e845529b01fb4d2677d343188008d8
redis-cli.exe -h 127.0.0.1 -p 26002 -a 111111 cluster replicate 52e33c2873a2ecdfc531c8b4cbb3564d1d708e06
redis-cli.exe -h 127.0.0.1 -p 26003 -a 111111 cluster replicate a38fb3095c3a67458ebc55c4ee57e980c870e938
执行完之后,再次查看节点状态:
可以看到,26001,26002,26003已经变成从节点了
至此所有配置都已经完成,下面让我们测试一下
6.测试
我们关掉6001,再次查询节点状态:
原来的6001 已经是fail状态
而我们的26001 已经变成了master
关注我,学习更多简单好理解的编程和架构知识!
下一期准备介绍一下websocket的几种实现方式
关注我 不迷路
或者微信 添加公众号