今天機房有一臺物理機宕機了,有一個虛擬機192.168.1.122,其上有兩個redis 節點也不能用了。
redis沒有備份,丟失的192.168.1.122節點只能重建。
我找運維的人,分配了一個全新的虛擬機,並且分配的ip的地址仍然是192.168.1.122。
我在上面裝了兩個全新的redis,並且無數據:
1
2
|
/usr/ local /redis/bin/redis-server /opt/cachecloud/conf/redis-cluster-6396.conf & /usr/ local /redis/bin/redis-server /opt/cachecloud/conf/redis-cluster-6397.conf & |
此時,這兩個redis還是獨立的實例,和原來的集羣沒有任何聯繫。
在集羣內任意節點,執行cluster meet命令,將192.168.1.122:6396和 192.168.1.122:6397兩個實例加入到集羣裏面:
1
2
3
4
|
192.168.1.123:6387> cluster meet 192.168.1.122 6396 OK 192.168.1.123:6387> cluster meet 192.168.1.122 6397 OK |
查看集羣狀態:
1
2
3
4
5
6
7
8
9
|
192.168 . 1.123 : 6387 > cluster nodes 6bf77cfcd046681eef9c3d7f94a66709a4a691e4 : 0 slave,fail,noaddr 9eb3af9feb3492514834b573260ed8e56419e3c5 1669974772279 1669974767266 5 disconnected a227a5bef13fe9a33f9e472e6421b66a0a47d60f 192.168 . 1.122 : 6396 master - 0 1670075583027 0 connected 9eb3af9feb3492514834b573260ed8e56419e3c5 192.168 . 1.71 : 6387 master - 0 1670075580019 5 connected 0 - 5461 89d9854ee74c8546fad5da04c5a92492c86905d0 192.168 . 1.123 : 6387 myself,master - 0 0 2 connected 5462 - 10923 02a9161dab2bbffbd3066f49d22344356bf9ea33 192.168 . 1.71 : 6388 master - 0 1670075579015 4 connected 10924 - 16383 6b85f48692c226691f3980ad2f52ef103c4ef05e : 0 slave,fail,noaddr 89d9854ee74c8546fad5da04c5a92492c86905d0 1669974770273 1669974763256 4 disconnected 5d1891df2da56a5fa9ec5b91905e9b3fe1ceba04 192.168 . 1.122 : 6397 master - 0 1670075582025 7 connected 261e6aa4e54d2725445849b525d4ef2be6c85764 192.168 . 1.123 : 6388 slave 02a9161dab2bbffbd3066f49d22344356bf9ea33 0 1670075584030 4 connected |
看到192.168.1.122:6396和192.168.1.122:6397加進來了,它們的角色都是master。
接下來,我們把 192.168.1.122:6396和192.168.1.122:6397分別作爲192.168.1.71:6387和192.168.1.123:6387的從節點。
1
2
3
4
5
6
7
|
192.168.1.122 : 6396 > CLUSTER REPLICATE 9eb3af9feb3492514834b573260ed8e56419e3c5 OK 其中 9eb3af9feb3492514834b573260ed8e56419e3c5 爲需要的主節點node id 192.168.1.122 : 6396 爲需要全換的主機 以下同理: 192.168.1.122 : 6397 > CLUSTER REPLICATE 89d9854ee74c8546fad5da04c5a92492c86905d0 OK |
修改從爲指定的主,結果如下:
1
2
3
4
5
6
7
|
cluster nodes 02 a 9161 dab 2 bbffbd 3066 f 49 d 22344356 bf 9 ea 33 192.168 . 1.71: 6388 master - 0 1670077220086 4 connected 10924 -16383 5 d 1891 df 2 da 56 a 5 fa 9 ec 5 b 91905 e 9 b 3 fe 1 ceba 04 192.168 . 1.122: 6397 myself,slave 89 d 9854 ee 74 c 8546 fad 5 da 04 c 5 a 92492 c 86905 d 0 0 0 7 connected 9 eb 3 af 9 feb 3492514834 b 573260 ed 8 e 56419 e 3 c 5 192.168 . 1.71: 6387 master - 0 1670077223093 5 connected 0 -5461 261 e 6 aa 4 e 54 d 2725445849 b 525 d 4 ef 2 be 6 c 85764 192.168 . 1.123: 6388 slave 02 a 9161 dab 2 bbffbd 3066 f 49 d 22344356 bf 9 ea 33 0 1670077224097 4 connected a 227 a 5 bef 13 fe 9 a 33 f 9 e 472 e 6421 b 66 a 0 a 47 d 60 f 192.168 . 1.122: 6396 slave 9 eb 3 af 9 feb 3492514834 b 573260 ed 8 e 56419 e 3 c 5 0 1670077219083 5 connected 89 d 9854 ee 74 c 8546 fad 5 da 04 c 5 a 92492 c 86905 d 0 192.168 . 1.123: 6387 master - 0 1670077222092 2 connected 5462 -10923 |
可以看到正常了。
但是上面的拓撲中,還是存在一個隱患,就是如果192.168.1.71宕機後,其上的1和3兩個主節點都會丟失,存在極大的隱患。
下面我們停掉192.168.1.71的1實例,讓192.168.1.122的上的1實例提升爲主節點:
1
|
/usr/local/bin/redis-cli -h 192.168.1.71 -p 6387 -a '123' shutdown |
看到進行了主從切換,這樣的拓撲圖是安全的,不會出現一個機器宕機,而丟失數據的情況。
轉自
redis cluster 故障後,主從位於不同節點的修復。_ITPUB博客
http://blog.itpub.net/28916011/viewspace-2926609/