Docker搭建redis集群(Mac版)

https://blog.csdn.net/weixin_46628668/article/details/124369779

cluster info

cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:4797
cluster_stats_messages_pong_sent:4749
cluster_stats_messages_sent:9546
cluster_stats_messages_ping_received:4744
cluster_stats_messages_pong_received:4797
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:9546

cluster_state: ok狀態(tài)表示集群可以正常接受查詢請求。fail 狀態(tài)表示,至少有一個哈希槽沒有被綁定(說明有哈希槽沒有被綁定到任意一個節(jié)點),或者在錯誤的狀態(tài)(節(jié)點可以提供服務(wù)但是帶有FAIL 標記),或者該節(jié)點無法聯(lián)系到多數(shù)master節(jié)點。.
cluster_slots_assigned: 已分配到集群節(jié)點的哈希槽數(shù)量(不是沒有被綁定的數(shù)量)。16384個哈希槽全部被分配到集群節(jié)點是集群正常運行的必要條件.
cluster_slots_ok: 哈希槽狀態(tài)不是FAIL 和 PFAIL 的數(shù)量.
cluster_slots_pfail: 哈希槽狀態(tài)是 PFAIL的數(shù)量。只要哈希槽狀態(tài)沒有被升級到FAIL狀態(tài),這些哈希槽仍然可以被正常處理。PFAIL狀態(tài)表示我們當前不能和節(jié)點進行交互,但這種狀態(tài)只是臨時的錯誤狀態(tài)。
cluster_slots_fail: 哈希槽狀態(tài)是FAIL的數(shù)量。如果值不是0,那么集群節(jié)點將無法提供查詢服務(wù),除非cluster-require-full-coverage被設(shè)置為no .
cluster_known_nodes: 集群中節(jié)點數(shù)量,包括處于握手狀態(tài)還沒有成為集群正式成員的節(jié)點.
cluster_size: 至少包含一個哈希槽且能夠提供服務(wù)的master節(jié)點數(shù)量.
cluster_current_epoch: 集群本地Current Epoch變量的值。這個值在節(jié)點故障轉(zhuǎn)移過程時有用,它總是遞增和唯一的。
cluster_my_epoch: 當前正在使用的節(jié)點的Config Epoch值. 這個是關(guān)聯(lián)在本節(jié)點的版本值.
cluster_stats_messages_sent: 通過node-to-node二進制總線發(fā)送的消息數(shù)量.
cluster_stats_messages_received: 通過node-to-node二進制總線接收的消息數(shù)量.

cluster nodes

40bc97a68aaf0216969e0b92ae1df1775b32d49e 172.17.0.4:6379@16379 master - 0 1655118752222 3 connected 10923-16383
f800ea2cff38ac5e33acb3c3f6a950741cfe7a89 172.17.0.5:6379@16379 slave 40bc97a68aaf0216969e0b92ae1df1775b32d49e 0 1655118750193 3 connected
2e6624c80c274cbfea2bc7cc6c936abd92c8f1ff 172.17.0.2:6379@16379 myself,master - 0 1655118750000 1 connected 0-5460
7d871ed046907245913cf37f32935626014f0539 172.17.0.3:6379@16379 master - 0 1655118751210 2 connected 5461-10922
720d96226eeaa89c8533769e0f4f7d74a1925def 172.17.0.6:6379@16379 slave 2e6624c80c274cbfea2bc7cc6c936abd92c8f1ff 0 1655118753234 1 connected
a06c1150147df1e6734a86b87f85d20cf60475e9 172.17.0.7:6379@16379 slave 7d871ed046907245913cf37f32935626014f0539 0 1655118750000 2 connected

id:節(jié)點ID,是一個40字節(jié)的隨機字符串,這個值在節(jié)點啟動的時候創(chuàng)建,并且永遠不會改變(除非使用CLUSTER RESET HARD命令)。
ip:port1@port2:port1指redis服務(wù)器與客戶端通信的端口,port2則是集群內(nèi)部節(jié)點間通信的端口

flags:節(jié)點的角色標記,逗號分割的標記位,可能的值有: myself, master, slave, fail?, fail, handshake, noaddr, noflags. 這些標記為具體的意思是:
myself: 當前連接的節(jié)點
master: 節(jié)點是master
slave: 節(jié)點是slave
fail?: 節(jié)點處于PFAIL 狀態(tài)。 當前節(jié)點無法聯(lián)系,但邏輯上是可達的 (非 FAIL 狀態(tài))
fail: 節(jié)點處于FAIL 狀態(tài). 大部分節(jié)點都無法與其取得聯(lián)系將會將改節(jié)點由 PFAIL 狀態(tài)升級至FAIL狀態(tài)
handshake: 還未取得信任的節(jié)點,當前正在與其進行握手
noaddr: 沒有地址的節(jié)點
noflags: 沒有標記(No flags at all)

主從關(guān)系位:如果節(jié)點是slave,并且已知master節(jié)點,則為master節(jié)點ID;否則為符號"-"
ping-sent:最近一次發(fā)送ping的時間,這個時間是一個unix毫秒時間戳,0代表沒有發(fā)送過
pong-recv:最近一次收到pong的時間,使用unix時間戳表示
config-epoch:節(jié)點的epoch值(如果該節(jié)點是從節(jié)點,則為其主節(jié)點的epoch值)。每當節(jié)點發(fā)生失敗切換時,都會創(chuàng)建一個新的,獨特的,遞增的epoch。如果多個節(jié)點競爭同一個哈希槽時,epoch值更高的節(jié)點會搶奪到
link-state:node-to-node集群總線使用的鏈接的狀態(tài),我們使用這個鏈接與集群中其他節(jié)點進行通信.值可以是 connected 和 disconnected
slot:哈希槽值或者一個哈希槽范圍. 從第9個參數(shù)開始,后面最多可能有16384個 數(shù)(limit never reached)。代表當前節(jié)點可以提供服務(wù)的所有哈希槽值。如果只是一個值,那就是只有一個槽會被使用。如果是一個范圍,這個值表示為起始槽-結(jié)束槽,節(jié)點將處理包括起始槽和結(jié)束槽在內(nèi)的所有哈希槽。
一、新建6個docker容器redis
docker run -p 6381:6379 --name redis-node-1 --privileged=true -v /Volumes/data/redis/share/redis-node-1:/data -d redis:6.0.8 --cluster-enabled yes --appendonly yes

docker run -p 6382:6379 --name redis-node-2 --privileged=true -v /Volumes/data/redis/share/redis-node-2:/data -d redis:6.0.8 --cluster-enabled yes --appendonly yes

docker run -p 6383:6379 --name redis-node-3 --privileged=true -v /Volumes/data/redis/share/redis-node-3:/data -d redis:6.0.8 --cluster-enabled yes --appendonly yes

docker run -p 6384:6379 --name redis-node-4 --privileged=true -v /Volumes/data/redis/share/redis-node-4:/data -d redis:6.0.8 --cluster-enabled yes --appendonly yes

docker run -p 6385:6379 --name redis-node-5 --privileged=true -v /Volumes/data/redis/share/redis-node-5:/data -d redis:6.0.8 --cluster-enabled yes --appendonly yes

docker run -p 6386:6379 --name redis-node-6 --privileged=true -v /Volumes/data/redis/share/redis-node-6:/data -d redis:6.0.8 --cluster-enabled yes --appendonly yes

二、構(gòu)建集群關(guān)系
docker exec -it redis-node-1 /bin/bash

2.1 通過mac電腦,網(wǎng)絡(luò)錯誤
redis-cli --cluster create 10.0.115.108:6381 10.0.115.108:6382 10.0.115.108:6383 10.0.115.108:6384 10.0.115.108:6385 10.0.115.108:6386 --cluster-replicas 1

2.2 查看容器ip
cat /etc/hosts
172.17.0.2~172.17.0.7

2.3 建立集群
redis-cli --cluster create 172.17.0.2:6379 172.17.0.3:6379  172.17.0.4:6379 172.17.0.5:6379 172.17.0.6:6379 172.17.0.7:6379 --cluster-replicas 1

三、查看集群狀態(tài)
redis-cli
查看集群信息:
cluster info
查看集群節(jié)點信息:
cluster nodes
當前的集群狀態(tài)
CLUSTER SLOTS

四、kv操作
root@be2eb29003ef:/data# redis-cli -p 6379 -c
127.0.0.1:6379> set k1 k1
-> Redirected to slot [12706] located at 172.17.0.4:6379
OK
172.17.0.4:6379> set k2 k2
-> Redirected to slot [449] located at 172.17.0.2:6379
OK
172.17.0.2:6379> set k3 k3
OK
172.17.0.2:6379>  set k4 k4
-> Redirected to slot [8455] located at 172.17.0.3:6379
OK
172.17.0.3:6379> 

五、查看集群狀態(tài)
redis-cli --cluster check 172.17.0.2:6379

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容