基於Dokcer搭建Redis叢集(主從叢集)

niceyoo發表於2020-12-10

最近陸陸續續有不少園友加我好友諮詢 redis 叢集搭建的問題,我覺得一定是之前寫的這篇 《基於Docker的Redis叢集搭建》 文章有問題了,所以我花了幾分鐘瀏覽之前的文章總結了下面幾個問題:

  • redis 數量太少,只建立了 3 個例項;
  • 由於只有 3 個例項,所以全部只能是主節點,無法體現叢集主從關係;
  • 如何搭建主從叢集?如何分配從節點?

基於之前的文章,我想快速的過一下這幾個問題,本文基於 Docker + Redis 5.0.5 版本,通過 cluster 方式建立一個 6 個 redis 例項的主從叢集,當然文章會指出相應的引數說明,這樣即便是建立 9 個例項的叢集方式也是一樣的。

1、拉取 Redis 映象

基於 Redis:5.0.5 版本,執行如下指令:

docker pull redis:5.0.5

2、建立 6 個 Redis 容器

建立 6 個Redis 容器:

  • redis-node1:6379
  • redis-node2:6380
  • redis-node3:6381
  • redis-node4:6382
  • redis-node5:6383
  • redis-node6:6384

執行命令如下:

docker create --name redis-node1 --net host -v /data/redis-data/node1:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-1.conf --port 6379

docker create --name redis-node2 --net host -v /data/redis-data/node2:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-2.conf --port 6380

docker create --name redis-node3 --net host -v /data/redis-data/node3:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-3.conf --port 6381

docker create --name redis-node4 --net host -v /data/redis-data/node4:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-4.conf --port 6382

docker create --name redis-node5 --net host -v /data/redis-data/node5:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-5.conf --port 6383

docker create --name redis-node6 --net host -v /data/redis-data/node6:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-6.conf --port 6384

部分引數解釋:

  • --cluster-enabled:是否啟動叢集,選值:yes 、no
  • --cluster-config-file 配置檔案.conf :指定節點資訊,自動生成
  • --cluster-node-timeout 毫秒值: 配置節點連線超時時間
  • --appendonly:是否開啟持久化,選值:yes、no

執行命令截圖:

3、啟動 Redis 容器

執行命令如下:

docker start redis-node1 redis-node2 redis-node3 redis-node4 redis-node5 redis-node6

啟動截圖如下:

4、組建 Redis 叢集

進入任意一個 Redis 例項:

# 這裡以 redis-node1 例項為例
docker exec -it redis-node1 /bin/bash

執行元件叢集的命令:

# 組建叢集,10.211.55.4為當前物理機的ip地址
redis-cli --cluster create 10.211.55.4:6379 10.211.55.4:6380 10.211.55.4:6381 10.211.55.4:6382 10.211.55.4:6383 10.211.55.4:6384 --cluster-replicas 1

執行命令截圖如下:

建立成功後,通過 redis-cli 檢視一下叢集節點資訊:

root@CentOS7:/data# redis-cli
127.0.0.1:6379> cluster nodes

執行命令截圖如下:

4、關於Redis叢集搭建

我們再回到建立叢集的命令上:

redis-cli --cluster create 10.211.55.4:6379~6384 --cluster-replicas 1

大家著重看這個引數 --cluster-replicas 1,引數後面的數字表示的是主從比例,比如這裡的 1 表示的是主從比例是 1:1,什麼概念呢?

也就是 1 個主節點對應幾個從節點,現有 6 個例項,所以主從分配就是 3 個 master 主節點,3 個 slave 從節點。

主節點最少3個,3個才能保證叢集的健壯性。

如果 --cluster-replicas 2 呢?

那麼主從比例就是 1:2,也就是 1 個主節點對於應 2 個從節點。

即:3(master) + 6(slave) = 9個 Redis 例項。

如果不足 9個 Redis 例項,但是引數指定為 2 會怎麼樣?

報錯資訊如下:

提示已經很清楚了,Redis叢集至少需要3個主節點。那麼從節點就需要有6個,所以最後說:至少需要9個節點。

好的,至少3個主節點的要求我不繼續剛了,但是我想4個主節點,2個從節點,這總該可以了吧?

4個主節點滿足你:

# 進入一個啟動的 reids 例項,這裡以 redis-node1 例項為例
docker exec -it redis-node1 /bin/bash

執行組建叢集的命令:

redis-cli --cluster create 10.211.55.4:6379 10.211.55.4:6380 10.211.55.4:6381 10.211.55.4:6382  --cluster-replicas 0

指定4個沒有從節點的主節點,這樣你就有4個主節點了:

剩下的兩個從節點怎麼辦呢?手動新增。

怎麼新增?手動新增!

看到這些 master 節點的 id 了嗎,只需要把 slave 指定給他們就可以了。

繼續執行如下命令:

redis-cli --cluster add-node 10.211.55.4:6383 10.211.55.4:6379  --cluster-slave --cluster-master-id b0c32b1dae9e7b7f7f4b74354c59bdfcaa46f30a

redis-cli --cluster add-node 10.211.55.4:6384 10.211.55.4:6379  --cluster-slave --cluster-master-id 111de8bed5772585cef5280c4b5225ecb15a582e

將兩個 Redis 例項塞給其他主節點了:

最後我們進入 redis-cli,通過 cluster nodes 檢視一下節點資訊:

看到這,你學廢了嗎?再學不廢,下期我可要錄視訊了。。。

部落格園:https://niceyoo.cnblogs.com/

相關文章