前言
本篇文章介绍docker swarm搭建三主三从Redis哨兵(Sentinel)模式
环境
IP | HOSTNAME | label | redis port | sentinel port |
---|---|---|---|---|
172.16.0.106 | cluster-0001 | master | 6379 | 26379 |
172.16.0.31 | cluster-0002 | slave1 | 6379 | 26379 |
172.16.0.146 | cluster-0003 | slave2 | 6379 | 26379 |
配置
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哨兵模式搭建完成!
手打不易,有用请点赞!