Docker高級篇:實戰Redis集群!從3主3從變為4主4從

2022-12-21 14:17:22 來源:51CTO博客

通過前面兩篇,我們學會了三主三從的Redis集群搭建及主從容錯切換遷移,隨著業務增加,可能會有主從擴容的,所以,本文我們來實戰主從擴容

PS本系列:《Docker學習系列》教程已經發布的內容,凱哥會在文末加上。


(資料圖片僅供參考)

在之前3主3從的架構,隨著業務的增加,流量扛不住了。需要由3主3從變為4主4從。架構變化圖如下:

回顧下之前3主3從槽位分配如下:

那么現在變成了4主4從了。多出來的這一對主從,槽位怎么分配ne?

實戰步驟

1:新建6387、6388兩個節點+新建后啟動+查看是否8個節點

命令

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都成功

2:進入6387容器實例內部

命令:

docker exec -it redis-node-7 /bin/bash

3:將新增的6387節點(空槽號)作為master節點加入原集群中

將新機器加入集群的命令公式:

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.

4:檢查集群情況第1次

使用cluster chk命令。

進入之前任意三個master容器后執行命令:

redis-cli --cluster check 192.168.50.128:6381

我們可以看到,6387已經作為master加入集群了。其對應的從節點是0個。

5:重新分配槽號

新命令,公式:

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后,所有槽位就會重新分配了。

重新分配需要等待一段時間。耐心等待。

6:檢查集群情況第2次

命令:

redis-cli --cluster check 192.168.50.128:6381

我們可以發現了6387的槽位不是連續的。而是由三段槽位組成的。

所以,我們可以知道,新加入的master節點,是從原來所有節點都給出一些槽位,最終使得新master節點達到預設的槽位的。

為什么要這么設計呢?

為什么6387是3個新區間呢?原來三個主節點還是連續的?

因為重新分配的成本太高了。所以前3個主節點各自勻出一部分,從6381/6382/6383三個舊節點分別勻出1364個槽位給了新加入master節點6387了。

7:為主節點6387分配從節點6388

新命令:

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

8:檢查集群情況第3次

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學習教程系列匯總】筆記及遇到問題解決文章??

標簽: 重新分配 遇到問題

上一篇:精華推薦 |【深入淺出Sentinel原理及實戰】「原理探索專題」完整剖析Alibaba微服務架構體系之輕量級高可用流量控制組件Sentinel(1)
下一篇:環球快報:從源碼層面深度剖析Spring循環依賴