建议收藏!Redis集群教程(三):Redis Cluster模式

前言

前两天分享了Redis集群的主从模式和哨兵模式,有需要的可以点下面连接回顾一下,本篇是Redis集群教程的最后一片,我们来学习一下Redis Cluster模式,也是实际应用场景中选择的最多的方式。

一、主从复制模式

主从复制模式icon-default.png?t=N7T8https://blog.csdn.net/u014374743/article/details/135862183

二、哨兵模式

哨兵模式 icon-default.png?t=N7T8https://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的几种实现方式
关注我 不迷路

或者微信 添加公众号

  • 32
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员的小黑板

请作者喝一杯咖啡吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值