版权声明:本文为CSDN博主「帅骚贯彻一生」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_39211866/article/details/88044546
主从
version: '2'
services:
master:
image: redis ## 镜像
container_name: redis-master
command: redis-server --requirepass 123456
ports:
- "6379:6379"
networks:
- sentinel-master
slave1:
image: redis ## 镜像
container_name: redis-slave-1
ports:
- "6380:6379" ## 暴露端口
command: redis-server --slaveof redis-master 6379 --requirepass 123456 --masterauth 123456
depends_on:
- master
networks:
- sentinel-master
slave2:
image: redis ## 镜像
container_name: redis-slave-2
ports:
- "6381:6379" ## 暴露端口
command: redis-server --slaveof redis-master 6379 --requirepass 123456 --masterauth 123456
depends_on:
- master
networks:
- sentinel-master
networks:
sentinel-master:
哨兵
第三行表示Redis监控一个叫做mymaster的运行在172.28.0.3:6379的 master,投票达到2则表示master以及挂掉了。
第四行设置主节点的密码
第五行表示在一段时间范围内sentinel向master发送的心跳PING没有回复则认为master不可用了。
第六行的parallel-syncs表示设置在故障转移之后,同时可以重新配置使用新master的slave的数量。数字越低,更多的时间将会用故障转移完成,但是如果slaves配置为服务旧数据,你可能不希望所有的slave同时重新同步master。因为主从复制对于slave是非阻塞的,当停止从master加载批量数据时有一个片刻延迟。通过设置选项为1,确信每次只有一个slave是不可到达的。
第七行表示10秒内mymaster还没活过来,则认为master宕机了。
port 26379
dir /tmp
# 这个地址通过 docker inspect redis-master 来获取.
sentinel monitor mymaster 172.28.0.3 6379 2
sentinel auth-pass mymaster 123456
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 10000
sentinel deny-scripts-reconfig yes
粘贴出三份相同的配置:
cp sentinel.conf sentinel1.conf
cp sentinel.conf sentinel2.conf
cp sentinel.conf sentinel3.conf
docker-compose.yml 的配置.
version: '2'
services:
sentinel1:
image: redis ## 镜像
container_name: redis-sentinel-1
command: redis-sentinel /usr/local/etc/redis/sentinel.conf
ports:
- "26380:26379"
volumes:
- "./sentinel.conf:/usr/local/etc/redis/sentinel.conf"
sentinel2:
image: redis ## 镜像
container_name: redis-sentinel-2
ports:
- "26380:26379"
command: redis-sentinel /usr/local/etc/redis/sentinel.conf
volumes:
- "./sentinel2.conf:/usr/local/etc/redis/sentinel.conf"
sentinel3:
image: redis ## 镜像
container_name: redis-sentinel-3
ports:
- "26381:26379"
command: redis-sentinel /usr/local/etc/redis/sentinel.conf
volumes:
- ./sentinel3.conf:/usr/local/etc/redis/sentinel.conf
# 把这组容器加入到要监控的集群中, 比较容易犯错的是这里,
# 这个网络名是 "文件前缀+网络名", redis_sentinel-master, 所以需要自己修改.
networks:
default:
external:
name: redis_sentinel-master
进入哨兵:
redis-cli -p 26379
检查配置:
进入 redis-sentinel-1 的 redis-shell 执行:
info sentinel
输出:
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=sdown,address=172.24.0.2:6379,slaves=2,sentinels=3