docker-compose啟動(dòng)redis集群的實(shí)現(xiàn)步驟
多機(jī)集群見(jiàn)我的另一篇文檔《docker-compose啟動(dòng)redis多機(jī)集群(6臺(tái)服務(wù)器3主3從)》,此處是一個(gè)用于學(xué)習(xí)的偽集群。
1. 偽集群安裝
docker-compose.yml
創(chuàng)建redis-cluster目錄,目錄下創(chuàng)建docker-compose.yml文件如下
version: '2.2' x-image: ?&default-image ?bitnami/redis-cluster:7.0 x-restart: ?&default-restart ?always services: ? redis-node-0: ? ? image: *default-image ? ? restart: *default-restart ? ? container_name: redis-node-0 ? ? ports: ? ? ? - 6379:6379 ? ? volumes: ? ? ? - ./redis-cluster_data-0:/bitnami/redis/data ? ? environment: ? ? ? - 'REDIS_PASSWORD=liubei@161' ? ? ? - 'REDIS_NODES=redis-node-0 redis-node-1 redis-node-2 redis-node-3 redis-node-4 redis-node-5' ? redis-node-1: ? ? image: *default-image ? ? restart: *default-restart ? ? container_name: redis-node-1 ? ? ports: ? ? ? - 16379:6379 ? ? volumes: ? ? ? - ./redis-cluster_data-1:/bitnami/redis/data ? ? environment: ? ? ? - 'REDIS_PASSWORD=liubei@161' ? ? ? - 'REDIS_NODES=redis-node-0 redis-node-1 redis-node-2 redis-node-3 redis-node-4 redis-node-5' ? redis-node-2: ? ? image: *default-image ? ? restart: *default-restart ? ? container_name: redis-node-2 ? ? ports: ? ? ? - 26379:6379 ? ? volumes: ? ? ? - ./redis-cluster_data-2:/bitnami/redis/data ? ? environment: ? ? ? - 'REDIS_PASSWORD=liubei@161' ? ? ? - 'REDIS_NODES=redis-node-0 redis-node-1 redis-node-2 redis-node-3 redis-node-4 redis-node-5' ? redis-node-3: ? ? image: *default-image ? ? restart: *default-restart ? ? container_name: redis-node-3 ? ? ports: ? ? ? - 36379:6379 ? ? volumes: ? ? ? - ./redis-cluster_data-3:/bitnami/redis/data ? ? environment: ? ? ? - 'REDIS_PASSWORD=liubei@161' ? ? ? - 'REDIS_NODES=redis-node-0 redis-node-1 redis-node-2 redis-node-3 redis-node-4 redis-node-5' ? redis-node-4: ? ? image: *default-image ? ? restart: *default-restart ? ? container_name: redis-node-4 ? ? ports: ? ? ? - 46379:6379 ? ? volumes: ? ? ? - ./redis-cluster_data-4:/bitnami/redis/data ? ? environment: ? ? ? - 'REDIS_PASSWORD=liubei@161' ? ? ? - 'REDIS_NODES=redis-node-0 redis-node-1 redis-node-2 redis-node-3 redis-node-4 redis-node-5' ? redis-node-5: ? ? image: *default-image ? ? restart: *default-restart ? ? container_name: redis-node-5 ? ? ports: ? ? ? - 56379:6379 ? ? volumes: ? ? ? - ./redis-cluster_data-5:/bitnami/redis/data ? ? depends_on: ? ? ? - redis-node-0 ? ? ? - redis-node-1 ? ? ? - redis-node-2 ? ? ? - redis-node-3 ? ? ? - redis-node-4 ? ? environment: ? ? ? - 'REDIS_PASSWORD=liubei@161' ? ? ? - 'REDIS_NODES=redis-node-0 redis-node-1 redis-node-2 redis-node-3 redis-node-4 redis-node-5'
持久化存儲(chǔ)
我們直接啟動(dòng)這些目錄是可以創(chuàng)建的,但是容器中沒(méi)有使用root用戶,一般服務(wù)器都不會(huì)有寫權(quán)限。因此
- 我們手工創(chuàng)建這些目錄,先給讀寫權(quán)限。
- 建議等啟動(dòng)后,看到是對(duì)應(yīng)宿主機(jī)哪個(gè)用戶了,我們?cè)賹⒛夸泴僦鞲臑槟膫€(gè)用戶。
創(chuàng)建存儲(chǔ)目錄
mkdir redis-cluster_data-{0..5} chmod 777 redis-cluster-data-*
結(jié)果如下
[root@liubei redis-cluster]# ll
總用量 7
-rw-r----- 1 root root 2481 7月 6 10:21 docker-compose.yml
drwxrwxrwx 3 root root 61 7月 6 10:43 redis-cluster_data-0
drwxrwxrwx 3 root root 61 7月 6 10:43 redis-cluster_data-1
drwxrwxrwx 3 root root 61 7月 6 10:43 redis-cluster_data-2
drwxrwxrwx 3 root root 77 7月 6 10:51 redis-cluster_data-3
drwxrwxrwx 3 root root 77 7月 6 10:51 redis-cluster_data-4
drwxrwxrwx 3 root root 77 7月 6 10:51 redis-cluster_data-5
啟動(dòng)集群
啟動(dòng)集群
# docker-compose up -d
查看結(jié)果
[root@liubei redis-cluster]# docker-compose ps
Name Command State Ports
-------------------------------------------------------------------------------
redis-node-0 /opt/bitnami/scripts/redis ... Up 0.0.0.0:6379->6379/tcp
redis-node-1 /opt/bitnami/scripts/redis ... Up 0.0.0.0:16379->6379/tcp
redis-node-2 /opt/bitnami/scripts/redis ... Up 0.0.0.0:26379->6379/tcp
redis-node-3 /opt/bitnami/scripts/redis ... Up 0.0.0.0:36379->6379/tcp
redis-node-4 /opt/bitnami/scripts/redis ... Up 0.0.0.0:46379->6379/tcp
redis-node-5 /opt/bitnami/scripts/redis ... Up 0.0.0.0:56379->6379/tcp
集群初始化
初始化集群
進(jìn)入其中一個(gè)容器,執(zhí)行命令如下:
I have no name!@d4a8a3ef35ce:/$ redis-cli -a liubei@161 --cluster create redis-node-0:6379 redis-node-1:6379 redis-node-2:6379 redis-node-3:6379 redis-node-4:6379 redis-node-5:6379 --cluster-replicas 1
輸出如下:
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica redis-node-4:6379 to redis-node-0:6379
Adding replica redis-node-5:6379 to redis-node-1:6379
Adding replica redis-node-3:6379 to redis-node-2:6379
M: 4cdf0f24f67eadb3b7a610fd9b5409a571cce8d3 redis-node-0:6379
slots:[0-5460] (5461 slots) master
M: ee85d84a95793ee031a4b45fe3600ef81ecef7d1 redis-node-1:6379
slots:[5461-10922] (5462 slots) master
M: f48ab32421dfe4405b73129d88f64a4ce4d076e3 redis-node-2:6379
slots:[10923-16383] (5461 slots) master
S: 0315d864aec40531c9630d5e21959aea6837236e redis-node-3:6379
replicates f48ab32421dfe4405b73129d88f64a4ce4d076e3
S: ec43dee472ce9f1531ccdbd0853cd672519ec2fe redis-node-4:6379
replicates 4cdf0f24f67eadb3b7a610fd9b5409a571cce8d3
S: c834ba17bfdf0d498533355022e548b040083ed9 redis-node-5:6379
replicates ee85d84a95793ee031a4b45fe3600ef81ecef7d1
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 redis-node-0:6379)
M: 4cdf0f24f67eadb3b7a610fd9b5409a571cce8d3 redis-node-0:6379
slots:[0-5460] (5461 slots) master
1 additional replica(s)
S: ec43dee472ce9f1531ccdbd0853cd672519ec2fe 172.29.0.2:6379
slots: (0 slots) slave
replicates 4cdf0f24f67eadb3b7a610fd9b5409a571cce8d3
M: f48ab32421dfe4405b73129d88f64a4ce4d076e3 172.29.0.4:6379
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
M: ee85d84a95793ee031a4b45fe3600ef81ecef7d1 172.29.0.5:6379
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
S: 0315d864aec40531c9630d5e21959aea6837236e 172.29.0.6:6379
slots: (0 slots) slave
replicates f48ab32421dfe4405b73129d88f64a4ce4d076e3
S: c834ba17bfdf0d498533355022e548b040083ed9 172.29.0.7:6379
slots: (0 slots) slave
replicates ee85d84a95793ee031a4b45fe3600ef81ecef7d1
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
查看集群狀態(tài)
redis-cli -h redis-node-0 -a liubei@161 cluster info
輸出信息如下:
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
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:174
cluster_stats_messages_pong_sent:203
cluster_stats_messages_sent:377
cluster_stats_messages_ping_received:198
cluster_stats_messages_pong_received:174
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:377
total_cluster_links_buffer_limit_exceeded:0
I have no name!@c193f9814adb:/$
查看集群節(jié)點(diǎn)狀態(tài)
redis-cli -h redis-node-0 -a liubei@161 cluster nodes
輸出
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
921dd4fc8977562273e8f0f297d7809f5d785a96 192.168.0.2:6379@16379 myself,master - 0 1657079063000 1 connected 0-5460
e3be1ac5c4b5a8ea5789dd62aaa550cece718504 192.168.0.5:6379@16379 slave 921dd4fc8977562273e8f0f297d7809f5d785a96 0 1657079062000 1 connected
d45ea5232290aefd17ec87229b2b68be76061b84 192.168.0.6:6379@16379 slave 505a1c9a1e3bc8b7685a6cdf6aa1d82bd48cc95f 0 1657079063278 3 connected
88f0d7a2377bf876105925e330793091f2390a20 192.168.0.4:6379@16379 slave 477f835648ca3ddffa48af99a2e162e541277186 0 1657079062274 2 connected
505a1c9a1e3bc8b7685a6cdf6aa1d82bd48cc95f 192.168.0.7:6379@16379 master - 0 1657079064281 3 connected 10923-16383
477f835648ca3ddffa48af99a2e162e541277186 192.168.0.3:6379@16379 master - 0 1657079065285 2 connected 5461-10922
2. 測(cè)試
讀寫測(cè)試
以集群模式登錄
redis-cli -h redis-nod-1 -a liubei@161 -c
寫入數(shù)據(jù)
redis-node-1:6379> set name liubei OK
在另一個(gè)節(jié)點(diǎn)上讀
I have no name!@ab2a18399901:/$ redis-cli -h redis-node-5 -a liubei@161 -c Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. redis-node-5:6379> get name -> Redirected to slot [5798] located at 192.168.0.3:6379 "liubei" 192.168.0.3:6379>
我們可以看到,連接會(huì)跳到存儲(chǔ)這個(gè)key的節(jié)點(diǎn)上(192.168.0.3)。
key所在節(jié)點(diǎn)
登錄其中一個(gè)節(jié)點(diǎn)
redis-cli -h redis-node-0 -a liubei@161 -c
查看節(jié)點(diǎn)哈希槽編號(hào)的范圍
redis-node-0:6379> cluster slots 1) 1) (integer) 0 2) (integer) 5460 3) 1) "192.168.0.2" 2) (integer) 6379 3) "921dd4fc8977562273e8f0f297d7809f5d785a96" 4) (empty array) 4) 1) "192.168.0.5" 2) (integer) 6379 3) "e3be1ac5c4b5a8ea5789dd62aaa550cece718504" 4) (empty array) 2) 1) (integer) 5461 2) (integer) 10922 3) 1) "192.168.0.3" 2) (integer) 6379 3) "477f835648ca3ddffa48af99a2e162e541277186" 4) (empty array) 4) 1) "192.168.0.4" 2) (integer) 6379 3) "88f0d7a2377bf876105925e330793091f2390a20" 4) (empty array) 3) 1) (integer) 10923 2) (integer) 16383 3) 1) "192.168.0.7" 2) (integer) 6379 3) "505a1c9a1e3bc8b7685a6cdf6aa1d82bd48cc95f" 4) (empty array) 4) 1) "192.168.0.6" 2) (integer) 6379 3) "d45ea5232290aefd17ec87229b2b68be76061b84" 4) (empty array)
查看name的哈希槽編號(hào)
redis-node-0:6379> cluster keyslot name (integer) 5798
通過(guò)第一步查看節(jié)點(diǎn)哈希槽編號(hào)的范圍我們可以看到5798 這個(gè)編號(hào)在 192.168.0.3 上
如果我們不用集群模式登錄,只能在該節(jié)點(diǎn)上讀取到這個(gè)key值。
集群模式驗(yàn)證是否準(zhǔn)確
redis-node-0:6379> get name -> Redirected to slot [5798] located at 192.168.0.3:6379 "liubei" 192.168.0.3:6379>
集群模式登錄,查找這個(gè)key,我們的連接跳到了 192.168.0.3上。
非集群模式登錄查看
登錄其他節(jié)點(diǎn),會(huì)提示我們這個(gè)key存在了192.168.0.3上
I have no name!@ab2a18399901:/$ redis-cli -h 192.168.0.5 -a liubei@161 Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. 192.168.0.5:6379> get name (error) MOVED 5798 192.168.0.3:6379
只有登錄這個(gè)節(jié)點(diǎn)才能查詢到值
I have no name!@ab2a18399901:/$ redis-cli -h 192.168.0.3 -a liubei@161 Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. 192.168.0.3:6379> get name "liubei"
到此這篇關(guān)于docker-compose啟動(dòng)redis集群的實(shí)現(xiàn)步驟的文章就介紹到這了,更多相關(guān)docker-compose啟動(dòng)redis集群內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker搭建Calibre-Web在線書(shū)庫(kù)的實(shí)現(xiàn)示例
本文主要介紹了Docker搭建Calibre-Web在線書(shū)庫(kù)的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01解決Docker中的error during connect異常情況
這篇文章主要介紹了解決Docker中的error during connect異常情況,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11淺談Docker-compose中的depends_on順序的問(wèn)題解決
本文主要介紹了淺談Docker-compose中的depends_on順序的問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11Docker部署后端項(xiàng)目的實(shí)現(xiàn)步驟
本文主要介紹了Docker部署后端項(xiàng)目的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-03-03Docker容器運(yùn)行ASP.NET Core的實(shí)現(xiàn)步驟
這篇文章主要介紹了Docker容器運(yùn)行ASP.NET Core的實(shí)現(xiàn)步驟,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-04-04CentOS7.6系統(tǒng)下Docker安裝部署教程
這篇文章主要為大家介紹了CentOS7.6系統(tǒng)下Docker的安裝部署教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-04-04Docker中鏡像構(gòu)建文件Dockerfile與相關(guān)命令的詳細(xì)介紹
這篇文章主要介紹了Docker中鏡像構(gòu)建文件Dockerfile與相關(guān)命令的相關(guān)資料,文中介紹的很詳細(xì),相信對(duì)大家具有一定的參考價(jià)值,有需要的朋友們下面來(lái)一起看看吧。2017-02-02