在測驗的程序中,我嘗試搭建一個redis集群,實作redis集群的客戶端,如果需要達到redis官方的標準,需要滿足處理ASK錯誤,我搭建的redis集群部署如下(ip進行了修改):
主節點: 1.1.1.1 7000 1b220196cbf1b2d870366d05097c1a56ff096479 0-5460
主節點: 1.1.1.1 7001 6516f46a15a2745dd16e12b608f2420bdedf384e 5461-10922
主節點: 1.1.1.2 7000 e2354ceeaf53451c932f6536d27a39e1be1090da 10923-16383
從節點:1.1.1.2 7001 -> 1.1.1.1 7000 5ff7670b43c0067fa54ab32d5ce4fad4c103cf4c
從節點:1.1.1.3 7000 -> 1.1.1.1 7001 fdc657db984ee6e00ede607413ede3458c1c45a2
從節點:1.1.1.3 7001 -> 1.1.1.2 7000 35fff3049164196580b4398c6cca6a0398ca99bb
為了測驗ASK錯誤,我打算把1.1.1.1 7000中的一個槽位2中的一個key: vgqpx,從主節點1.1.1.1 7000,移動到1.1.1.1 7001,
首先,我對節點1.1.1.1 7001呼叫
CLUSTER SETSLOT 2 IMPORTING 1b220196cbf1b2d870366d05097c1a56ff096479
然后對節點1.1.1.1 7000呼叫
CLUSTER SETSLOT 2 MIGRATING 6516f46a15a2745dd16e12b608f2420bdedf384e
然后對節點 1.1.1.1 7000呼叫
CLUSTER GETKEYSINSLOT 2 10
發現槽位中只有 vgqpx,然后將這個節點移動到 1.1.1.1 7001(還是對1.1.1.1 7000)呼叫:
MIGRATE 1.1.1.1 7001 vgqpx 0 10
操作到此為止,
這時候,查看cluster nodes和cluster slots,和預想的結果一致,但是,如果這時候,我們把1.1.1.1 7000 kill掉,會看到如何下的redis nodes資訊:
1) 1) (integer) 0
2) (integer) 1
3) 1) "1.1.1.2"
2) (integer) 7001
3) "5ff7670b43c0067fa54ab32d5ce4fad4c103cf4c"
2) 1) (integer) 3
2) (integer) 5460
3) 1) "1.1.1.2"
2) (integer) 7001
3) "5ff7670b43c0067fa54ab32d5ce4fad4c103cf4c"
3) 1) (integer) 2
2) (integer) 2
3) 1) "1.1.1.1"
2) (integer) 7000
3) "1b220196cbf1b2d870366d05097c1a56ff096479"
4) 1) (integer) 5461
2) (integer) 10922
3) 1) "1.1.1.1"
2) (integer) 7001
3) "6516f46a15a2745dd16e12b608f2420bdedf384e"
4) 1) "1.1.1.3"
2) (integer) 7000
3) "fdc657db984ee6e00ede607413ede3458c1c45a2"
5) 1) (integer) 10923
2) (integer) 16383
3) 1) "1.1.1.2"
2) (integer) 7000
3) "e2354ceeaf53451c932f6536d27a39e1be1090da"
4) 1) "1.1.1.3"
2) (integer) 7001
3) "35fff3049164196580b4398c6cca6a0398ca99bb"
然后,我們將1.1.1.1 7000重新啟動,這個節點會自動加入集群,然后再重新呼叫cluster slots,結果如下:
1) 1) (integer) 0
2) (integer) 1
3) 1) "1.1.1.2"
2) (integer) 7001
3) "5ff7670b43c0067fa54ab32d5ce4fad4c103cf4c"
4) 1) "1.1.1.1"
2) (integer) 7000
3) "1b220196cbf1b2d870366d05097c1a56ff096479"
2) 1) (integer) 3
2) (integer) 5460
3) 1) "1.1.1.2"
2) (integer) 7001
3) "5ff7670b43c0067fa54ab32d5ce4fad4c103cf4c"
4) 1) "1.1.1.1"
2) (integer) 7000
3) "1b220196cbf1b2d870366d05097c1a56ff096479"
3) 1) (integer) 5461
2) (integer) 10922
3) 1) "1.1.1.1"
2) (integer) 7001
3) "6516f46a15a2745dd16e12b608f2420bdedf384e"
4) 1) "1.1.1.3"
2) (integer) 7000
3) "fdc657db984ee6e00ede607413ede3458c1c45a2"
4) 1) (integer) 10923
2) (integer) 16383
3) 1) "1.1.1.2"
2) (integer) 7000
3) "e2354ceeaf53451c932f6536d27a39e1be1090da"
4) 1) "1.1.1.3"
2) (integer) 7001
3) "35fff3049164196580b4398c6cca6a0398ca99bb"
在這種情況下,cluster slots回傳的槽位2的資訊很奇怪,要么回傳了已經斷開連接的那個節點ip和port,要么,根本就不回傳,對于這種特殊情況,我暫時不確定是否為redis的bug,還是我們需要特殊處理,先把這個記在這里,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/1190.html
標籤:其它
上一篇:Redis list操作命令
