redis虚拟机迁移到其他实体机导致集群故障
情况描述:
三主三从原生集群,rhel6.8 64位机器,redis版本为3.2.8,redis的gem文件版本为3.3.3,ruby版本为2.4.0,gem版本为2.6.10,zlib版本为1.2.11,openssl版本为1.0.1e-fips。
由于物理机故障,需要将该物理机上的两个redis节点迁移到其他物理机。迁移过程如下:
1、确保这两个节点为slave后,若不是,则需进行切换操作
2、停止两个节点的redis服务,关闭操作系统
3、复制虚拟机硬盘文件到新的物理机上。
4、配置好网络,保持ip不变。启动redis服务
发现新启动的redis已经不能加入集群中了,id变了。这有个疑问,为什么迁移前,只要不清理集群nodes配置文件,不管怎么重启redis,id都不会变。这迁移了位置,启动后id就变更了,难道跟mac地址或者其他什么因素导致的?
此时查看集群配置信息:cat nodes-7654.conf
可以看到有两个节点连接失败,且新启动的redis服务,用redis-trib.rb检测,他本身是master。
此时解决方法是:添加节点,将重启的redis节点当做新节点加入,角色为slave
其中--master-id为他要复制的哪一个master节点的id。
第一个ip:port为即将加入的节点的
第二个ip:port为集群中已存在节点的
redis-trib.rb add-node --slave --master-id f3ac25b069b4ebd504173d26244f728ddb7db329 10.0.10.13:7654 10.0.10.15:7654
redis-trib.rb add-node --slave --master-id f6947ac9a33d2c90034f5b35f3e8751d09492be8 10.0.10.16:7654 10.0.10.15:7654
基于安全的考虑,让10.0.10.16在加入后,切换成了master角色,此时查看集群配置信息为:
ae7bbe241aa178747d99a866fe56523a871417b1 10.0.10.16:7654 master - 0 1540459238280 11 connected 10923-16383
f3ac25b069b4ebd504173d26244f728ddb7db329 10.0.10.17:7654 myself,master - 0 0 10 connected 0-5460
f6947ac9a33d2c90034f5b35f3e8751d09492be8 10.0.10.15:7654 slave ae7bbe241aa178747d99a866fe56523a871417b1 0 1540459239686 11 connected
91a92235a9bd592109e3adbd7ddcd9f794708576 :0 slave,fail,noaddr f3ac25b069b4ebd504173d26244f728ddb7db329 1540456267274 1540456266471 10 disconnected<<<<<<<<<<<<<<<<<<<<<连接失败
d9514583f6bb4c3850d4b5a87d47f6e2b0b4a8aa :0 slave,fail,noaddr f6947ac9a33d2c90034f5b35f3e8751d09492be8 1540456271394 1540456270390 6 disconnected<<<<<<<<<<<<<<<<<<<<<连接失败
cb5588ad114b75e5db4445f5a723ea52173baf65 10.0.10.18:7654 master - 0 1540459239183 9 connected 5461-10922
b9d4d483d42fc9a007cc0f034bff5ebec83c4fa0 10.0.10.13:7654 slave f3ac25b069b4ebd504173d26244f728ddb7db329 0 1540459239686 10 connected
b262698141699417bb3b92ab0cc1f298d59a8cd2 10.0.10.14:7654 slave cb5588ad114b75e5db4445f5a723ea52173baf65 0 1540459239183 9 connected
可以看到配置中有两个失效的节点信息,通过cluster forget或者redis-trib.rb del-node都不能删除,报错节点不存在,可以通过以下方法解决:
删除所有节点的集群nodes配置信息,然后登陆每一个节点运行cluster saveconfig名,新生成配置文件。
cd /u01/redis/3.2.8/data/7654/
rm -rf nodes-7654.conf
redis-cli -c -h 10.0.10.13 -p 16963 CLUSTER SAVECONFIG
redis-cli -c -h 10.0.10.14 -p 16963 CLUSTER SAVECONFIG
redis-cli -c -h 10.0.10.15 -p 16963 CLUSTER SAVECONFIG
redis-cli -c -h 10.0.10.16 -p 16963 CLUSTER SAVECONFIG
redis-cli -c -h 10.0.10.17 -p 16963 CLUSTER SAVECONFIG
redis-cli -c -h 10.0.10.18 -p 16963 CLUSTER SAVECONFIG