DockerCompose搭建Redis集群
本次之前使用Docker单节点集群,这次使用dockercompose来搭建
环境
- 192.168.62.128
- 192.168.62.129
搭建
1、创建目录
分别在 192.168.62.128 和 192.168.62.129两台机器上执行以下操作。
# 创建目录
mkdir -p /data/redis-cluster
# 切换至指定目录
cd /data/redis-cluster
# 编写 redis-cluster.tmp
vim redis-cluster.tmpl
2、编写Redis配置文件
128服务器是内容为:
port ${index}
bind 0.0.0.0
requirepass 密码
masterauth 密码
protected-mode no
daemonize no
appendonly yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 192.168.62.128
cluster-announce-port ${index}
cluster-announce-bus-port 1${index}
129服务器是内容为:
port ${index}
bind 0.0.0.0
requirepass 密码
masterauth 密码
protected-mode no
daemonize no
appendonly yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 172.62.0.${index}
cluster-announce-port ${index}
cluster-announce-bus-port 1${index}
参数解释
- port:节点端口;
- bind: 可连接redis的主机
- requirepass:添加访问认证;
- masterauth:如果主节点开启了访问认证,从节点访问主节点需要认证;
- protected-mode:保护模式,默认值yes。开启保护模式以后,需配置 bind ip 或者设置访问密码;关闭保护模式,外部网络可以直接访问;
daemonize:是否以守护线程的方式启动(后台启动),默认no; - appendonly:是否开启 AOF 持久化模式,默认no;
- cluster-enabled:是否开启集群模式,默认no;
- cluster-config-file:集群节点信息文件;
- cluster-config-timeout:集群节点连接超时时间;
- cluster-announce-ip:集群节点ip,填写宿主机IP;
- cluster-announce-port:集群节点映射端口;
- cluster-announce-bus-port:集群节点总线端口;
然后128服务器的redis-cluster
目录下执行脚本,如果执行报错就一行一行的复制。
[root@localhost redis-cluster]# for index in `seq 1 6`; do \
mkdir -p 700${index}/conf \
&& index=${index} envsubst <redis-cluster.tmpl> 700${index}/conf/redis.conf \
&& mkdir -p 700${index}/data; \
done
然后129服务器的redis-cluster
目录下执行脚本
[root@localhost redis-cluster]# for index in `seq 4 6`; do \
mkdir -p 700${index}/conf \
&& index=${index} envsubst <redis-cluster.tmpl> 700${index}/conf/redis.conf \
&& mkdir -p 700${index}/data; \
done
俩节点执行后的文件目录为:
[root@localhost redis-cluster]# tree
.
├── 6371
│ ├── conf
│ │ └── redis.conf
│ └── data
├── 6372
│ ├── conf
│ │ └── redis.conf
│ └── data
├── 6373
│ ├── conf
│ │ └── redis.conf
│ └── data
└── redis-cluster.tmpl
[root@localhost redis-cluster]# tree
.
├── 6374
│ ├── conf
│ │ └── redis.conf
│ └── data
├── 6375
│ ├── conf
│ │ └── redis.conf
│ └── data
├── 6376
│ ├── conf
│ │ └── redis.conf
│ └── data
└── redis-cluster.tmpl
3、编写 Docker Compose 模板文件
在128服务器的/data/redis-cluster目录下编写docker-compose.yml文件
version: "3.8"
services:
redis-6371: # 服务名称
image: redis:5.0.14 # 创建容器时所需的镜像
container_name: redis-6371 # 容器名称
restart: always # 容器总是重新启动
network_mode: "host" # host 网络模式
ports:
- "6371:6371"
volumes: # 数据卷,目录挂载
- /data/redis-cluster/6371/conf/redis.conf:/usr/local/etc/redis/redis.conf
- /data/redis-cluster/6371/data:/data
command: redis-server /usr/local/etc/redis/redis.conf # 覆盖容器启动后默认执行的命令
redis-6372:
image: redis:5.0.14
container_name: redis-6372
network_mode: "host"
restart: always
ports:
- "6372:6372"
volumes:
- /data/redis-cluster/6372/conf/redis.conf:/usr/local/etc/redis/redis.conf
- /data/redis-cluster/6372/data:/data
command: redis-server /usr/local/etc/redis/redis.conf
redis-6373:
image: redis:5.0.14
container_name: redis-6373
network_mode: "host"
restart: always
ports:
- "6373:6373"
volumes:
- /data/redis-cluster/6373/conf/redis.conf:/usr/local/etc/redis/redis.conf
- /data/redis-cluster/6373/data:/data
command: redis-server /usr/local/etc/redis/redis.conf
在129服务器的/data/redis-cluster目录下编写docker-compose.yml文件
version: "3.8"
services:
redis-6374:
image: redis:5.0.14 #镜像 & tag
container_name: redis-6374 # 容器名称
restart: always
network_mode: "host" # host 网络模式
ports:
- "6374:6374"
volumes: # 数据卷,目录挂载
- /data/redis-cluster/6374/conf/redis.conf:/usr/local/etc/redis/redis.conf
- /data/redis-cluster/6374/data:/data
command: redis-server /usr/local/etc/redis/redis.conf # 容器启动后默认执行的命令
redis-6375:
image: redis:5.0.14
container_name: redis-6375
restart: always
network_mode: "host"
ports:
- "6375:6375"
volumes:
- /data/redis-cluster/6375/conf/redis.conf:/usr/local/etc/redis/redis.conf
- /data/redis-cluster/6375/data:/data
command: redis-server /usr/local/etc/redis/redis.conf
redis-6376:
image: redis:5.0.14
container_name: redis-6376
restart: always
network_mode: "host"
ports:
- "6376:6376"
volumes:
- /data/redis-cluster/6376/conf/redis.conf:/usr/local/etc/redis/redis.conf
- /data/redis-cluster/6376/data:/data
command: redis-server /usr/local/etc/redis/redis.conf
运行docker-compose
docker-compose up -d
4、创建集群
进入随便进入一个docker容器
docker exec -it redis-6371 bash
在/usr/local/bin
目录下执行集群创建命令
redis-cli -a uids#@123 --cluster create 192.168.62.128:6371 192.168.62.128:6372 192.168.62.128:6373 192.168.62.129:6374 192.168.62.129:6375 192.168.62.129:6376 --cluster-replicas 1
集群搭建成功
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 192.168.62.129:6376 to 192.168.62.128:6371
Adding replica 192.168.62.128:6373 to 192.168.62.129:6374
Adding replica 192.168.62.129:6375 to 192.168.62.128:6372
M: 4aba693babbbb4929bc1ecfd12dd711eca44797d 192.168.62.128:6371
slots:[0-5460] (5461 slots) master
M: 8276ac3823558df1e1ddc7dd94da8319ab6bb2e9 192.168.62.128:6372
slots:[10923-16383] (5461 slots) master
S: ba9c2e3cd8472d5bdd48b431d5767b3b656560d2 192.168.62.128:6373
replicates 15a48a647493d96185e296fdb86bc4ceb86b5cbe
M: 15a48a647493d96185e296fdb86bc4ceb86b5cbe 192.168.62.129:6374
slots:[5461-10922] (5462 slots) master
S: b8087dea14dd6e75fb654644c86ee35c0dd9b5e4 192.168.62.129:6375
replicates 8276ac3823558df1e1ddc7dd94da8319ab6bb2e9
S: bf2d90aa4516b0247d74f31be41bc5a9f44b6174 192.168.62.129:6376
replicates 4aba693babbbb4929bc1ecfd12dd711eca44797d
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 192.168.62.128:6371)
M: 4aba693babbbb4929bc1ecfd12dd711eca44797d 192.168.62.128:6371
slots:[0-5460] (5461 slots) master
1 additional replica(s)
S: b8087dea14dd6e75fb654644c86ee35c0dd9b5e4 192.168.62.129:6375
slots: (0 slots) slave
replicates 8276ac3823558df1e1ddc7dd94da8319ab6bb2e9
M: 15a48a647493d96185e296fdb86bc4ceb86b5cbe 192.168.62.129:6374
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
M: 8276ac3823558df1e1ddc7dd94da8319ab6bb2e9 192.168.62.128:6372
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
S: ba9c2e3cd8472d5bdd48b431d5767b3b656560d2 192.168.62.128:6373
slots: (0 slots) slave
replicates 15a48a647493d96185e296fdb86bc4ceb86b5cbe
S: bf2d90aa4516b0247d74f31be41bc5a9f44b6174 192.168.62.129:6376
slots: (0 slots) slave
replicates 4aba693babbbb4929bc1ecfd12dd711eca44797d
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.