一: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
在172.25.254.10主机上将修改过的配置文件传递到其他5台虚拟机上
[root@localhost ~]# for i in 20 30 100 110 120;do scp /etc/redis/redis.conf root@172.25.254.$i:/etc/redis/redis.conf;done
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
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
显示集群添加成功
查看一组一从的对应关系,关系随机对应。
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
4.测试
172.25.254.10上
可以创建lee用户失败
[root@localhost ~]# redis-cli -a 123456
127.0.0.1:6379> set name lee
信息指引到172.25.254.20主机
在172.25.254.20上
可以创建lee用户成功
[root@localhost ~]# redis-cli -a 123456
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
172.25.254.10主机上测集群节点信息
[root@localhost ~]# redis-cli -a 123456 --cluster check 172.25.254.10:6379
显示有四个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
将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
使用命令检测集群节点信息
[root@localhost ~]# redis-cli -a 123456 --cluster check 172.25.254.10:6379
172.25.254.130对应的master为172.25.254.40
五:clsuter集群维护
添加节点的时候是先添加node节点到集群,然后分配槽位,删除节点的操作与添加节点的操作正好相反,是先将被删除的Redis node上的槽位迁移到集群中的其他Redis node节点上,然后再将其删除,如果一个Redis node节点上的槽位没有被完全迁移,删除该node的时候会提示有数据且无法删除
将节点从集群中移除
删除172.25.254.130节点,则删除172.25.254.130对应的id
[root@localhost ~]# redis-cli -a 123456 --cluster del-node 172.25.254.130:6379 b371e1c8d310946e051684176cf14e31f05cec17
再次使用命令查询节点
[root@localhost ~]# redis-cli -a 123456 --cluster check 172.25.254.10:6379
172.25.254.130节点被删除
恢复槽位
[root@localhost ~]# redis-cli -a 123456 --cluster reshard 172.25.254.20:6379