redis—cluster集群

一:Redis Cluster特点

  • 多主多从,去中心化:从节点作为备用,复制主节点,不做读写操作,不提供服务
  • 不支持处理多个key:因为数据分散在多个节点,在数据量大高并发的情况下会影响性能;
  • 支持动态扩容节点:这是我认为算是Rerdis Cluster最大的优点之一;
  • 节点之间相互通信,相互选举,不再依赖sentinel:准确来说是主节点之间相互"监督",保证及时故障转移

二:Redis Cluster与其它集群模式的区别

  • 相比较sentinel模式,多个master节点保证主要业务(比如master节点主要负责写)稳定性,不需要搭建多个sentinel实例监控一个master节点
  • 相比较一主多从的模式,不需要手动切换**,具有自我故障检测,故障转移的特点**;
  • 相比较其他两个模式而言,对数据进行分片(sharding),不同节点存储的数据是不一样的
  • 从某种程度上来说,Sentinel模式主要针对高可用(HA),而Cluster模式是不仅针对大数据量,高并发,同时也支持HA。

三: redis-cluster实验部署

1.准备工作:

6台虚拟机(Red Hat Enterprise Linux 9)下载软件redis

搭建三主三从架构

172.25.254.10

root@localhost \~\]# yum install redis -y

172.25.254.20

root@localhost \~\]# yum install redis -y

172.25.254.30

root@localhost \~\]# yum install redis -y

172.25.254.100

root@localhost \~\]# yum install redis -y

172.25.254.110

root@localhost \~\]# yum install redis -y

172.25.254.120

root@localhost \~\]# yum install redis -y

2.172.25.254.10主机

修改redis配置文件

root@localhost \~\]# vim /etc/redis/redis.conf

修改端口号

设置密码123456

设置requirepass密码

开启cluster集群功能,指定集群配置文件

节点加入集群的超时时间

启动redis

root@localhost \~\]# systemctl enable --now redis

检测redis端口是否启动成功

root@localhost \~\]# netstat -antlupe \|grep redis

开启redis

root@localhost \~\]# redis-cli ![](https://i-blog.csdnimg.cn/direct/46de50a789a34d68a6dd55a64f842b12.png) 在172.25.254.10主机上将修改过的配置文件传递到其他5台虚拟机上 > \[root@localhost \~\]# for i in 20 30 100 110 120;do scp /etc/redis/redis.conf [email protected].$i:/etc/redis/redis.conf;done ![](https://i-blog.csdnimg.cn/direct/ff082f50796247e196acd6afced20de1.png) ### 3.配置cluster集群 各台虚拟机开启redis 172.25.254.20 > \[root@localhost \~\]# systemctl enable --now redis 172.25.254.30 > \[root@localhost \~\]# systemctl enable --now redis 172.25.254.100 > \[root@localhost \~\]# systemctl enable --now redis 172.25.254.110 > \[root@localhost \~\]# systemctl enable --now redis 172.25.254.120 > \[root@localhost \~\]# systemctl enable --now redis ![](https://i-blog.csdnimg.cn/direct/c4417bdf4dca4751af2ca546f2fd39ec.png) 172.25.254.10主机上开启集群认证 注意:开启集群前,各台虚拟机记得关闭防火墙 > \[root@localhost redis\]# systemctl stop firewalld.service > \[root@localhost \~\]# redis-cli --cluster create -a 123456 172.25.254.10:6379 172.25.254.20:6379 172.25.254.30:6379 172.25.254.100:6379 172.25.254.110:6379 172.25.254.120:6379 --cluster-replicas 1 ![](https://i-blog.csdnimg.cn/direct/1a9bfea1d3f24f01adb6aa5d60ad7e03.png) ![](https://i-blog.csdnimg.cn/direct/90c53a0bd36d4942b3aa01e33e1bdba1.png) 显示集群添加成功 查看一组一从的对应关系,关系随机对应。 ![](https://i-blog.csdnimg.cn/direct/b0871f2584464dd29c4fb0fefa544ed3.png) 172.25.254.100对应的master为172.25.254.20 172.25.254.110对应的master为172.25.254.10 172.25.254.120对应的master为172.25.254.30 可以使用命令检测集群节点信息 > \[root@localhost \~\]# redis-cli -a 123456 --cluster check 172.25.254.10:6379 ![](https://i-blog.csdnimg.cn/direct/95e21a686a4f4aa0a2e3a8a7b5de890d.png) ### 4.测试 172.25.254.10上 可以创建lee用户失败 > \[root@localhost \~\]# redis-cli -a 123456 > > 127.0.0.1:6379\> set name lee ![](https://i-blog.csdnimg.cn/direct/c4f9e69b089d4e0faae2bc8e3f6c9d17.png) 信息指引到172.25.254.20主机 在172.25.254.20上 可以创建lee用户成功 > \[root@localhost \~\]# redis-cli -a 123456 ![](https://i-blog.csdnimg.cn/direct/232c911ebfe54bba9c84d20b44ef3789.png) cluster集群创建成功 ## 四:集群扩容 添加新的机子进入集群(172.25.254.40和172.25.254.130) 将原来的三主三从变为了四主四从 172.25.254.40 下载redis软件包 > \[root@localhost \~\]# yum install redis -y 启动redis > \[root@localhost \~\]# systemctl start redis 172.25.254.130 下载redis软件包 > \[root@localhost \~\]# yum install redis -y 启动redis > \[root@localhost \~\]# systemctl start redis 172.25.254.10主机上 将172.25.254.40添加到172.25.254.20所在的集群中 > \[root@localhost \~\]# redis-cli -a 123456 --cluster add-node 172.25.254.40:6379 172.25.254.20:6379 ![](https://i-blog.csdnimg.cn/direct/4fa4e42d5e784eafbd5dba65af19b069.png) 172.25.254.10主机上测集群节点信息 > \[root@localhost \~\]# redis-cli -a 123456 --cluster check 172.25.254.10:6379 ![](https://i-blog.csdnimg.cn/direct/51b05ab7404f4d949cb25dbca3f05065.png) 显示有四个master:172.25.254.10,172.25.254.20,172.25.254.30,172.25.254.40 其中172.25.254.40底下没有槽位则不能存储数据 172.25.254.10主机上 对172.25.254.40主机分享槽位,将172.25.254.20集群中重新划分槽位 > \[root@localhost \~\]# redis-cli -a 123456 --cluster reshard 172.25.254.20:6379 ![](https://i-blog.csdnimg.cn/direct/ca01afd5de9e420aa104783342207c6a.png) 将172.25.254.130主机添加到172.25.254.20集群中 > \[root@localhost \~\]# redis-cli -a 123456 --cluster add-node 172.25.254.130:6379 172.25.254.20:6379 --cluster-slave --cluster-master-id 2f5e5888581db794171bca6e364850933a342072 ![](https://i-blog.csdnimg.cn/direct/d8db2fee78cc4eac81ababfc60b66e7e.png) 使用命令检测集群节点信息 > \[root@localhost \~\]# redis-cli -a 123456 --cluster check 172.25.254.10:6379 ![](https://i-blog.csdnimg.cn/direct/71a6bf5fba3c4aad8a539ee6a0b5d0d6.png) 172.25.254.130对应的master为172.25.254.40 ## **五:clsuter** **集群维护** 添加节点的时候是先添加node节点到集群,然后分配槽位,删除节点的操作与添加节点的操作正好相反,是先将被删除的Redis node上的槽位迁移到集群中的其他Redis node节点上,然后再将其删除,如果一个Redis node节点上的槽位没有被完全迁移,删除该node的时候会提示有数据且无法删除 将节点从集群中移除 ![](https://i-blog.csdnimg.cn/direct/ea493b92cb0144a3a8aee81460d0c994.png) 删除172.25.254.130节点,则删除172.25.254.130对应的id > \[root@localhost \~\]# redis-cli -a 123456 --cluster del-node 172.25.254.130:6379 b371e1c8d310946e051684176cf14e31f05cec17 ![](https://i-blog.csdnimg.cn/direct/faa2e71a6afc446ea678f1c98791215a.png) 再次使用命令查询节点 > \[root@localhost \~\]# redis-cli -a 123456 --cluster check 172.25.254.10:6379 ![](https://i-blog.csdnimg.cn/direct/5071a5dc50174851aa69f2a6cf54f1b8.png) 172.25.254.130节点被删除 恢复槽位 > \[root@localhost \~\]# redis-cli -a 123456 --cluster reshard 172.25.254.20:6379 ![](https://i-blog.csdnimg.cn/direct/ba2587ea4c7f407fa76ddea59a4c122c.png)

相关推荐
码农黛兮_4630 分钟前
SQL 索引优化指南:原理、知识点与实践案例
数据库·sql
爆肝疯学大模型32 分钟前
SQL server数据库实现远程跨服务器定时同步传输数据
运维·服务器·数据库
星星点点洲1 小时前
【Redis】RedLock实现原理
redis·缓存
我来整一篇1 小时前
用Redis的List实现消息队列
数据库·redis·list
加什么瓦2 小时前
Redis——数据结构
数据库·redis·缓存
神仙别闹2 小时前
基于C#+SQL Server开发(WinForm)租房管理系统
数据库·oracle·c#
528302 小时前
MySQL主从复制
数据库·mysql
qq_12498707532 小时前
原生小程序+springboot+vue医院医患纠纷管理系统的设计与开发(程序+论文+讲解+安装+售后)
java·数据库·spring boot·后端·小程序·毕业设计
jie188945758662 小时前
ubuntu----100,常用命令2
数据库·ubuntu