通過前面兩篇糯而,我們學會了三主三從的Redis集群搭建及主從容錯切換遷移,隨著業(yè)務增加肪跋,可能會有主從擴容的歧蒋,所以,本文我們來實戰(zhàn)主從擴容
PS本系列:《Docker學習系列》教程已經(jīng)發(fā)布的內(nèi)容土砂,凱哥會在文末加上。
在之前3主3從的架構(gòu)谜洽,隨著業(yè)務的增加萝映,流量扛不住了。需要由3主3從變?yōu)?主4從阐虚。架構(gòu)變化圖如下:
回顧下之前3主3從槽位分配如下:
那么現(xiàn)在變成了4主4從了序臂。多出來的這一對主從,槽位怎么分配ne?
實戰(zhàn)步驟
1:新建6387实束、6388兩個節(jié)點+新建后啟動+查看是否8個節(jié)點
命令
<pre class="brush:bash;toolbar:false" style="margin: 0.5em 0px; padding: 0.4em 0.6em; border-radius: 8px; background: rgb(248, 248, 248);">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 6387
docker 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
</pre>
通過docker ps 可以查看8個redis都成功
2:進入6387容器實例內(nèi)部
命令:
<pre class="brush:bash;toolbar:false" style="margin: 0.5em 0px; padding: 0.4em 0.6em; border-radius: 8px; background: rgb(248, 248, 248);">docker exec -it redis-node-7 /bin/bash
</pre>
3:將新增的6387節(jié)點(空槽號)作為master節(jié)點加入原集群中
將新機器加入集群的命令公式:
<pre class="brush:bash;toolbar:false" style="margin: 0.5em 0px; padding: 0.4em 0.6em; border-radius: 8px; background: rgb(248, 248, 248);">redis-cli -cluster add-node ip:6387 ip:6381
</pre>
命令說明:
add-node:加入節(jié)點
ip:自己宿主機的實際ip
6387:將要作為master的新增節(jié)點端口
6381:就是原來集群節(jié)點的領(lǐng)路人奥秆。相當于是6387拜了6381的碼頭了。從而找到了組織加入了集群
比如我們需要將6387這臺redis作為master加入集群中咸灿。
根據(jù)命令公式构订,替換成我們自己的宿主機ip:192.168.50.128
所以本次將6387加入集群的命令為:
<pre class="brush:bash;toolbar:false" style="margin: 0.5em 0px; padding: 0.4em 0.6em; border-radius: 8px; background: rgb(248, 248, 248);">redis-cli --cluster add-node 192.168.50.128:6387 192.168.50.128:6381
</pre>
new node added correctly.
4:檢查集群情況第1次
使用cluster chk命令。
進入之前任意三個master容器后執(zhí)行命令:
<pre class="brush:bash;toolbar:false" style="margin: 0.5em 0px; padding: 0.4em 0.6em; border-radius: 8px; background: rgb(248, 248, 248);">redis-cli --cluster check 192.168.50.128:6381
</pre>
我們可以看到避矢,6387已經(jīng)作為master加入集群了悼瘾。其對應的從節(jié)點是0個。
5:重新分配槽號
新命令审胸,公式:
<pre class="brush:as3;toolbar:false" style="margin: 0.5em 0px; padding: 0.4em 0.6em; border-radius: 8px; background: rgb(248, 248, 248);">redis-cli --cluster reshard ip:端口
</pre>
參數(shù)說明:
--cluster reshard :重新hash分配槽位
ip:宿主機的ip(對應本次實戰(zhàn)凱哥宿主機的ip:192.168.50.128)
端口:集群的領(lǐng)路人的端口(對應本次實戰(zhàn)凱哥宿主機的ip:6381)
實戰(zhàn)命令:
<pre class="brush:bash;toolbar:false" style="margin: 0.5em 0px; padding: 0.4em 0.6em; border-radius: 8px; background: rgb(248, 248, 248);">redis-cli --cluster reshard 192.168.50.128:6381
</pre>
我們可以看到亥宿,詢問我們打算怎么重新分配?
我們來算下:16384/4=4096.所以砂沛,我們就寫4096
輸入4096后烫扼,又詢問了:
這4096準備分配給node id呢?
請注意碍庵,這里只能分配給新加入的節(jié)點的id.也就是本次案例中6387對應的node節(jié)點
接著又詢問了
我們輸入all.
因為16384/master機器數(shù)量=4096
輸入yes后映企,所有槽位就會重新分配了。
重新分配需要等待一段時間怎抛。耐心等待卑吭。
6:檢查集群情況第2次
命令:
<pre class="brush:bash;toolbar:false" style="margin: 0.5em 0px; padding: 0.4em 0.6em; border-radius: 8px; background: rgb(248, 248, 248);">redis-cli --cluster check 192.168.50.128:6381
</pre>
我們可以發(fā)現(xiàn)了6387的槽位不是連續(xù)的。而是由三段槽位組成的马绝。
所以豆赏,我們可以知道,新加入的master節(jié)點富稻,是從原來所有節(jié)點都給出一些槽位掷邦,最終使得新master節(jié)點達到預設的槽位的。
為什么要這么設計呢?
為什么6387是3個新區(qū)間呢椭赋?原來三個主節(jié)點還是連續(xù)的抚岗?
因為重新分配的成本太高了。所以前3個主節(jié)點各自勻出一部分哪怔,從6381/6382/6383三個舊節(jié)點分別勻出1364個槽位給了新加入master節(jié)點6387了宣蔚。
7:為主節(jié)點6387分配從節(jié)點6388
新命令:
redis-cli --cluster add-node ip:新slave端口 ip:新master端口 --cluster-slave --cluster-master-id 新主機節(jié)點id
命令參數(shù)說明:
ip:宿主機的ip向抢。對應本次案例就是:192.168.50.128
新slave端口:對應本次案例就是6388
新master端口:對應本次案例就是6387
新主機節(jié)點id:可以通過cluster check 命令查看
所以本次案例的命令為:
<pre class="brush:as3;toolbar:false" style="margin: 0.5em 0px; padding: 0.4em 0.6em; border-radius: 8px; background: rgb(248, 248, 248);">redis-cli --cluster add-node 192.168.50.128:6388 192.168.50.128:6387 --cluster-slave --cluster-master-id 2b0751e59cdf0ae0f74be7ab74981ab41e37e372
</pre>
8:檢查集群情況第3次
<pre class="brush:bash;toolbar:false" style="margin: 0.5em 0px; padding: 0.4em 0.6em; border-radius: 8px; background: rgb(248, 248, 248);">redis-cli --cluster check 192.168.50.128:6381
</pre>
所以最終4主4從的架構(gòu)及槽號如下圖:
結(jié)束語
如操作有問題歡迎去 我的 個人博客(www.kaigejava.com)留言或者 微信公眾號(凱哥Java)留言交流哦。
本系列教程直通車
直通車胚委,本系列教程已發(fā)布文章挟鸠,快速到達,《Docker學習系列》教程已經(jīng)發(fā)布的內(nèi)容如下:
【圖文教程】Windows11下安裝Docker Desktop
【填坑】在windows系統(tǒng)下安裝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鏡像發(fā)布到阿里云
【Docker學習教程系列】8-如何將本地的Docker鏡像發(fā)布到私服艘希?
「Docker學習系列教程」9-Docker容器數(shù)據(jù)卷介紹
「Docker學習系列教程」10-Docker容器數(shù)據(jù)卷案例
Docker學習11-Docker常規(guī)方式安裝軟件
「Docker學習系列教程」基礎(chǔ)篇小總結(jié)及高級篇預告
docker高級篇1-dockeran安裝mysql主從復制
docker高級篇第二章-分布式存儲之實戰(zhàn)案例:3主3從redis集群擴容配置