網站首頁 編程語言 正文
環境配置
1.三臺虛擬機,VM16
操作系統 | IP | 備注 |
---|---|---|
centos7 | 192.168.2.131 | ? |
centos7 | 192.168.2.132 | ? |
centos7 | 192.168.2.133 | ? |
2.redis配置
hostname | IP | 端口 | ? | 備注 |
---|---|---|---|---|
manager | 192.168.2.131 | 7001 | 17001 | ? |
manager | 192.168.2.131 | 7002 | 17002 | ? |
worker01 | 192.168.2.132 | 7003 | 17003 | ? |
worker01 | 192.168.2.132 | 7004 | 17004 | ? |
worker02 | 192.168.2.133 | 7005 | 17005 | ? |
worker02 | 192.168.2.133 | 7006 | 17006 | ? |
修改hostname
192.168.2.131
sudo hostnamectl set-hostname manager
重啟后永久生效,或者執行 exec bash 使立即生效
192.168.2.132
sudo hostnamectl set-hostname worker01
重啟后永久生效,或者執行 exec bash 使立即生效
192.168.2.133
sudo hostnamectl set-hostname worker02
重啟后永久生效,或者執行 exec bash 使立即生效
創建目錄
分別在集群的各服務器(131/132/133)上創建目錄:
sudo rm -rf /home/data/redis/ && sudo mkdir -p /home/data/redis/{7001,7002,7003,7004,7005,7006}/{data,conf} && chmod 777 -R /home/data/
創建網絡
docker network create --driver overlay mynetwork
這里創建網絡類型為overlay,網絡類型主要使用比較多的是bridge、overlay ,由于這里使用的是swarm集群部署,要讓所有服務在同一個網絡中,則需要使用overlay 。
[root@worker2 ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
147f2ede7454 bridge bridge local
e29b8451a401 docker_gwbridge bridge local
4b767db33495 host host local
splhg7ef8xyc ingress overlay swarm
b037f0b632fa mynet bridge local
6zxw8ah74hor mynetwork overlay swarm
b6f757b6cadd none null local
063d396e139c somenetwork bridge local
編寫compose.yml模版文件
version: "3.8"
services:
? redis7001:
? ? image: redis:alpine
? ? container_name: redis7001
? ? #設置主機名
? ? hostname: redis7001
? ? restart: always
? ? #privileged: true
? ? #掛載目錄,相當于 docker run -v 主機目錄:容器目錄
? ? volumes:
? ? ? - /home/data/redis/7001/data:/data
? ? ? - /home/data/redis/7001/conf:/conf
? ? #啟動容器執行命令,相當于docker run [鏡像:tag] ?[命令], 登錄redis: redis-cli -h 192.168.0.80 -p 6379 -a Dszn@2020
? ? command: redis-server --appendonly yes --cluster-enabled yes --cluster-config-file /conf/nodes.conf --cluster-announce-ip 192.168.2.131 --cluster-announce-port 7001 --cluster-announce-bus-port 17001
? ? ports:
? ? ? - "7001:6379"
? ? ? - "17001:16379"
? ? #指定環境變量,相當于docker run -e 參數, 登錄mysql: mysql -h192.168.3.80 -P3306 -uroot -pDs20Pwd@
? ? environment:
? ? ? - TZ=Asia/Shanghai
? ? networks:
? ? ? - mynetwork
? ? deploy:
? ? ? placement:
? ? ? ? constraints:
? ? ? ? ? - node.hostname == manager
? ? ? ? ? - node.role == manager
? redis7002:
? ? image: redis:alpine
? ? container_name: redis7002
? ? #設置主機名
? ? hostname: redis7002
? ? restart: always
? ? #privileged: true
? ? #掛載目錄,相當于 docker run -v 主機目錄:容器目錄
? ? volumes:
? ? ? - /home/data/redis/7002/data:/data
? ? ? - /home/data/redis/7002/conf:/conf
? ? #啟動容器執行命令,相當于docker run [鏡像:tag] ?[命令], 登錄redis: redis-cli -h 192.168.0.80 -p 6379 -a Dszn@2020
? ? command: redis-server --appendonly yes --cluster-enabled yes --cluster-config-file /conf/nodes.conf --cluster-announce-ip 192.168.2.131 --cluster-announce-port 7002 --cluster-announce-bus-port 17002
? ? ports:
? ? ? - "7002:6379"
? ? ? - "17002:16379"
? ? #指定環境變量,相當于docker run -e 參數, 登錄mysql: mysql -h192.168.3.80 -P3306 -uroot -pDs20Pwd@
? ? environment:
? ? ? - TZ=Asia/Shanghai
? ? networks:
? ? ? - mynetwork
? ? deploy:
? ? ? placement:
? ? ? ? constraints:
? ? ? ? ? - node.hostname == manager
? ? ? ? ? - node.role == manager
? redis7003:
? ? image: redis:alpine
? ? container_name: redis7003
? ? #設置主機名
? ? hostname: redis7003
? ? restart: always
? ? volumes:
? ? ? - /home/data/redis/7003/data:/data
? ? ? - /home/data/redis/7003/conf:/conf
? ? command: redis-server --appendonly yes --cluster-enabled yes --cluster-config-file /conf/nodes.conf --cluster-announce-ip 192.168.2.132 --cluster-announce-port 7003 --cluster-announce-bus-port 17003
? ? ports:
? ? ? - "7003:6379"
? ? ? - "17003:16379"
? ? environment:
? ? ? - TZ=Asia/Shanghai
? ? networks:
? ? ? - mynetwork
? ? deploy:
? ? ? placement:
? ? ? ? constraints:
? ? ? ? ? - node.hostname == worker1
? redis7004:
? ? image: redis:alpine
? ? container_name: redis7004
? ? #設置主機名
? ? hostname: redis7004
? ? restart: always
? ? volumes:
? ? ? - /home/data/redis/7004/data:/data
? ? ? - /home/data/redis/7004/conf:/conf
? ? command: redis-server --appendonly yes --cluster-enabled yes --cluster-config-file /conf/nodes.conf --cluster-announce-ip 192.168.2.132 --cluster-announce-port 7004 --cluster-announce-bus-port 17004
? ? ports:
? ? ? - "7004:6379"
? ? ? - "17004:16379"
? ? environment:
? ? ? - TZ=Asia/Shanghai
? ? networks:
? ? ? - mynetwork
? ? deploy:
? ? ? placement:
? ? ? ? constraints:
? ? ? ? ? - node.hostname == worker1
? redis7005:
? ? image: redis:alpine
? ? container_name: redis7005
? ? #設置主機名
? ? hostname: redis7005
? ? restart: always
? ? volumes:
? ? ? - /home/data/redis/7005/data:/data
? ? ? - /home/data/redis/7005/conf:/conf
? ? command: redis-server --appendonly yes --cluster-enabled yes --cluster-config-file /conf/nodes.conf --cluster-announce-ip 192.168.2.132 --cluster-announce-port 7005 --cluster-announce-bus-port 17005
? ? ports:
? ? ? - "7005:6379"
? ? ? - "17005:16379"
? ? environment:
? ? ? - TZ=Asia/Shanghai
? ? networks:
? ? ? - mynetwork
? ? deploy:
? ? ? placement:
? ? ? ? constraints:
? ? ? ? ? - node.hostname == worker2
? redis7006:
? ? image: redis:alpine
? ? container_name: redis7006
? ? #設置主機名
? ? hostname: redis7006
? ? restart: always
? ? volumes:
? ? ? - /home/data/redis/7006/data:/data
? ? ? - /home/data/redis/7006/conf:/conf
? ? command: redis-server --appendonly yes --cluster-enabled yes --cluster-config-file /conf/nodes.conf --cluster-announce-ip 192.168.2.133 --cluster-announce-port 7006 --cluster-announce-bus-port 17006
? ? ports:
? ? ? - "7006:6379"
? ? ? - "17006:16379"
? ? environment:
? ? ? - TZ=Asia/Shanghai
? ? networks:
? ? ? - mynetwork
? ? deploy:
? ? ? placement:
? ? ? ? constraints:
? ? ? ? ? - node.hostname == worker2
#聲明網橋
networks:
? #定義服務網橋名稱
? mynetwork:
? ? #指定網橋驅動,有bridge/overlay,默認是bridge
? ? driver: overlay
? ? #false-統自動創建網橋名,格式為: 目錄名_網橋名,默認為false; true-使用外部創建的網橋,需要自己手動創建
? ? external: true
#掛載目錄,聲明服務使用的創建卷名
volumes:
? mysqldata:
? ? #false-系統自動創建的卷名,格式為: 目錄名_卷名,默認為false; true-使用外部創建的卷面,需要自己手動創建
? ? external: false
配置說明:
這里使用了6個節點,3主3從,分別在manager/worker1/worker2上創建2個副本。
注意:掛載目錄,如果不使用宿主機掛載目錄,可以使用卷的方式掛載,卷掛載會自動創建,可以不用提前手動創建。
啟動服務
sudo docker stack deploy -c redis-stack.yml redis
1.啟動服務
[root@manager redis]# sudo docker stack deploy -c redis-stack.yml redis
Ignoring unsupported options: restart
Ignoring deprecated options:
container_name: Setting the container name is not supported.
Creating service redis_redis7001
Creating service redis_redis7002
Creating service redis_redis7003
Creating service redis_redis7004
Creating service redis_redis7005
Creating service redis_redis7006
2.查看啟動節點
[root@manager redis]# sudo docker stack ls
NAME SERVICES ORCHESTRATOR
redis 6 Swarm
3.查看啟動的堆棧
[root@worker2 redis_cluster]# docker stack ps redis
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
bdofotp2fx91 redis_redis7001.1 redis:alpine manager Running Running 2 minutes ago
81kmx5o61zn0 redis_redis7002.1 redis:alpine manager Running Running about a minute ago
wku68rakslzj redis_redis7003.1 redis:alpine worker1 Running Running 49 seconds ago
oo7obcm33guk redis_redis7004.1 redis:alpine worker1 Running Running about a minute ago
xrt14qitd7ar redis_redis7005.1 redis:alpine worker2 Running Running about a minute ago
jc1xxv66fskg redis_redis7006.1 redis:alpine worker2 Running Running 2 minutes ago
[root@worker2 redis_cluster]#
驗證測試
本地連接成功
集群
進入manager(192.168.2.131)服務設置集群
1.登錄manager節點,執行如下命令集群:
[root@manager ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
71092cdaaf55 redis:alpine "docker-entrypoint.s…" 2 minutes ago Up About a minute 6379/tcp redis_redis7001.1.j84ta2mmwttpl2lp6eoyksz71
695c0fc4545b redis:alpine "docker-entrypoint.s…" 2 minutes ago Up About a minute 6379/tcp redis_redis7002.1.8jt2yodv9ju8k4saumd7n5rif
[root@manager ~]# docker exec -it 710 /bin/sh
/data # redis-cli -h 192.168.2.131 -p 7001 --cluster create 192.168.2.131:7001 192.168.2.131:7002 192.168.2.132:7003 192.168.2.132:7004 192.168.2.133:7005 192.168.2
.133:7006 --cluster-replicas 1 --cluster-yes
2.查看集群
可以看到集群后,redis有3主3從,分別在manager、worker1、worker2節點上創建了2個服務。
[root@manager ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
71092cdaaf55 redis:alpine "docker-entrypoint.s…" 28 minutes ago Up 28 minutes 6379/tcp redis_redis7001.1.j84ta2mmwttpl2lp6eoyksz71
695c0fc4545b redis:alpine "docker-entrypoint.s…" 28 minutes ago Up 28 minutes 6379/tcp redis_redis7002.1.8jt2yodv9ju8k4saumd7n5rif
[root@manager ~]# docker exec -it 710 /bin/sh
/data # redis-cli -c
127.0.0.1:6379> cluster nodes
01011fe3d1e19db0bfab5d736f7fcb85f84e5a2b 192.168.2.131:7002@17002 slave 9fece13f2f1ff237b0e450cb5485c27cd4cc1522 0 1648894677000 5 connected
9a68f8ad7688f3c7f3a5474d64ffc5adc7448288 192.168.2.132:7004@17004 slave c1a9795720eb270d6bc77632236d30bfb1fe9728 0 1648894678000 1 connected
c1a9795720eb270d6bc77632236d30bfb1fe9728 192.168.2.131:7001@17001 myself,master - 0 1648894677000 1 connected 0-5460
9fece13f2f1ff237b0e450cb5485c27cd4cc1522 192.168.2.132:7005@17005 master - 0 1648894679923 5 connected 10923-16383
4b6cafd544d4353249eb7f7d58bed7bf0b1caeb1 192.168.2.132:7003@17003 slave 65c23a5ae11b985b270a5e34d7526648a3c826b8 0 1648894679000 7 connected
65c23a5ae11b985b270a5e34d7526648a3c826b8 192.168.2.133:7006@17006 master - 0 1648894678000 7 connected 5461-10922
127.0.0.1:6379>
集群測試驗證
1.Manager節點192.168.2.131:7001@17001 myself,master 登錄redis:
redis-cli -c set username ‘zxq’ get username
[root@manager ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
71092cdaaf55 redis:alpine "docker-entrypoint.s…" 4 minutes ago Up 4 minutes 6379/tcp redis_redis7001.1.j84ta2mmwttpl2lp6eoyksz71
695c0fc4545b redis:alpine "docker-entrypoint.s…" 4 minutes ago Up 4 minutes 6379/tcp redis_redis7002.1.8jt2yodv9ju8k4saumd7n5rif
[root@manager ~]# docker exec -it 710 /bin/sh
/data # redis-cli -c
127.0.0.1:6379> set username "zxq"
-> Redirected to slot [14315] located at 192.168.2.132:7005
OK
2.Worker1節點192.168.2.132:7003@17003 master 登錄redis:
[root@worker1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
73da00eeb366 redis:alpine "docker-entrypoint.s…" 24 minutes ago Up 23 minutes 6379/tcp redis_redis7004.1.mofccxkrtzb0erc36fwaj9l3b
8e4fed3c8855 redis:alpine "docker-entrypoint.s…" 24 minutes ago Up 23 minutes 6379/tcp redis_redis7003.1.5qmpefwnglv6jvd62206owq3h
[root@worker1 ~]# docker exec -it 73d /bin/sh
/data # redis-cli -c
127.0.0.1:6379> get username
-> Redirected to slot [14315] located at 192.168.2.132:7005
"zxq"
192.168.2.132:7005> set nodes5 "7005"
OK
3.Worker1節點192.168.2.132:7004@17004 slave登錄redis:
[root@worker1 ~]# docker exec -it 8e4 /bin/sh
/data # redis-cli -c
127.0.0.1:6379> get nodes5
-> Redirected to slot [15322] located at 192.168.2.132:7005
"7005"
192.168.2.132:7005>
4.Worker2節點192.168.2.133:7006@17006 slave 登錄redis:
[root@worker2 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7505c9fde687 redis:alpine "docker-entrypoint.s…" 47 minutes ago Up 47 minutes 6379/tcp redis_redis7006.1.o6yly8n6h352g034jhx7nbvaf
2da9dc998c69 redis:alpine "docker-entrypoint.s…" 47 minutes ago Up 47 minutes 6379/tcp redis_redis7005.1.s6lfflko40afutyz9a5b77tib
[root@worker2 ~]# docker exec -it 750 /bin/sh
/data # redis-cli -c
127.0.0.1:6379> get username
-> Redirected to slot [14315] located at 192.168.2.132:7005
"zxq"
192.168.2.132:7005> get name
-> Redirected to slot [5798] located at 192.168.2.133:7006
"zxq"
192.168.2.133:7006> get nodes5
-> Redirected to slot [15322] located at 192.168.2.132:7005
"7005"
192.168.2.132:7005>
redis集群完成
參考原文章地址:
docker swarm redis集群_starsky20的博客-CSDN博客_docker swarm搭建redis集群
原文鏈接:https://blog.csdn.net/GodOfRiver/article/details/124348297
相關推薦
- 2022-06-29 超級詳細的nginx負載均衡配置_nginx
- 2023-04-19 error:13: Permission denied (nginx 查看日志 failed (13
- 2022-02-27 Web server failed to start. Port XXXX was already
- 2023-10-14 ORACLE存在就修改 不存在就新增(注意更新和新增語法不同于常規語法)
- 2023-04-07 Python實現SVM支持向量機的示例代碼_python
- 2022-06-13 Nginx配置?location模塊實現路由(反向代理、重定向)功能_nginx
- 2022-07-26 Python+Seaborn繪制分布圖的示例詳解_python
- 2022-05-17 ubuntu E: 無法獲得鎖 /var/lib/dpkg/lock-frontend - open
- 最近更新
-
- 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同步修改后的遠程分支