1. 程式人生 > >redis叢集報錯,(error) MOVED 15495 127.0.0.1:7003

redis叢集報錯,(error) MOVED 15495 127.0.0.1:7003

節點會對命令請求進行分析和key的slot計算,並且會查詢這個命令所要處理的鍵所在的槽。如果要查詢的雜湊槽正好就由接收到命令的節點負責處理, 那麼節點就直接執行這個命令。

另一方面, 如果所查詢的槽不是由該節點處理的話, 節點將檢視自身內部所儲存的雜湊槽到節點 ID 的對映記錄, 並向客戶端回覆一個 MOVED 錯誤。上面的錯誤資訊包含鍵 x 所屬的雜湊槽15495, 以及負責處理這個槽的節點的 IP 和埠號 127.0.0.1:7003 。

雖然我們用Node ID來標識叢集中的節點, 但是為了讓客戶端的轉向操作儘可能地簡單, 節點在 MOVED 錯誤中直接返回目標節點的 IP 和埠號, 而不是目標節點的 ID 。客戶端應該記錄槽15495由節點127.0.0.1:7003負責處理“這一資訊, 這樣當再次有命令需要對槽15495執行時, 客戶端就可以加快尋找正確節點的速度。這樣,當叢集處於穩定狀態時,所有客戶端最終都會儲存有一個雜湊槽至節點的對映記錄,使得叢集非常高效: 客戶端可以直接向正確的節點發送命令請求, 無須轉向、代理或者其他任何可能發生單點故障(single point failure)的實體(entiy)。