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

在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

相关推荐
爬山算法3 分钟前
Tomcat(36)Tomcat的静态资源缓存
java·缓存·tomcat
LightOfNight18 分钟前
Redis设计与实现第14章 -- 服务器 总结(命令执行器 serverCron函数 初始化)
服务器·数据库·redis·分布式·后端·缓存·中间件
代码中の快捷键31 分钟前
MySQL数据库存储引擎的数据结构
数据结构·数据库·mysql
Adolf_19931 小时前
Django 路由层
数据库
好记忆不如烂笔头abc1 小时前
logminer挖掘日志归档查找问题
数据库·sql·mysql
田本初3 小时前
浏览器缓存与协商缓存
前端·javascript·缓存
java_heartLake9 小时前
PostgreSQL数据库参数调优实践
数据库·postgresql·调优
小小李程序员10 小时前
LRU缓存
java·spring·缓存
xnuscd10 小时前
Milvus概念
数据库·学习·mysql
代码欢乐豆10 小时前
软件工程第13章小测
服务器·前端·数据库·软件工程