您現在的位置是:首頁 > 動漫首頁動漫

Docker高階篇:實戰!從3主3從變為4主4從

由 凱哥Java 發表于 動漫2023-01-14
簡介8 ——cluster-enabled yes ——appendonly yes ——port 6388透過docker ps 可以檢視8個redis都成功2:進入6387容器例項內部命令:docker exec -it redis-nod

怎麼刪除linux系統

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

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

Docker高階篇:實戰!從3主3從變為4主4從

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

Docker高階篇:實戰!從3主3從變為4主4從

那麼現在變成了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 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

Docker高階篇:實戰!從3主3從變為4主4從

透過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

Docker高階篇:實戰!從3主3從變為4主4從

new node added correctly。

4:檢查叢集情況第1次

使用cluster chk命令。

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

redis-cli ——cluster check 192。168。50。128:6381

Docker高階篇:實戰!從3主3從變為4主4從

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

Docker高階篇:實戰!從3主3從變為4主4從

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

Docker高階篇:實戰!從3主3從變為4主4從

Docker高階篇:實戰!從3主3從變為4主4從

我們可以看到,詢問我們打算怎麼重新分配?

我們來算下:16384/4=4096。所以,我們就寫4096

輸入4096後,又詢問了:

Docker高階篇:實戰!從3主3從變為4主4從

這4096準備分配給node id呢?

請注意,這裡只能分配給新加入的節點的id。也就是本次案例中6387對應的node節點

Docker高階篇:實戰!從3主3從變為4主4從

接著又詢問了

Docker高階篇:實戰!從3主3從變為4主4從

我們輸入all。

因為16384/master機器數量=4096

輸入yes後,所有槽位就會重新分配了。

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

6:檢查叢集情況第2次

Docker高階篇:實戰!從3主3從變為4主4從

我們可以發現了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

Docker高階篇:實戰!從3主3從變為4主4從

8:檢查叢集情況第3次

Docker高階篇:實戰!從3主3從變為4主4從

所以最終4主4從的架構及槽號如下圖:

Docker高階篇:實戰!從3主3從變為4主4從

,樂於分享,每日更新技術文章,歡迎大家關注“凱哥Java”,及時瞭解更多。讓我們一起學Java。也歡迎大家有事沒事就來和凱哥聊聊

docker高階篇4-分散式儲存之實戰案例:主從容錯切換遷移案例

docker高階篇3-分散式儲存之實戰案例:3主3從redis叢集擴容配置

docker高階篇2-分散式儲存之三種演算法

docker高階篇1-dockeran安裝mysql主從複製