Redis扩容及Slot Balance、Reshard

Redis扩容及Slot Balance、Reshard

本文档是在上生产环境前,在腾讯云测试环境中做的
某银行生产环境最终redis扩容结果:
redis数据量一共有14亿6千多万key,16384个Slot,将130台机器配置成master slave模式,目前130每台redis内存已经调成14G,且每台使用率在6.49G到7.65G左右,65个master每台机器分配
slot在252至253。

新添加了两台机器
10.255.1.4 tbds-10-255-1-4
10.255.1.12 tbds-10-255-1-12

1、查看原有redis集群
登陆10.255.1.10原有redis的集群

./redis-cli -c -h tbds-10-255-1-10  -p 6379 -a tbds@Tbds.com

在这里插入图片描述
2、添加新的节点到集群中
2.1、添加tbds-10-255-1-4到集群中

./redis-cli -c -h tbds-10-255-1-4  -p 6379 -a tbds@Tbds.com

在这里插入图片描述

cd /usr/hdp/2.2.0.0-2041/redis-3.2.9/src
#add-node 第一个IP为要加入redis cluster的机器,第二个为redis cluster中任意一台机器IP
./redis-trib.rb add-node 10.255.1.4:6379 10.255.1.10:6379  

在这里插入图片描述
在这里插入图片描述

2.2、添加tbds-10-255-1-12到集群中

./redis-cli -c -h tbds-10-255-1-12  -p 6379 -a tbds@Tbds.com

在这里插入图片描述

cd /usr/hdp/2.2.0.0-2041/redis-3.2.9/src
#add-node 第一个IP为要加入redis cluster的机器,第二个为redis cluster中任意一台机器IP
./redis-trib.rb add-node 10.255.1.12:6379 10.255.1.10:6379

在这里插入图片描述

在这里插入图片描述
3、主从分配

#登陆新添加的节点中的一个(比如想想让10.255.1.12成为10.255.1.4的slave,登陆10.255.1.12)
./redis-cli -c -h tbds-10-255-1-12  -p 6379 -a tbds@Tbds.com
#将该节点分配给另外一个节点的slave,参数为另外一个节点的id
cluster replicate  e6a63c7731e58246caba05d338d9d9e393a15493
cluster nodes

在这里插入图片描述

4、搬迁数据
4.1 时间预估(计算暂时有点问题,实际生产环境pipeline设置为1000,最终花了大约5个多小时
目前生产环境中每一台redis大约有上三千五百万左右key,整体数据量大约480G,每台redis数据量大约12G左右,最终节点是130台redis实例,初步估算如下:
12G/35000000=368字节
40* 35000000个key ,其中有42%((12-(480/65))/12)的key需要迁移16.8* 35000000个key要迁移。假设内网环境下,ping pong耗时0.1ms。默认情况下每个migrate请求迁移10个key。
脚本串行发送getkeysinslot和migrate命令做一次迁移10个key的操作。
16.8*35000000 * 0.1ms * 2 / 10 = 3.2小时。

其中pipline为10时预计3小时;为100时,预计0.3小时,同时预留一定buffer时间进行校验,预留1小时时间。整体操作在1~4小时内完成。
4.2 具体操作
4.2.1 先停业务
为了保证数据搬迁的准确性,建议根据事先的时间预估停一段时间的业务,保证redis没有数据读写。
4.2.2 操作
 查看redis数据存储目录,备份所有redis数据目录
在这里插入图片描述
到portal目录中,将所有的redis机器的ip写入cluster.info中
在这里插入图片描述

./bootstrap.sh run cp -r “/var/data/redis /var/data/redis.bak”

在这里插入图片描述

 设置免密码登陆(每个redis节点都要设置,可以写个脚本)

./redis-cli -h tbds-172-17-1-236 -a tbds@Tbds.com config set masterauth "";
./redis-cli -h tbds-172-17-1-236 -a tbds@Tbds.com config set requirepass "";
注明:
生产环境可以执行可以执行add_passwd.sh

 登陆某一台redis机器,修改ruby的redis的password配置

vim /usr/local/share/gems/gems/redis-3.3.3/lib/redis/client.rb
###tbds@Tbds.com改成nil

在这里插入图片描述
 查看目前redis中key,slot分配情况

./redis-trib.rb info tbds-10-255-1-10:6379
./redis-cli -c -h tbds-10-255-1-10  -p 6379 cluster nodes 
##从下面截图中很容易看出10.255.1.4上没有slot和key,而10.255.1.10上有8192 slot

在这里插入图片描述

在这里插入图片描述
 执行rebalance

##先模拟查看redis cluster 的执行计划
##模拟rebalance
./redis-trib.rb rebalance  --use-empty-masters --pipeline 100 --simulate 10.255.1.10:6379

注明:
–use-empty-masters:rebalance是否考虑没有节点的master,默认没有分配slot节点的master是不参与rebalance的,设置–use-empty-masters可以让没有分配slot的节点参与rebalance。
–simulate:设置该参数,可以模拟rebalance操作,提示用户会迁移哪些slots,而不会真正执行迁移操作。
–host:port:这个是必传参数,用来从一个节点获取整个集群信息,相当于获取集群信息的入口。
–pipeline :与reshar的pipeline参数一样,定义cluster getkeysinslot命令一次取出的key数量,不传的话使用默认值为10。
在这里插入图片描述

通过simulate参数可以看出slot搬迁策略为
从10.255.1.10:6379搬迁4096 slots到10.255.1.4
###实际搬迁:

./redis-trib.rb rebalance  --use-empty-masters --pipeline 100  10.255.1.10:6379

在这里插入图片描述

 查看目前redis cluster的slot分布

./redis-trib.rb info 10.255.1.10:6379
./redis-cli -c -h 10.255.1.10 -p 6379  cluster nodes

在这里插入图片描述
注明:生产环境中操作同理
##模拟rebalance

./redis-trib.rb rebalance  --use-empty-masters --pipeline 100 --simulate host:6379

###实际搬迁:

./redis-trib.rb rebalance  --use-empty-masters --pipeline 100  host:6379
##或者直接执行rebalance_redis.sh脚本

 恢复以前的状态
将密码设置回来(每个节点都要设置,可以写个脚本)

./redis-cli -h tbds-172-17-1-236 -a tbds@Tbds.com config set masterauth "tbds@Tbds.com ";
./redis-cli -h tbds-172-17-1-236 -a tbds@Tbds.com config set requirepass "tbds@Tbds.com ";
注明:生产环境可以执行remove_passwd.sh脚本

##修改ruby的redis的password配置为以前的

vim /usr/local/share/gems/gems/redis-3.3.3/lib/redis/client.rb

nil改成tbds@Tbds.com

4.2.4 回滚
 先设置免密码登陆(每个节点都要设置,可以写个脚本)

./redis-cli -h tbds-172-17-1-236 -a tbds@Tbds.com config set masterauth "";
./redis-cli -h tbds-172-17-1-236 -a tbds@Tbds.com config set requirepass "";

 登陆某一台redis机器,修改ruby的redis的password配置

vim /usr/local/share/gems/gems/redis-3.3.3/lib/redis/client.rb

在这里插入图片描述

 查看目前redis中key,slot分配情况

./redis-trib.rb info tbds-10-255-1-10:6379
./redis-cli -c -h tbds-10-255-1-10  -p 6379 cluster nodes

在这里插入图片描述
在这里插入图片描述
 在线搬迁
在这里插入图片描述

在这里插入图片描述

从终端上来看,是从10.255.1.4的迁移slot到10.255.1.10上
在这里插入图片描述

 查看集群中slot

./redis-trib.rb info tbds-10-255-1-10:6379
./redis-cli -c -h tbds-10-255-1-10  -p 6379 cluster nodes

在这里插入图片描述

 恢复以前的状态
将密码设置回来(每个节点都要设置,可以写个脚本)

./redis-cli -h tbds-172-17-1-236 -a tbds@Tbds.com config set masterauth "tbds@Tbds.com ";
./redis-cli -h tbds-172-17-1-236 -a tbds@Tbds.com config set requirepass "tbds@Tbds.com ";

修改ruby的redis的password配置为以前的

vim /usr/local/share/gems/gems/redis-3.3.3/lib/redis/client.rb

nil改成tbds@Tbds.com

注明:生产环境中,rebalance完以后,如果要回滚,就要计算从新扩容的25台master分配一定的slot到以前的40台master中去,而且在线搬迁只支持一次搬迁到一个节点上,所有比较复杂,建议不要回滚。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值