小知识:Docker-swarm快速搭建redis集群的方法步骤

环境配置

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

?
1
sudo hostnamectl set-hostname manager

重启后永久生效,或者执行 exec bash 使立即生效

192.168.2.132

?
1
sudo hostnamectl set-hostname worker01

重启后永久生效,或者执行 exec bash 使立即生效

192.168.2.133

?
1
sudo hostnamectl set-hostname worker02

重启后永久生效,或者执行 exec bash 使立即生效

创建目录

分别在集群的各服务器(131/132/133)上创建目录:

?
1
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/

创建网络

?
1
docker network create –driver overlay mynetwork

这里创建网络类型为overlay,网络类型主要使用比较多的是bridge、overlay ,由于这里使用的是swarm集群部署,要让所有服务在同一个网络中,则需要使用overlay 。

?
1
2
3
4
5
6
7
8
9
10
[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模版文件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
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个副本。

注意:挂载目录,如果不使用宿主机挂载目录,可以使用卷的方式挂载,卷挂载会自动创建,可以不用提前手动创建。

启动服务

?
1
sudo docker stack deploy -c redis-stack.yml redis

1.启动服务

?
1
2
3
4
5
6
7
8
9
10
[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.查看启动节点

?
1
2
3
[root@manager redis]# sudo docker stack ls
NAME      SERVICES   ORCHESTRATOR
redis     6          Swarm

3.查看启动的堆栈

?
1
2
3
4
5
6
7
8
9
[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]#

验证测试

本地连接成功

%小知识:Docker-swarm快速搭建redis集群的方法步骤-猿站网-插图

集群

进入manager(192.168.2.131)服务设置集群

1.登录manager节点,执行如下命令集群:

?
1
2
3
4
5
6
7
[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个服务。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[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

?
1
2
3
4
5
6
7
8
9
[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:

?
1
2
3
4
5
6
7
8
9
10
11
[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:

?
1
2
3
4
5
6
[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:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[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集群

到此这篇关于Docker-swarm快速搭建redis集群的方法步骤的文章就介绍到这了,更多相关Docker-swarm搭建redis集群内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/GodOfRiver/article/details/124348297

声明: 猿站网有关资源均来自网络搜集与网友提供,任何涉及商业盈利目的的均不得使用,否则产生的一切后果将由您自己承担! 本平台资源仅供个人学习交流、测试使用 所有内容请在下载后24小时内删除,制止非法恶意传播,不对任何下载或转载者造成的危害负任何法律责任!也请大家支持、购置正版! 。本站一律禁止以任何方式发布或转载任何违法的相关信息访客发现请向站长举报,会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。本网站的资源部分来源于网络,如有侵权烦请发送邮件至:2697268773@qq.com进行处理。
建站知识

小知识:docker搭建kafka集群的方法实现

2023-3-6 17:54:47

建站知识

小知识:使用docker安装部署NextCloud私人网盘的方法步骤

2023-3-6 18:01:26

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索