redis集群擴容


1.集群的數據遷移

在工作中經常會遇到redis集群的擴容的場景,因為當一個集群服務器中的內存不夠用無法支撐更大數據量的緩存或者並發量不夠(個人理解),就會將原有的集群擴展。集群擴容需要將集群中原有的master節點上的槽位以及數據遷移到新加入的master節點上。

每個槽都把要里面的數據遷移完才能進行下一個槽幾千個槽成千上萬個key手動挨個循環遍歷太麻煩了因此擴容都是用ruby腳本工具來進行的,本文中以三節點的集群擴容為四節點為案例。

首先要安裝好ruby的依賴環境可以到官網查看安裝教程www.rubygems.org,安裝后可以進入安裝目錄下運行./redis-trib.rb查看使用文檔

然后創建好新節點的數據目錄以及安裝目錄加入節點到集群中(192.168.108.54為新節點的通信ip)

./redis-trib-rb add-node 192.168.108.54:6380   192.168.108.51:6380  master

./redis-trib-rb add-node 192.168.108.54:6381    192.168.108.52:6380  slave

然后執行./redis-trib.rb reshard 192.168.108.51:6380 重新分配槽位

因為這個要保證集群負載平均,因此要將16384個槽平均分到四個master節點上,即每個master節點4096個槽,具體步驟如下:

 

 這樣就完成了集群的擴容,可能大家對於集群的槽還會有一定疑問?下面我就為大家解釋一下

redis集群中內置16384 0-16383個哈希槽,當需要在redis集群中放置一個key-value時,redis先對key使用crc16校驗算法算出一個結果,然后把這個結果對16384求余數,這樣每個key都會對應一個編號在0-16383之間的哈希槽,redis會根據節點數量大致均勻的將哈希槽映射到不同的節點,即對16384取模來決定放置那個槽,集群的每個節點負責一部分hash槽,這種結構很容易添加或者刪除節點,並且無論是添加刪除或者修改某一個節點,都不會造成集群不可用的狀態,並且這個算法是足夠隨機足夠平均的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM