
通過前面兩篇,我們學會了三主三從的Redis集群搭建及主從容錯切換遷移,隨著業務增加,可能會有主從擴容的,所以,本文我們來實戰主從擴容
PS本系列:《Docker學習系列》教程已經發布的內容,凱哥會在文末加上。
(資料圖片僅供參考)
在之前3主3從的架構,隨著業務的增加,流量扛不住了。需要由3主3從變為4主4從。架構變化圖如下:
回顧下之前3主3從槽位分配如下:
那么現在變成了4主4從了。多出來的這一對主從,槽位怎么分配ne?
實戰步驟
命令
docker run -d --name redis-node-7 --net host --privileged=true -v /data/redis/share/redis-nod-7:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6387docker run -d --name redis-node-8 --net host --privileged=true -v /data/redis/share/redis-nod-8:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6388
通過docker ps 可以查看8個redis都成功
命令:
docker exec -it redis-node-7 /bin/bash
將新機器加入集群的命令公式:
redis-cli -cluster add-node ip:6387 ip:6381
命令說明:
add-node:加入節點
ip:自己宿主機的實際ip
6387:將要作為master的新增節點端口
6381:就是原來集群節點的領路人。相當于是6387拜了6381的碼頭了。從而找到了組織加入了集群
比如我們需要將6387這臺redis作為master加入集群中。
根據命令公式,替換成我們自己的宿主機ip:192.168.50.128
所以本次將6387加入集群的命令為:
redis-cli --cluster add-node 192.168.50.128:6387 192.168.50.128:6381
new node added correctly.
使用cluster chk命令。
進入之前任意三個master容器后執行命令:
redis-cli --cluster check 192.168.50.128:6381
我們可以看到,6387已經作為master加入集群了。其對應的從節點是0個。
新命令,公式:
redis-cli --cluster reshard ip:端口
參數說明:
--cluster reshard :重新hash分配槽位
ip:宿主機的ip(對應本次實戰凱哥宿主機的ip:192.168.50.128)
端口:集群的領路人的端口(對應本次實戰凱哥宿主機的ip:6381)
實戰命令:
redis-cli --cluster reshard 192.168.50.128:6381
我們可以看到,詢問我們打算怎么重新分配?
我們來算下:16384/4=4096.所以,我們就寫4096
輸入4096后,又詢問了:
這4096準備分配給node id呢?
請注意,這里只能分配給新加入的節點的id.也就是本次案例中6387對應的node節點
接著又詢問了
我們輸入all.
因為16384/master機器數量=4096
輸入yes后,所有槽位就會重新分配了。
重新分配需要等待一段時間。耐心等待。
命令:
redis-cli --cluster check 192.168.50.128:6381
我們可以發現了6387的槽位不是連續的。而是由三段槽位組成的。
所以,我們可以知道,新加入的master節點,是從原來所有節點都給出一些槽位,最終使得新master節點達到預設的槽位的。
為什么要這么設計呢?
為什么6387是3個新區間呢?原來三個主節點還是連續的?
因為重新分配的成本太高了。所以前3個主節點各自勻出一部分,從6381/6382/6383三個舊節點分別勻出1364個槽位給了新加入master節點6387了。
新命令:
redis-cli --cluster add-node ip:新slave端口 ip:新master端口 --cluster-slave --cluster-master-id 新主機節點id
命令參數說明:
ip:宿主機的ip。對應本次案例就是:192.168.50.128
新slave端口:對應本次案例就是6388
新master端口:對應本次案例就是6387
新主機節點id:可以通過cluster check 命令查看
所以本次案例的命令為:
redis-cli --cluster add-node 192.168.50.128:6388 192.168.50.128:6387 --cluster-slave --cluster-master-id 2b0751e59cdf0ae0f74be7ab74981ab41e37e372
redis-cli --cluster check 192.168.50.128:6381
所以最終4主4從的架構及槽號如下圖:
如操作有問題歡迎去 我的??個人博客(www.kaigejava.com)???留言或者 ??微信公眾號(凱哥Java)??留言交流哦。
本系列教程直通車
直通車,本系列教程已發布文章,快速到達,《Docker學習系列》教程已經發布的內容如下:
??【圖文教程】Windows11下安裝Docker Desktop??
??【填坑】在windows系統下安裝Docker Desktop后遷移鏡像位置??
??【Docker學習系列】Docker學習1-docker安裝??
??【Docker學習系列】Docker學習2-docker設置鏡像加速器??
??【Docker學習系列】Docker學習3-docker的run命令干了什么?docker為什么比虛擬機快???
??【Docker學習系列】Docker學習2-常用命令之啟動命令和鏡像命令??
??【Docker學習系列】Docker學習系列3:常用命令之容器命令??
??【Docker學習系列】Docker學習4-常用命令之重要的容器命令??
??【Docker教程系列】Docker學習5-Docker鏡像理解??
??【Docker教程系列】Docker學習6-Docker鏡像commit操作案例??
??【Docker學習教程系列】7-如何將本地的Docker鏡像發布到阿里云??
??【Docker學習教程系列】8-如何將本地的Docker鏡像發布到私服???
??「Docker學習系列教程」9-Docker容器數據卷介紹??
??「Docker學習系列教程」10-Docker容器數據卷案例??
??Docker學習11-Docker常規方式安裝軟件??
??「Docker學習系列教程」基礎篇小總結及高級篇預告??
??docker高級篇1-dockeran安裝mysql主從復制??
??docker高級篇2-分布式存儲之三種算法??
??docker高級篇第二章-分布式存儲之實戰案例:3主3從redis集群擴容配置??
??docker高級篇第二章-分布式存儲之實戰案例:主從容錯切換遷移案例??
??【Docker學習教程系列匯總】筆記及遇到問題解決文章??