文章目录
前言
- 本文介绍如何使用docker-compose部署Redis Cluster高可用集群。
一、指定安装目录
cd /home/app/redis-cluster
二、创建模板,redis-cluster.tmpl
作者主机ip为192.168.1.20
vim redis-cluster.tmpl
port ${PORT}
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 192.168.1.20
cluster-announce-port ${PORT}
cluster-announce-bus-port 1${PORT}
appendonly yes
三、创建容器卷标目录, vim redis-cluster-init.sh
- 创建执行脚本
vim redis-cluster-init.sh
#!/bin/bash
for port in {7100..7105}; do
mkdir -p ./${port}/conf \
&& PORT=${port} envsubst < ./redis-cluster.tmpl > ./${port}/conf/redis.conf \
&& mkdir -p ./${port}/data; \
done
- 赋权(读写执行)并执行
chmod 777 redis-cluster-init.sh
./redis-cluster-init.sh
- 查看执行结果
[root@localhost redis-cluster]# ls 71*
7100:
conf data
7101:
conf data
7102:
conf data
7103:
conf data
7104:
conf data
7105:
conf data
四、创建docker-compose文件
vim redis-cluster.yml
version: '3.4'
services:
redis-7100:
image: redis:5.0.6
container_name: redis-7100
restart: always
sysctls:
- net.core.somaxconn=1024
ports:
- 7100:7100
- 17100:17100
volumes:
- /home/app/redis-cluster/7100/data:/data
- /home/app/redis-cluster/7100/conf/redis.conf:/usr/local/etc/redis/redis.conf
command:
redis-server /usr/local/etc/redis/redis.conf
networks:
- redisNet
redis-7101:
image: redis:5.0.6
container_name: redis-7101
restart: always
sysctls:
- net.core.somaxconn=1024
ports:
- 7101:7101
- 17101:17101
volumes:
- /home/app/redis-cluster/7101/data:/data
- /home/app/redis-cluster/7101/conf/redis.conf:/usr/local/etc/redis/redis.conf
command:
redis-server /usr/local/etc/redis/redis.conf
networks:
- redisNet
redis-7102:
image: redis:5.0.6
container_name: redis-7102
restart: always
sysctls:
- net.core.somaxconn=1024
ports:
- 7102:7102
- 17102:17102
volumes:
- /home/app/redis-cluster/7102/data:/data
- /home/app/redis-cluster/7102/conf/redis.conf:/usr/local/etc/redis/redis.conf
command:
redis-server /usr/local/etc/redis/redis.conf
networks:
- redisNet
redis-7103:
image: redis:5.0.6
container_name: redis-7103
restart: always
sysctls:
- net.core.somaxconn=1024
ports:
- 7103:7103
- 17103:17103
volumes:
- /home/app/redis-cluster/7103/data:/data
- /home/app/redis-cluster/7103/conf/redis.conf:/usr/local/etc/redis/redis.conf
command:
redis-server /usr/local/etc/redis/redis.conf
networks:
- redisNet
redis-7104:
image: redis:5.0.6
container_name: redis-7104
restart: always
sysctls:
- net.core.somaxconn=1024
ports:
- 7104:7104
- 17104:17104
volumes:
- /home/app/redis-cluster/7104/data:/data
- /home/app/redis-cluster/7104/conf/redis.conf:/usr/local/etc/redis/redis.conf
command:
redis-server /usr/local/etc/redis/redis.conf
networks:
- redisNet
redis-7105:
image: redis:5.0.6
container_name: redis-7105
restart: always
sysctls:
- net.core.somaxconn=1024
ports:
- 7105:7105
- 17105:17105
volumes:
- /home/app/redis-cluster/7105/data:/data
- /home/app/redis-cluster/7105/conf/redis.conf:/usr/local/etc/redis/redis.conf
command:
redis-server /usr/local/etc/redis/redis.conf
networks:
- redisNet
networks:
redisNet:
五、创建集群(基于docker-compose)
创建并启动Redis容器
docker-compose -f redis-cluster.yml up -d
输出结果:
Creating redis-7100 … done
Creating redis-7103 … done
Creating redis-7102 … done
Creating redis-7101 … done
Creating redis-7105 … done
Creating redis-7104 … done
创建Redis集群
进入redis容器
docker exec -it redis-7100 bash
执行集群创建命令
redis-cli --cluster create \
192.168.1.20:7100 \
192.168.1.20:7101 \
192.168.1.20:7102 \
192.168.1.20:7103 \
192.168.1.20:7104 \
192.168.1.20:7105 \
--cluster-replicas 1
输出结果
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
…
…
[OK] All nodes agree about slots configuration.
Check for open slots…
Check slots coverage…
[OK] All 16384 slots covered.
六、使用图形化客户端连接并测试
示范使用:Redis Desktop Manager
-
连接集群,选中集群重定向
-
写入key(写入id:1,2,3,4 四条数据)
-
key分配情况
- 7100
127.0.0.1:7100> KEYS * 1) "id:3" 2) "id:2"
- 7101
127.0.0.1:7101> KEYS * 1) "id:1"
- 7102
127.0.0.1:7102> KEYS * 1) "id:4"
-
集群信息
127.0.0.1:7100> cluster nodes
29646a0fea0c240e99e0a1dd8bfbb628b50157a6 192.168.1.20:7100@17100 myself,master - 0 1611632308000 10 connected 0-5460
838f9840752e3181f1935c51f02776a939d719f3 192.168.1.20:7101@17101 master - 0 1611632309000 11 connected 5461-10922
f16f768033ad45b6f568a2d2eefb5bfcafb93cc8 192.168.1.20:7103@17103 slave 7dae7a823fab96eccae6419b9c7f1069c4224ad7 0 1611632308742 12 connected
3133864096a02251163689b8973200b2542e2a26 192.168.1.20:7105@17105 slave 838f9840752e3181f1935c51f02776a939d719f3 0 1611632309000 11 connected
9cd737a321d9b2c73d49c9d921c420cb7a7ad64b 192.168.1.20:7104@17104 slave 29646a0fea0c240e99e0a1dd8bfbb628b50157a6 0 1611632308000 10 connected
7dae7a823fab96eccae6419b9c7f1069c4224ad7 192.168.1.20:7102@17102 master - 0 1611632309744 12 connected 10923-16383
- Stop master-7101节点, 7105被选举为新的master节点
127.0.0.1:7100> cluster nodes
29646a0fea0c240e99e0a1dd8bfbb628b50157a6 192.168.1.20:7100@17100 myself,master - 0 1611632480000 10 connected 0-5460
838f9840752e3181f1935c51f02776a939d719f3 192.168.1.20:7101@17101 master,fail - 1611632464852 1611632463246 11 disconnected
f16f768033ad45b6f568a2d2eefb5bfcafb93cc8 192.168.1.20:7103@17103 slave 7dae7a823fab96eccae6419b9c7f1069c4224ad7 0 1611632480334 12 connected
3133864096a02251163689b8973200b2542e2a26 192.168.1.20:7105@17105 master - 0 1611632479000 13 connected 5461-10922
9cd737a321d9b2c73d49c9d921c420cb7a7ad64b 192.168.1.20:7104@17104 slave 29646a0fea0c240e99e0a1dd8bfbb628b50157a6 0 1611632480837 10 connected
7dae7a823fab96eccae6419b9c7f1069c4224ad7 192.168.1.20:7102@17102 master - 0 1611632479329 12 connected 10923-16383
- Start 7101节点, 7101成为slave节点
127.0.0.1:7100> cluster nodes
29646a0fea0c240e99e0a1dd8bfbb628b50157a6 192.168.1.20:7100@17100 myself,master - 0 1611632607000 10 connected 0-5460
838f9840752e3181f1935c51f02776a939d719f3 192.168.1.20:7101@17101 slave 3133864096a02251163689b8973200b2542e2a26 0 1611632608000 13 connected
f16f768033ad45b6f568a2d2eefb5bfcafb93cc8 192.168.1.20:7103@17103 slave 7dae7a823fab96eccae6419b9c7f1069c4224ad7 0 1611632607920 12 connected
3133864096a02251163689b8973200b2542e2a26 192.168.1.20:7105@17105 master - 0 1611632606918 13 connected 5461-10922
9cd737a321d9b2c73d49c9d921c420cb7a7ad64b 192.168.1.20:7104@17104 slave 29646a0fea0c240e99e0a1dd8bfbb628b50157a6 0 1611632607000 10 connected
7dae7a823fab96eccae6419b9c7f1069c4224ad7 192.168.1.20:7102@17102 master - 0 1611632607519 12 connected 10923-16383