Cluster叢集就是一個提供在多個Redis間節點間共享資料的程式集,是Redis 3。0版本以後引入的,是redis官方推薦的效能最高的叢集模式。
架構模型
1。採取了去中心化的思想,沒有中心節點
2。其對key的演算法並非一致性hash演算法,而是採用了雜湊槽模型,每個叢集擁有16384個hash slot,儲存時,使用CRC16演算法對key校驗,然後對16384取模得到對應的雜湊槽。
3。節點之間採用輕量通訊協議,佔用頻寬少,效率高
4。自動負載均衡,自動failover,支援動態擴充套件。
5。Cluster模式也是基於主從模式+哨兵衍生出來的,只不過資料節點本身也是哨兵節點,如果有半數節點發現某個節點異常,則共同決定故障節點狀態,如果主節點故障,則其從節點晉升為主節點,主節點重啟後降級為從節點。但是如果叢集沒有設定salve節點,一旦主節點掛掉,整個叢集便進入fail狀態,因為叢集的slot對映不完整。如果叢集超過半數以上的master掛掉,無論是否有slave,叢集都會進入fail狀態。
6。叢集的規模至少有3臺以上的master,這樣比較合適叢集的部署。
架構搭建實戰
環境: win10 X64, redis 3.2.100
1。準備6份配置檔案,3主3從,下面奉上其中一份配置的詳情:
埠號依次從7000~7005,同樣的叢集配置檔案的名稱與埠號保持一致。
2。下載並安裝ruby執行時環境
最新版本官網地址:https://github。com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2。6。5-1/rubyinstaller-2。6。5-1-x64。exe
按照提示一步步向下走就好了,安裝成功後,可以使用
ruby -v
檢查是否成功。
孤安裝的是2。6。3,國內網站下載的,官網太慢
3。下載ruby環境下Redis的驅動,考慮到相容性,這裡下載的是4。1。3版本
下載地址:https://rubygems。org/downloads/redis-4。1。3。gem,注意如果ruby的版本低於2。3。0,安裝驅動時會報錯。
4。安裝Redis驅動
gem install ——local path_to_gem/redis-4。1。3。gem
5。下載建立Redis叢集的ruby指令碼檔案redis-trib。rb,路徑如下
github地址:https://github。com/beebol/redis-trib。rb,解壓然後放到redis的安裝目錄下(建議)。
redis-trib。rb指令碼
6。cd到redis安裝目錄,依次啟動7000~7005
redis-server redis。7000。confredis-server redis。7001。confredis-server redis。7002。confredis-server redis。7003。confredis-server redis。7004。confredis-server redis。7005。conf
啟動成功:
cluster模式
同時看到安裝目錄生成了對應節點的節點配置檔案:
內容即記錄自己節點的資訊:
nodes。7000。conf
7。使用redis-trib。rb指令碼配置叢集,本例配置為3主3從模式
首先看命令:
執行命令後,會為叢集配置master及對應的slave,最後你只需要在確認時輸入yes即可,接著為3個master分配16384個hash slot:
master 7000對應的slot為:0-5460,master 7001對應的slot: 5461-10922,master 7002的slot範圍:10923-16383,此時,16384個slot全部分配完畢。
8。同時將分配的資訊更新到了nodes。7000。conf檔案中,其他節點也會同步,如下:
其他節點資訊也被更新到nodes。7000。conf檔案中
9。測試
>redis-cli -c -p 7000127。0。0。1:7000> set foo bar-> Redirected to slot [12182] located at 127。0。0。1:7002OK127。0。0。1:7002> get foo “bar”
可以看到redis將key foo經過CRC16(foo)對16384取模,定位到7002的slot上,並將值bar寫入到7002的機器,返回client處理結果後,然後將命令同步到7005的從節點上。取值直接從7002執行命令。
10。故障模擬
此時kill掉7002的服務,觀察叢集的變化,此時執行命令 get foo
127。0。0。1:7000> get foo-> Redirected to slot [12182] located at 127。0。0。1:7005“bar”
看到,叢集將自動跳轉到7005取值了,那麼7005是slave還是master呢?
nodes。7000。conf
從上面的配置資訊中看到,7005成功晉升為master節點。
10。重啟7002節點,看nodes。7000。conf配置資訊的變化
7002重啟後成為7005的子節點
此時一個簡單的redis cluster 叢集就搭建和部署OK了。
擴充套件:除了nodes。xxx。conf看cluster的叢集配置資訊,也可以透過cluster nodes檢視。
下一篇文章將接著介紹Cluster模式下節點的動態擴充套件。