[料理佳餚] 管理 Redis Cluster(Add Node、Delete Node、Resharding)

Redis Cluster 建立完成後,當然不是建完就擺著可以不用理它,未來有可能會遇到 Scale out 或是資源重新分配的問題,以下介紹如何在我們的 Redis Cluster 上 Add Node、Delete Node、Resharding。

增加 Node

我們準備好另一個 Node 並正常啟動後,就可以執行下面的指令,來增加 Cluster 的 Node。

指令 redis-trib.rb add-node 127.0.0.1:6383 127.0.0.1:6380

指令說明:

Node 增加成功後,我們就會收到下面的成功訊息。

這時候這個 Node 還不能使用,因為它並沒有被分配 hash slot,所以我們就得做 Resharding,把其他 Nodes 上的 hash slot 手動搬到新增加的 Node 來。

重新分片 (Resharding)

Resharding 對於 Redis Cluster 來說是一件非常重要的事情,Node 無論增減都得做 Resharding。

指令 redis-trib.rb reshard 127.0.0.1:6380

指令說明:

當我們下了 reshard 的指令,Redis 會開始詢問我們一些問題,第一個問題就是要移動多少 hash slot?

第二個問題會問我們這些 hash slot 要移動到哪一個 Node Id?(Node Id 可以從任意一個 nodes.conf 之中得知。)

綜合以上兩個問題,我舉例說明一下:如果我們要移動 10 個 hash slot 到 1a2b3c 這個 Node Id 上,則表示移動完畢後 1a2b3c 這個 Node 總共會有 10 個 hash slot。

第三個問題會問我們要從哪些 Nodes 移動這些 hash slot?

我們可以填入 all 代表從除了目的 Node 之外的 Nodes 上移動 hash slot 到目的 Node,也可以一台一台填入來源 Node Id,填完後輸入 done 即可,至於一個來源 Node 要被移動多少 hash slot,Redis 會自己決定。

接著 Redis 就會讓我們預覽分片結果,確認無誤填入 yes 就開始搬移了,而且在搬移的過程中 Redis 的服務並不會被中斷。

另一種重新分片 (Resharding) 的方式

除上前面提到的下參數方式之外,也可以這樣做。

指令 redis-trib.rb reshard --from dd5333e3927eb199564b54308dbaf71cd5ae0b5d --to c1663ed15f472e26c5b1ebf9534a2a0cdeebaef3 --slots 454 --yes 127.0.0.1:6380

指令說明:

刪除 Node

刪除 Cluster 的 Node 就相對單純許多了。

指令 redis-trib.rb del-node 127.0.0.1:6383 dd5333e3927eb199564b54308dbaf71cd5ae0b5d

指令說明:

執行後,我們就會收到下面的訊息,而且連同被刪除的 Node 的服務也一起被停掉了。

刪除 Node 之前必須注意一件事,要先確保被刪除的 Node 已經沒有被分配到 hash slot,才可以進行刪除。

參考資料

相關資源

C# 指南
ASP.NET 教學
ASP.NET MVC 指引
Azure SQL Database 教學
SQL Server 教學
Xamarin.Forms 教學