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

相关推荐
Database_Cool_14 分钟前
单机 MySQL 迁移到分布式数据库方便吗?阿里云 PolarDB-X 100% MySQL 协议兼容零改造平滑迁移
数据库·分布式·mysql
姜太小白1 小时前
【MySQL】 索引优化实战:解决 WHERE 等值 + IS NULL 查询,TEXT 字段报错 1167 的完整指南
数据库·mysql
窝子面1 小时前
手搓最简前后端协作-node
javascript·数据库
吳所畏惧2 小时前
宝塔面板Redis密码修改指南:SSH命令修改 vs 面板UI界面修改,哪个更靠谱?
运维·服务器·数据库·redis·缓存·ssh
DFT计算杂谈2 小时前
无 Root 权限在 Tesla K80 零门槛部署 DeepSeek 大模型
linux·服务器·网络·数据库·机器学习
HPFBoy2 小时前
log4net 数据库存日志正确配置
数据库
赵丙双2 小时前
Redis 概率相关的数据类型
redis
liuxiaowei32 小时前
【绝版教程】新版MySQL DBA高级实战进阶班 MySQL8.0 姜承尧-腾讯数据库总监
数据库·mysql·dba
破碎的南瓜3 小时前
sqli--sql注入过关笔记(1,2,3,4,5,9)
数据库·笔记·sql