推薦學習:
基於已有一定基礎,這裡搭建一個基礎版本三主三從,架構如下
/usr/local/redis‐5.0.3/src/redis‐server /usr/local/redis‐cluster/8001/redis.conf /usr/local/redis‐5.0.3/src/redis‐server /usr/local/redis‐cluster/8002/redis.conf /usr/local/redis‐5.0.3/src/redis‐server /usr/local/redis‐cluster/8003/redis.conf /usr/local/redis‐5.0.3/src/redis‐server /usr/local/redis‐cluster/8004/redis.conf /usr/local/redis‐5.0.3/src/redis‐server /usr/local/redis‐cluster/8005/redis.conf /usr/local/redis‐5.0.3/src/redis‐server /usr/local/redis‐cluster/8006/redis.conf
檢視叢集狀態:cluster nodes
從上圖可以看出,整個叢集執行正常,三個master節點和三個slave節點,
這三個master節點儲存的所有hash槽組成 redis叢集的儲存槽位,slave點是每個主節點的備份從節點,不顯示儲存槽位。
我們在原始叢集基礎上再增加一主(8007)一從(8008),增加節點後的叢集參見下圖,新增節點用虛線框表示
在/usr/local/redis-cluster下建立8007和8008資料夾,並拷貝8001資料夾下的redis.conf檔案到8007和8008這兩個資料夾下
mkdir 8007 8008 cd 8001 cp redis.conf /usr/local/redis‐cluster/8007/ cp redis.conf /usr/local/redis‐cluster/8008/ # 修改8007資料夾下的redis.conf組態檔 vim /usr/local/redis‐cluster/8007/redis.conf # 修改如下內容: port:8007 dir /usr/local/redis‐cluster/8007/ cluster‐config‐file nodes‐8007.conf # 修改8008資料夾下的redis.conf組態檔 vim /usr/local/redis‐cluster/8008/redis.conf # 修改內容如下: port:8008 dir /usr/local/redis‐cluster/8008/ cluster‐config‐file nodes‐8008.conf # 啟動8007和8008倆個服務並檢視服務狀態 /usr/local/redis‐5.0.3/src/redis‐server /usr/local/redis‐cluster/8007/redis.conf /usr/local/redis‐5.0.3/src/redis‐server /usr/local/redis‐cluster/8008/redis.conf ps ‐el | grep redis
用add-node命令新增一個主節點8007(master),前面的ip:port為新增節點,後面的ip:port為已知存在節點,看到紀錄檔最後有"[OK] New node added correctly"提示代表新節點加入成功
/usr/local/redis‐5.0.3/src/redis‐cli ‐a user ‐‐cluster add‐node 192.168.0.61:8007 192.168.0.61:8001
檢視叢集狀態
/usr/local/redis‐5.0.3/src/redis‐cli ‐a user ‐c ‐h 192.168.0.61 ‐p 8001 192.168.0.61:8001> cluster nodes
如下所示:
注意:當新增節點成功以後,新增的節點不會有任何資料,因為它還沒有分配任何的slot(hash槽),我們需要為新節點手工分配hash槽
使用redis-cli命令為8007分配hash槽,找到叢集中的任意一個主節點,對其進行重新分片工作
/usr/local/redis‐5.0.3/src/redis‐cli ‐a user ‐‐cluster reshard 192.168.0.61:8001
新增從節點8008到叢集中去並檢視叢集狀態
/usr/local/redis‐5.0.3/src/redis‐cli ‐a user ‐‐cluster add‐node 192.168.0.61:8008 192.168.0.61:8001
如下:
如圖所示,還是一個master節點,沒有被分配任何的hash槽。
原因:我們需要執行replicate命令來指定當前節點(從節點)的主節點id為哪個,首先需要連線新加的8008節點的使用者端,然後使用叢集命令進行操作,把當前的8008(slave)節點指定到一個主節點下(這裡使用之前建立的8007主節點)
執行指令
/usr/local/redis‐5.0.3/src/redis‐cli ‐a user ‐c ‐h 192.168.0.61 ‐p 8008 192.168.0.61:8008> cluster replicate 2728a594a0498e98e4b83a537e19f9a0a3790f38 #後面這串id為8007的節點id
檢視叢集狀態,8008節點已成功新增為8007節點的從節點
用del-node刪除從節點8008,指定刪除節點ip和埠,以及節點id(紅色為8008節點id)
/usr/local/redis‐5.0.3/src/redis‐cli ‐a user ‐‐cluster del‐node 192.168.0.61:8008 a1cfe35722d151cf70585cee212755653 93c0956
再次檢視叢集狀態,如下圖所示,8008這個slave節點已經移除,並且該節點的redis服務也已被停止
因為主節點的裡面是有分配了hash槽的,所以我們這裡必須先把8007裡的hash槽放入到其他的可用主節點中去,然後再進行移除節點操作,不然會出現資料丟失問題(目前只能把master的資料遷移到一個節點上,暫時做不了平均分配功能),執行命令如下:
/usr/local/redis‐5.0.3/src/redis‐cli ‐a user ‐‐cluster reshard 192.168.0.61:8007
遷移驗證:會發現8007下面已經沒有任何hash槽了,證明遷移成功!
用del-node命令刪除8007主節點即可
/usr/local/redis‐5.0.3/src/redis‐cli ‐a user ‐‐cluster del‐node 192.168.0.61:8007 2728a594a0498e98e4b83a537e19f9a0a 3790f38
檢視最終叢集狀態,發現一切恢復如初,至此水平擴充套件結束
推薦學習:
以上就是Redis叢集操作範例詳解的詳細內容,更多請關注TW511.COM其它相關文章!