情況描述:
三主三從原生集群,rhel6.8 64位機(jī)器,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。
由于物理機(jī)故障,需要將該物理機(jī)上的兩個(gè)redis節(jié)點(diǎn)遷移到其他物理機(jī)。遷移過程如下:
1、確保這兩個(gè)節(jié)點(diǎn)為slave后,若不是,則需進(jìn)行切換操作
2、停止兩個(gè)節(jié)點(diǎn)的redis服務(wù),關(guān)閉操作系統(tǒng)
3、復(fù)制虛擬機(jī)硬盤文件到新的物理機(jī)上。
4、配置好網(wǎng)絡(luò),保持ip不變。啟動(dòng)redis服務(wù)
發(fā)現(xiàn)新啟動(dòng)的redis已經(jīng)不能加入集群中了,id變了。這有個(gè)疑問,為什么遷移前,只要不清理集群nodes配置文件,不管怎么重啟redis,id都不會(huì)變。這遷移了位置,啟動(dòng)后id就變更了,難道跟mac地址或者其他什么因素導(dǎo)致的?
此時(shí)查看集群配置信息:cat nodes-7654.conf
可以看到有兩個(gè)節(jié)點(diǎn)連接失敗,且新啟動(dòng)的redis服務(wù),用redis-trib.rb檢測(cè),他本身是master。
此時(shí)解決方法是:添加節(jié)點(diǎn),將重啟的redis節(jié)點(diǎn)當(dāng)做新節(jié)點(diǎn)加入,角色為slave
其中--master-id為他要復(fù)制的哪一個(gè)master節(jié)點(diǎn)的id。
第一個(gè)ip:port為即將加入的節(jié)點(diǎn)的
第二個(gè)ip:port為集群中已存在節(jié)點(diǎn)的
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角色,此時(shí)查看集群配置信息為:
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
可以看到配置中有兩個(gè)失效的節(jié)點(diǎn)信息,通過cluster forget或者redis-trib.rb del-node都不能刪除,報(bào)錯(cuò)節(jié)點(diǎn)不存在,可以通過以下方法解決:
刪除所有節(jié)點(diǎn)的集群nodes配置信息,然后登陸每一個(gè)節(jié)點(diǎn)運(yùn)行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