網站首頁 編程語言 正文
多機集群見我的另一篇文檔《docker-compose啟動redis多機集群(6臺服務器3主3從)》,此處是一個用于學習的偽集群。
1. 偽集群安裝
docker-compose.yml
創建redis-cluster目錄,目錄下創建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'
持久化存儲
我們直接啟動這些目錄是可以創建的,但是容器中沒有使用root用戶,一般服務器都不會有寫權限。因此
- 我們手工創建這些目錄,先給讀寫權限。
- 建議等啟動后,看到是對應宿主機哪個用戶了,我們再將目錄屬主改為哪個用戶。
創建存儲目錄
mkdir redis-cluster_data-{0..5}
chmod 777 redis-cluster-data-*
結果如下
[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
啟動集群
啟動集群
# docker-compose up -d
查看結果
[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
集群初始化
初始化集群
進入其中一個容器,執行命令如下:
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.
查看集群狀態
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:/$
查看集群節點狀態
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. 測試
讀寫測試
以集群模式登錄
redis-cli -h redis-nod-1 -a liubei@161 -c
寫入數據
redis-node-1:6379> set name liubei
OK
在另一個節點上讀
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>
我們可以看到,連接會跳到存儲這個key的節點上(192.168.0.3)。
key所在節點
登錄其中一個節點
redis-cli -h redis-node-0 -a liubei@161 -c
查看節點哈希槽編號的范圍
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的哈希槽編號
redis-node-0:6379> cluster keyslot name
(integer) 5798
通過第一步查看節點哈希槽編號的范圍我們可以看到5798 這個編號在 192.168.0.3 上
如果我們不用集群模式登錄,只能在該節點上讀取到這個key值。
集群模式驗證是否準確
redis-node-0:6379> get name
-> Redirected to slot [5798] located at 192.168.0.3:6379
"liubei"
192.168.0.3:6379>
集群模式登錄,查找這個key,我們的連接跳到了 192.168.0.3上。
非集群模式登錄查看
登錄其他節點,會提示我們這個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
只有登錄這個節點才能查詢到值
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"
原文鏈接:https://blog.csdn.net/xingzuo_1840/article/details/125634265
相關推薦
- 2022-06-24 React如何使用refresh_token實現無感刷新頁面_React
- 2022-09-16 Pandas?類型轉換astype()的實現_python
- 2022-08-11 C#實現快速查詢文件的方法_C#教程
- 2022-06-06 ASP.NET的Core?AD域登錄過程示例_ASP.NET
- 2022-10-04 Linux行處理工具之grep?正則表達式詳解_正則表達式
- 2022-11-18 redis批量操作pipeline管道操作方法_Redis
- 2023-04-03 PyTorch加載模型model.load_state_dict()問題及解決_python
- 2022-02-26 Echarts - 更改圖表圖例(legend)自定義顏色(并與數據段顏色對應)
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支