docker swarm搭建Redis哨兵(Sentinel)模式

前言

本篇文章介绍docker swarm搭建三主三从Redis哨兵(Sentinel)模式

环境

IPHOSTNAMElabelredis portsentinel port
172.16.0.106cluster-0001master637926379
172.16.0.31cluster-0002slave1637926379
172.16.0.146cluster-0003slave2637926379

配置

master节点

创建文件夹
mkdir -pv /redis/{bin,conf,data,logs}
配置文件
cat /redis/bin/docker-compose.yml

version: '3.4'
services:
  master:
    image: redis
    container_name: redis-master
    restart: always
    command: redis-server /etc/redis/redis.conf
    volumes:
      - /redis/data:/data
      - /redis/conf/redis-master.conf:/etc/redis/redis.conf:ro
      - /redis/logs:/var/log/redis
    ports:
    - target: 6379
      published: 6379
      protocol: tcp
      mode: host
    deploy:
      placement:
        constraints: [node.labels.role==master]
    networks:
      - redis_cluster

  slave1:
    image: redis
    container_name: redis-slave-1
    restart: always
    command: redis-server /etc/redis/redis.conf
    volumes:
      - /redis/data:/data
      - /redis/conf/redis-slave-1.conf:/etc/redis/redis.conf:ro
      - /redis/logs:/var/log/redis
    depends_on:
      - master
    ports:
    - target: 6379
      published: 6379
      protocol: tcp
      mode: host
    deploy:
      placement:
        constraints: [node.labels.role==slave1]
    networks:
      - redis_cluster

  slave2:
    image: redis
    container_name: redis-slave-2
    restart: always
    command: redis-server /etc/redis/redis.conf
    volumes:
      - /redis/data:/data
      - /redis/conf/redis-slave-2.conf:/etc/redis/redis.conf:ro
      - /redis/logs:/var/log/redis
    depends_on:
      - master
    ports:
    - target: 6379
      published: 6379
      protocol: tcp
      mode: host
    deploy:
      placement:
        constraints: [node.labels.role==slave2]
    networks:
      - redis_cluster

  sentinel1:
    image: redis
    container_name: redis-sentinel-1
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    restart: always
    depends_on:
      - master
      - slave1
      - slave2
    ports:
    - target: 26379
      published: 26379
      protocol: tcp
      mode: host
    deploy:
      placement:
        constraints: [node.labels.role==master]
    networks:
      - redis_cluster
    volumes:
      - /redis/conf/sentinel1.conf:/usr/local/etc/redis/sentinel.conf

  sentinel2:
    image: redis
    container_name: redis-sentinel-2
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    restart: always
    depends_on:
      - master
      - slave1
      - slave2
    ports:
    - target: 26379
      published: 26379
      protocol: tcp
      mode: host
    deploy:
      placement:
        constraints: [node.labels.role==slave1]
    networks:
      - redis_cluster
#    network_mode: "host"
    volumes:
      - /redis/conf/sentinel2.conf:/usr/local/etc/redis/sentinel.conf

  sentinel3:
    image: redis
    container_name: redis-sentinel-3
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    restart: always
    depends_on:
      - master
      - slave1
      - slave2
 #   network_mode: "host"
    ports:
    - target: 26379
      published: 26379
      protocol: tcp
      mode: host
    deploy:
      placement:
        constraints: [node.labels.role==slave2]
    networks:
      - redis_cluster
    volumes:
      - /redis/conf/sentinel3.conf:/usr/local/etc/redis/sentinel.conf

networks:
  redis_cluster:
    external:
      name: redis_cluster

cat /redis/bin/startup.sh

#!/bin/bash

docker stack deploy -c docker-compose.yml redis_cluster

cat /redis/bin/shutdown.sh

#!/bin/bash

docker stack rm redis_cluster

cat /redis/conf/redis-master.conf

port 6379
bind 0.0.0.0
logfile "redis-master.log"
dbfilename "dump-master.rdb"
appendfilename appendonly-master.aof
rdbcompression yes
appendonly yes
requirepass 1234
slave-announce-ip 172.16.0.106
slave-announce-port 6379
slave-read-only no

cat /redis/conf/sentinel1.conf

port 26379
dir "/tmp"
sentinel myid fa6bbe8804377177a83cc290651b4e50edc0e58f

sentinel deny-scripts-reconfig yes
sentinel monitor mymaster 172.16.0.106 6379 2
#sentinel monitor mymaster (cluster-0001外网IP) 6379 2 # 如果想外网连接redis,此处使用外网ip

# Generated by CONFIG REWRITE
user default on nopass ~* +@all
sentinel auth-pass mymaster 1234
sentinel config-epoch mymaster 0
sentinel leader-epoch mymaster 0
sentinel known-replica mymaster 172.16.0.146 6379
sentinel known-replica mymaster 172.16.0.31 6379


sentinel known-sentinel mymaster 172.18.0.3 26379 9aeea65e6c8741bc8645dc27f596a9ec6e8e42ae
sentinel known-sentinel mymaster 172.18.0.3 26379 528ab0bbb719fe50309fac21019e0eed567b2bf4
sentinel current-epoch 0

slave1节点

创建文件夹
mkdir -pv /redis/{conf,data,logs}
配置文件
cat /redis/conf/redis-slave-1.conf

port 6379
bind 0.0.0.0
logfile "redis-master.log"
dbfilename "dump-master.rdb"
appendfilename appendonly-master.aof
rdbcompression yes
appendonly yes
requirepass 1234
slaveof 172.16.0.106 6379
masterauth 1234
slave-announce-ip 172.16.0.31
slave-announce-port 6379
slave-read-only no

cat /redis/conf/sentinel2.conf

port 26379
dir "/tmp"
sentinel myid 528ab0bbb719fe50309fac21019e0eed567b2bf4
sentinel deny-scripts-reconfig yes
# Generated by CONFIG REWRITE
user default on nopass ~* +@all
sentinel monitor mymaster 172.16.0.106 6379 2
#sentinel monitor mymaster (cluster-0001外网IP) 6379 2 # 如果想外网连接redis,此处使用外网ip

sentinel auth-pass mymaster 1234
sentinel config-epoch mymaster 0
sentinel leader-epoch mymaster 0
sentinel known-replica mymaster 172.16.0.31 6379
sentinel known-replica mymaster 172.16.0.146 6379
sentinel known-sentinel mymaster 172.18.0.4 26379 fa6bbe8804377177a83cc290651b4e50edc0e58f
sentinel known-sentinel mymaster 172.18.0.3 26379 9aeea65e6c8741bc8645dc27f596a9ec6e8e42ae
sentinel known-sentinel mymaster 172.18.0.3 26379 528ab0bbb719fe50309fac21019e0eed567b2bf4
sentinel current-epoch 0

slave2节点

创建文件夹
mkdir -pv /redis/{conf,data,logs}
配置文件
cat /redis/conf/redis-slave-2.conf

port 6379
bind 0.0.0.0
logfile "redis-master.log"
dbfilename "dump-master.rdb"
appendfilename appendonly-master.aof
rdbcompression yes
appendonly yes
requirepass 1234
slaveof 172.16.0.106 6379
masterauth 1234
slave-announce-ip 172.16.0.146
slave-announce-port 6379
slave-read-only no

cat /redis/conf/sentinel3.conf

port 26379
dir "/tmp"
sentinel myid 9aeea65e6c8741bc8645dc27f596a9ec6e8e42ae

sentinel deny-scripts-reconfig yes
sentinel monitor mymaster 172.16.0.106 6379 2
#sentinel monitor mymaster (cluster-0001外网IP) 6379 2 # 如果想外网连接redis,此处使用外网ip

# Generated by CONFIG REWRITE
user default on nopass ~* +@all
sentinel auth-pass mymaster 1234
sentinel config-epoch mymaster 0
sentinel leader-epoch mymaster 0
sentinel known-replica mymaster 172.16.0.146 6379
sentinel known-replica mymaster 172.16.0.31 6379
sentinel known-sentinel mymaster 172.18.0.4 26379 fa6bbe8804377177a83cc290651b4e50edc0e58f
sentinel known-sentinel mymaster 172.18.0.3 26379 9aeea65e6c8741bc8645dc27f596a9ec6e8e42ae
sentinel known-sentinel mymaster 172.18.0.3 26379 528ab0bbb719fe50309fac21019e0eed567b2bf4
sentinel current-epoch 0

启动

master节点

赋予权限

sudo chmod 777 /redis/bin/*.sh

启动

/redis/bin/startup.sh

停止

/redis/bin/shutdown.sh

查看redis集群启动结果

docker stack ps redis_cluster --no-trunc

在这里插入图片描述
至此,redis哨兵模式搭建完成!
手打不易,有用请点赞!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值