一.案例概述
- 某电商大型项目,由于业务大规模升级。项目中的前置缓存节点,已经不能满足当前的业务需求。现在对redis-cluster集群redis扩容一套redis主备节点,对于实际的生产环境,一般规划是在晚上凌晨12点操作。操作之前提前做好redis安装部署,晚上12点左右,业务量比较少,影响范围比较少,redis对接的底层数据库(MySQL),先要锁库、锁表,不生产业务流数据,这样redis集群可产生影响较小。
二.redis-cluster集群规划
- 环境部署
类别 | IP地址 | 系统 | 软件包 |
master | ens33:192.168.43.101 ens37:192.168.43.247 ens38:192.168.43.248 新添加的master节点ens39:192.168.43.131 | centos7 | redis-5.0.7.tar.gz rvm-1.29.9.tar.gz |
slave | ens33:192.168.43.102 ens36:192.168.43.156 ens37:192.168.43.185 新添加的slave节点ens38:192.168.43.132 | centos7 | redis-5.0.7.tar.gz |
- 为了节约资源,在一台虚拟机在添加多张网卡,模拟生产环境
- 先模拟部署三台master和三台slave构建redis-cluster群集
- 再添加一组redis服务器,进行节点扩容操作
三.部署redis-cluster集群
- 先利用原有的三对网卡部署redis-cluster集群
- 部署redis-cluster集群参考这篇文章:https://blog.csdn.net/qq_42761527/article/details/104291633
四.redis节点扩容
- 在master中,将两个节点添加到集群,并查看状态(添加到集群中默认为master节点)
[[email protected] ~]# redis-cli --cluster add-node 192.168.43.131:6379 192.168.43.101:6379
[[email protected] ~]# redis-cli --cluster add-node 192.168.43.132:6379 192.168.43.101:6379
- 查看节点(需要节点的ID号),这里会出现所有的节点信息
[[email protected] ~]# redis-cli -h 192.168.43.101 -p 6379
192.168.43.101:6379> cluster nodes
- 平衡hash槽,自动迁移信息
#根据redis 槽位分析,一共有16384个槽位,如果分4个配套节点:每个节点是4096个槽位
[[email protected] ~]# redis-cli --cluster reshard 192.168.43.101:6379
How many slots do you want to move (from 1 to 16384)? 4096 #要迁移多少个槽
What is the receiving node ID? 99521b7fd126b694bcb9a22ffa5a490f31f66543 #迁移到哪个节点(192.168.43.131的ID)
Please enter all the source node IDs.
Type 'all' to use all the nodes as source nodes for the hash slots.
Type 'done' once you entered all the source nodes IDs.
#要求输入源节点的id,这里输入101,247,248三个节点,输入done表示结束
Source node #1: 7f112f82bcf28a5d0627ea81b48cb76f4ea8605d
Source node #2: df195a34a91d756157a0fda7c71e99d5bd8fad09
Source node #3: a233a23541f431107fed79908318394d8bb30b51
Source node #4: done
最后会有一个迁移方案,输入yes表示同意,迁移开始。输入no表示不同意,重新设置迁移方案。
- 检测各个节点槽的均衡性
[[email protected]~]# redis-cli --cluster rebalance 192.168.43.101:6379
- 将扩容的192.168.43.132,这个节点由主节点变为从节点
[[email protected] ~]# redis-cli -h 192.168.43.132 -p 6379
192.168.43.132:6379> cluster replicate 99521b7fd126b694bcb9a22ffa5a490f31f66543
OK
192.168.43.132:6379> cluster nodes //查看节点信息,验证是否转变成功
- 平衡各个节点槽的数量
[[email protected] ~]# redis-cli --cluster rebalance --cluster-threshold 1 192.168.43.132:6379
>>> Performing Cluster Check (using node 192.168.43.132:6379)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
*** No rebalancing needed! All nodes are within the 1.00% threshold.