Redis集羣
Redis cluster(redis集羣)是在版本3.0後才支持的架構,和其他集羣一樣,都是爲了解決單臺服務器不夠用的情況,也防止了主服務器宕機無備用服務器,多個節點網絡互聯數據共享,所有節點都是一主一從(也可以一主多從),其中不提供服務,只做爲備份。直接進入主題。
所需軟件
注意:版本不對應 可能會造成錯誤,我才疏學淺還沒發現爲什麼會報錯。強烈建議用本文中指定的版本!!
-
Redis: 地址 https://github.com/MSOpenTech/redis/releases 下載Redis-x64-3.2.100.zip
-
Ruby語言運行環境:http://dl.bintray.com/oneclick/rubyinstaller/rubyinstaller-2.3.3.exe
-
Redis-trib.rb 下載 https://raw.githubusercontent.com/antirez/redis/unstable/src/redis-trib.rb(打開是網頁,右鍵另存爲redis-trib.rb )
-
Rubygems Redis 的 Ruby 支持環境 https://rubygems.org/rubygems/rubygems-2.6.12.zip
安裝開始
- 在redis目錄下創建6個節點的文件夾:7001-7006(要讓集羣正常運作,至少需要三個主節點,因此我們創建6個節點,三個主節點三個從節點。)
- 將下載好的Redis-x64-3.2.100.zip解壓後的文件夾裏的所有文件分別copy到7001-7006文件夾中
- 修改6個文件夾下redis.windows.conf 文件配置如下圖,全部配置好之後啓動所有redis節點,爲了方便起見可以寫一個腳本啓動!
# 配置允許訪問的ip 四個0代表所有
bind 0.0.0.0
# 默認爲yes ,這裏爲no,此時外部網絡可以直接訪問
protected-mode no
# 端口 可以根據剛纔新建的文件夾命名7001-7006
port 7001
# 設置redis最大內存 建議master節點設置大一點 slave設置小 這個取決於你的機器內存大小
maxmemory 1024m
# 設置內存淘汰策略
maxmemory-policy allkeys-lru
# 開啓aof持久化
appendonly yes
# 設置aof持久化文件名
appendfilename "appendonly-7001.aof"
# 開啓集羣
cluster-enabled yes
# 集羣節點配置文件
cluster-config-file nodes-7001.conf
# 集羣節點超時時限
cluster-node-timeout 15000
注意:如果cluster-enabled 不爲yes, 那麼在使用JedisCluster集羣代碼獲取的時候,會報錯。
cluster-node-timeout 調整爲 15000,那麼在創建集羣的時候,不會超時。 cluster-config-file
nodes-7001.conf 是爲該節點的配置信息,這裏使用 nodes-端口.conf命名方法。服務啓動後會在目錄生成該文件。
RubyInstaller 安裝
打開exe文件,下一步安裝就行了。注意把三項全部勾選。
Rubygems 安裝
將下載好的rubygems-2.6.12.zip解壓,
解壓後,運行文件setup.rb。
執行 gem install redis 安裝 Redis 依賴。
使用Redis cluster
創建集羣
執行以下命令
redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
命令分析:
1)redis-trib.rb create:表示希望創建一個新的集羣。
2)replicas 1:表示爲集羣中的每個主節點創建一個從節點。後面其他參數表示實例的地址列表, 即:程序將使用這些地址所指示的實例來創建新集羣。(節點角色由順序決定,先master之後是slave。)
執行命令後,首先打印出配置信息。上圖表示:
1)使用7000、7001、7002作爲主節點。
2)主從節點的對應關係。
3)各節點對應的 slots 範圍。
例如 7000 這臺機 slots : 0-5460 的意思是:
若 key 進行 CRC16 校驗和的值介於 0-5460 範圍內,則被存儲至7000。
因此,使用前應對業務進行梳理,根據系統中 key 的特點來調整各個機器的slots範圍,以避免 key 集中於部分機器上,以致集羣的效果不大。
確認配置信息後,輸入 yes 並回車確認, 集羣將配置應用到各個節點, 並連接起(join)各個節點 —— 也即是, 讓各個節點開始互相通訊。
配置成功後,redis-trib 將輸出以下信息:
這表示集羣中的 16384 個槽都有至少一個主節點在處理, 集羣運作正常。
創建成功後,nodes-*.conf 將存儲 master 和 slave 的對應關係。以 nodes-7000.conf 爲例:
上圖表示:當前節點(127.0.0.1:7000)節點ID:cb4ea842827dd927058ec5b3abd516f35c697006,主節點,節點編號爲1,對應 slots 的範圍:0-5460,對應的從節點:127.0.0.1:7003。
進入集羣環境
進去隨便一個redis目錄cmd運行
redis-cli -c -p 7001
測試
1、檢查集羣狀態
C:\Redis> redis-trib.rb check 127.0.0.1:7001
若輸出上述信息,則表示集羣啓動成功並處於ok狀態。
2、從port 7003 set一個值,並從port 7005 get出來