最近使用redis集群时常出故障,就把修复的心得记录一下,免得许久不用又记不起来了。
redis的redis.conf文件配置之类的就不描述了,反正文件是正确的,redis目录下就有redis_init_script.sh脚本, 数据如*.rdb,redis_*.conf,appendonly.aof都存于data文件夹中
redis集群初期都是通过脚本 ./redis_init_script.sh start启动的.
现在有个别节点不在集群里了,集群连接故障,查看命令:
redis -a XXX cluster nodes;
简单修复方案:
1.启动故障的Redis节点:
./redis_init_script.sh start
2.进入Redis bin目录,以客户端登录进入集群中某台Redis
./redis-cli -h 192.168.1.101
auth XXX
cluster meet 192.168.1.102
3.exit退出后,执行更正命令
./redis-cli --cluster fix 192.168.1.102:6379
如果要求严格一点,要做下再平衡:
redis-cli --cluster rebalance --cluster-use-empty-masters --cluster-pipeline 1000 --cluster-simulate 192.168.1.102 6379
rebalance host:port # 指定集群的任意一节点进行平衡集群节点slot数量
--cluster-weight <node1=w1...nodeN=wN> # 指定集群节点的权重
--cluster-use-empty-masters # 设置可以让没有分配slot的主节点参与,默认不允许
--cluster-timeout <arg> # 设置migrate命令的超时时间
--cluster-simulate # 模拟rebalance操作,不会真正执行迁移操作
--cluster-pipeline <arg> # 定义cluster getkeysinslot命令一次取出的key数量,默认值为10
--cluster-threshold <arg> # 迁移的slot阈值超过threshold,执行rebalance操作
--cluster-replace # 是否直接replace到目标节点
招终极大:当然想要以初始状态来恢复,工作量要大一些,在所有Redis节点:
1.停止Redis进程,kill 或 ./redis-cli -a XXX shutdown皆可
2.删除data目录下的*.rdb,redis_*.conf,appendonly.aof 三文件,
3.重新启动服务,./redis_init_script.sh start
最后发起集群命令:
./redis-cli -c -a XXX --cluster create 192.168.1.101:port 192.168.1.101:port --cluster-replicas 1
则完成集群创建。