docker swarm 部署一主两从的redis集群

发布时间 2023-12-11 17:02:20作者: JentZhang

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 *