01-集群cluster
-
存在的问题
- redis提供的服务OPS(operation per second)可以达到10万/秒,当前业务OPS如果超过10万/秒,怎么办?
-
redis集群
-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gITgqXr9-1681709270830)(null)]
-
使用网络将若干redis主从机器机联通起来,并提供统一的管理方式,使其对外呈现单机的服务效果
-
-
好处
- 分散单台服务器的访问压力,实现负载均衡
- 分散单台服务器的存储压力,实现可扩展性
- 降低单台服务器宕机带来的业务灾难
02-cluster集群搭建
-
需求
- 搭建三个 1主1从 结构,并启动cluster集群
-
配置说明
# 是否启用cluster,加入cluster节点 cluster-enabled yes|no # cluster配置文件名,该文件属于自动生成,仅用于快速查找文件并查询文件内容 cluster-config-file filename # 节点服务响应超时时间,用于判定该节点是否下线或切换为从节点 cluster-node-timeout milliseconds
-
语法
#主机ip1:主机port1 #从机ip1:从机port1 #n: 1台主机对应n台从机 redis-cli --cluster create 主机ip1:主机port1 [主机ip2:主机port2 ...] 从机ip1:从机port1 [从机ip2:从机port2 ...] --cluster-replicas n
-
开发步骤
- ①配置主从结构
- ②启动主从服务
- ③启用集群服务
- ④查看集群信息
-
①配置主从结构
#主机配置 port 6379 daemonize no # logfile "log-6379.log" maxclients 100000 timeout 0 loglevel debug # RDB设置 # 1.设置rdb文件名 dbfilename "dump-6379.rdb" # 2.设置rdb文件存储路径 dir "/usr/local/redis-6379/data" # 3.设置存储rdb时是否压缩数据 rdbcompression no # 4.设置读写文件过程是否进行RDB格式校验 rdbchecksum no # 5.后台存储过程中如果出现错误现象,是否停止保存操作 stop-writes-on-bgsave-error yes # 6.每隔10秒检测一次,有2个数据变化就执行bgsave指令 save 10 2 # AOF设置 # 1.开启aof持久化功能 appendonly yes # 2.设置aof文件名 appendfilename "appendonly-6379.aof" # 4.设置aof策略 appendfsync everysec # 5.当前aof文件大小达到64mb,自动触发AOF重写 auto-aof-rewrite-min-size 64mb # 5.当前aof文件大小比之前aof文件大小增加了100%,自动触发AOF重写 auto-aof-rewrite-percentage 100 protected-mode no # 是否启用cluster,加入cluster节点 cluster-enabled yes # cluster配置文件名,该文件属于自动生成,仅用于快速查找文件并查询文件内容 cluster-config-file "cluster-6379.conf" # 节点服务响应超时时间,用于判定该节点是否下线或切换为从节点 cluster-node-timeout 5000
#从机配置 # slave-26379 port 26379 daemonize no dir "/usr/local/redis-26379/data" # 设置RDB文件 dbfilename "dump-26379.rdb" # 开启aof appendonly yes appendfilename "appendonly-26379.aof" appendfsync everysec # 设置无密码访问 protected-mode no # 开启集群 cluster-enabled yes # cluster配置文件名 cluster-config-file "cluster-26379.conf" # 节点服务响应超时时间为5秒 cluster-node-timeout 5000
-
②启动主从服务
# 集群至少3个主节点,至少6个节点 redis-server /usr/local/redis-6379/redis-6379.conf redis-server /usr/local/redis-6380/redis-6380.conf redis-server /usr/local/redis-6381/redis-6381.conf redis-server /usr/local/redis-26379/redis-26379.conf redis-server /usr/local/redis-26380/redis-26380.conf redis-server /usr/local/redis-26381/redis-26381.conf
-
③启用集群服务
redis-cli --cluster create 192.168.199.110:6379 192.168.199.110:6380 192.168.199.110:6381 192.168.199.110:26379 192.168.199.110:26380 192.168.199.110:26381 --cluster-replicas 1
-
④查看集群信息
cluster nodes
-
注意事项
- 在cluster集群中, 确认主从关系不需要配置
slaveof ip port
- redis集群有16384个槽, 默认是等分.
- 在cluster集群中, 确认主从关系不需要配置
03-cluster集群演示
-
需求
-
①使用集群模式操作redis
redis-cli -c -p 端口
-
②关闭redis-6379, 查看主从切换情况
-
-
①使用集群操作redis
-
②关闭redis-6379, 查看主从切换情况
- 注意: cluster集群内置哨兵模式.
04-cluster集群节点操作之添加master
-
语法
#new-master-host:new-master-port: 新主机的ip和port #cluster-host:cluster-port: 已经在集群中的设备的ip和port redis-cli --cluster add-node new-master-host:new-master-port cluster-host:cluster-port
-
需求
- 新建6382的节点, 并将其添加到redis集群中
-
开发步骤
- ①新建6382节点并启动
- ②将其添加到redis集群中
-
①新建6382节点并启动
-
②将其添加到redis集群中
redis-cli --cluster add-node 192.168.199.110:6382 192.168.199.110:6379
05-cluster集群节点操作之添加slave
-
语法
#new-slave-host:new-slave-port: 新从机的ip和port #master-host:master-port: 主机的ip和port #masterid: 主机的id redis-cli --cluster add-node new-slave-host:new-slave-port master-host:master-port --cluster-slave --cluster master-id masterid
-
需求
- cluster集群添加slave-26382
-
开发步骤
- ①新建26382节点并启动
- ②将其添加到redis集群中
-
①新建26382节点并启动
-
②将其添加到redis集群中
redis-cli --cluster add-node 192.168.199.110:26382 192.168.199.110:6382 --cluster-slave --cluster-master-id 7815c2d8a6255391d3d38a7cdfd689ec5f7ad927
06-cluster集群节点操作之移除节点
-
语法
#del-node del-cluster-host:del-cluster-port: 需要删除的节点的ip和port #del-cluster-id: 需要删除的节点的id redis-cli --cluster del-node del-cluster-host:del-cluster-port del-cluster-id
-
需求
- cluster集群移除master-6382、slave-26382
-
代码实现
redis-cli --cluster del-node 192.168.216.110:6382 c876a9869fdcb8a91decb109d73cf56df6277369
redis-cli --cluster del-node 192.168.216.110:26382 0a84ac5ddb836fe56444f9a85726314d435d226a
-
注意事项
- 只能删除空节点(①没有slots, ②没有从机)
07-cluster集群分槽
-
概述
- redis集群中有16384个槽, 用于存储数据.
-
语法
#--cluster reshard target-master-host:target-master-port: 目标主机的ip和port #--cluster-from src-master-id1 ... src-master-idn: 源头主机的id #--cluster-to target-master-id: 目标主机的id #--cluster-slots slots: 槽的数量 redis-cli --cluster reshard target-master-host:target-master-port --cluster-from src-master-id1 ... src-master-idn --cluster-to target-master-id --cluster-slots slots
-
需求
6379
,6380
,6381
,6382
四个主机均分16384
个slots, 每一个主机分得4096
-
代码实现
redis-cli --cluster reshard 192.168.199.110:6382 --cluster-from 4cdc5c3348744f68887c4e12e62965727b9ae373 b4cfa66305c8e8edce500425b667873344aa89a8 b3ca1b27d891d42bf7abda2e66a5f2f441a2f444 --cluster-to 7815c2d8a6255391d3d38a7cdfd689ec5f7ad927 --cluster-slots 4096
-
补充
- 如果要删除主机, 需要先将槽分配给其他主机, 再删除对应的从机.