docker-compose文件准备
- docker-compose-redis-cluster.yml
version: '3.8'
services:
redis-master:
image: redis
command: redis-server --requirepass your_password --appendonly yes
deploy:
replicas: 1
placement:
constraints:
- node.labels.redis.replica == 1
restart_policy:
condition: on-failure
networks:
- redis-net
ports:
- "6379:6379" # 添加端口映射
volumes:
- redis-master-data:/data
redis-slave1:
image: redis
command: redis-server --requirepass your_password --slaveof redis-master 6379 --masterauth your_password
deploy:
replicas: 1
placement:
constraints:
- node.labels.redis.replica == 2
restart_policy:
condition: on-failure
networks:
- redis-net
volumes:
- redis-slave1-data:/data
redis-slave2:
image: redis
command: redis-server --requirepass your_password --slaveof redis-master 6379 --masterauth your_password
deploy:
replicas: 1
placement:
constraints:
- node.labels.redis.replica == 3
restart_policy:
condition: on-failure
networks:
- redis-net
volumes:
- redis-slave2-data:/data
networks:
redis-net:
external: true # 用已经创建好的网络
volumes:
redis-master-data:
redis-slave1-data:
redis-slave2-data:
创建专用Swarm网络
docker network create --driver overlay redis-net
给node打标签
docker node update --label-add redis.replica=1 node1
docker node update --label-add redis.replica=2 node2
docker node update --label-add redis.replica=3 node3
部署
docker stack deploy -c docker-compose-redis-cluster.yml redis
验证
- 在master节点增加key
- 在从节点的redis中查看有没有key
redis-cli -h redis-slave2 -p 6379 -a your_password
keys *