redis Cluster模式集羣 多機器 docker 部署

 

基礎架構圖如下所示:

1.png

 

 

先不設置密碼,後改配置,加密碼,重啓就可以了

 參考

https://www.jianshu.com/p/339549138e07

 

 

我們先新建一個目錄

mkdir -p /data/redis-cluster && cd /data/redis-cluster

三臺設備,每臺機器一個master 一個slave

 

ip

port

remark

192.168.3.201

6379

主節點master-1

192.168.3.201

6380

從節點slave-2

192.168.3.202

6379

主節點master-2

192.168.3.202

6380

從節點slave-3

192.168.3.203

6379

主節點master-3

192.168.3.203

6380

從節點slave-1

 

機器1結構

image.png

機器2結構

image.png

機器3結構

 

 

編輯 master結點配置文件 redis-master.conf

port 6379
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
daemonize no
protected-mode no
# requirepass 123456
# masterauth 123456
pidfile /var/run/redis.pid
cluster-announce-ip 192.168.3.201

 

主結點配置說明:

port: 指定了啓動的端口號

cluster-enabled: yes啓動允許集羣

cluster-config-file: 集羣配置文件(自動創建)

cluster-node-timeout: 集羣超時時間(毫秒)

appendonly: 持久化 yes

daemonize: 後臺運行 no

protected-mode: no 允許外部IP訪問

requirepass 密碼

masterauth 主從節點訪問密碼

cluster-announce-ip: 集羣節點 IP,如果想要集羣可以供外網訪問,這裏直接填宿主機的IP

 

slave結點配置文件 redis-slave.conf

port 6380
cluster-enabled no
appendonly yes
daemonize no
protected-mode no
pidfile /var/run/redis.pid
slaveof 192.168.3.202 6379

slave結點配置說明:

cluster-enabled: no 不參與集羣分配

appendonly: 持久化 yes

daemonize: 後臺運行 no

slaveof 192.168.3.203 7001: 直接指定成爲對應master的從節點

主機1執行

docker run -d --privileged=true --restart always -p 6379:6379 -p 16379:16379 \
-v /data/redis-cluster/master-1/:/etc/redis/ \
-v /data/redis-cluster/master-1/:/data \
--name redis-master-1 redis:7.0 redis-server /etc/redis/redis-master.conf --appendonly yes
docker run
-d --privileged=true --restart always -p 6380:6380 \ -v /data/redis-cluster/slave-2/:/etc/redis/ \ -v /data/redis-cluster/slave-2/:/data \ --name redis-slave-2 redis:7.0 redis-server /etc/redis/redis-slave.conf --appendonly yes

 


主機2執行

docker run -d --privileged=true --restart always -p 6379:6379 -p 16379:16379 \
-v /data/redis-cluster/master-2/:/etc/redis/ \
-v /data/redis-cluster/master-2/:/data \
--name redis-master-2 redis:7.0 redis-server /etc/redis/redis-master.conf --appendonly yes

docker run -d --privileged=true --restart always -p 6380:6380 \
-v /data/redis-cluster/slave-3/:/etc/redis/ \
-v /data/redis-cluster/slave-3/:/data \
--name redis-slave-3 redis:7.0 redis-server /etc/redis/redis-slave.conf --appendonly yes

 

主機3執行

docker run -d --privileged=true --restart always -p 6379:6379 -p 16379:16379 \
-v /data/redis-cluster/master-3/:/etc/redis/ \
-v /data/redis-cluster/master-3/:/data \
--name redis-master-3 redis:7.0 redis-server /etc/redis/redis-master.conf --appendonly yes

docker run -d --privileged=true --restart always -p 6380:6380 \
-v /data/redis-cluster/slave-1/:/etc/redis/ \
-v /data/redis-cluster/slave-1/:/data \
--name redis-slave-1 redis:7.0 redis-server /etc/redis/redis-slave.conf --appendonly yes

 

注意3個主結點的容器,需要同時映射6379端口和16379端口。每個Redis Cluster節點都需要打開兩個TCP連接。用於服務客戶端的普通Redis TCP端口(如6379),以及數據端口加上10000得到的端口(例如16379)。第二個高端口用於集羣總線,是使用二進制協議的節點到節點通信通道。節點使用集羣總線進行故障檢測、配置更新、故障轉移授權等。

 

創建集羣並分配slots

此時僅僅創建了三對主從節點,但是三個主節點(7001, 7002, 7003)是孤立的,並且還未分配slots。

進入任意一個主結點:

docker exec -it redis-master-1 /bin/bash

 

然後執行下面的命令:

redis-cli --cluster create 192.168.3.201:6379 192.168.3.202:6379 192.168.3.203:6379 --cluster-replicas 0
redis-cli -a 123456 --cluster create 192.168.2.201:6379 192.168.2.202:6379 192.168.2.203:6379 --cluster-replicas 0

在提示後輸入 yes:

 

Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
.
>>> Performing Cluster Check (using node 192.168.100.101:7001)
M: f936070976e483985e9fa0ac904268e952e4bae3 192.168.100.101:7001
slots:[0-5460] (5461 slots) master
M: 9e6435cc51704ef543e60c186fec4e38277c3a88 192.168.2.240:7003
slots:[10923-16383] (5461 slots) master
M: e4f2be7cb9321058e84bc482db0c59b9d1213faa 192.168.2.240:7002
slots:[5461-10922] (5462 slots) master
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

 


這時候這個三主三從的redis集羣就創建好了。

 

測試連接

使用集羣模式(-c)連接主結點:

 redis-cli -h 192.168.100.101 -p 7001 -c

有密碼加 -a 密碼

然後隨便設置一個值:

192.168.100.101:7001> set k1 v1

 

如果計算出來這個 key的 slot不在當前結點,則會提示:

-> Redirected to slot [12706] located at 192.168.242.93:7003 OK

 

表示通過計算 slot分配到 192.168.242.93:7003結點去了。

我們通過普通模式連接到主結點 192.168.242.93:7003和從結點 192.168.100.106:6379,都能查到這個 k1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章