docker-compose安装redis过程-主从+哨兵(3台虚拟机一主两从)
作者:佛说"獨"
文章介绍了使用Docker部署Redis主从架构及哨兵监控的全过程,包括部署架构、配置文件准备、Docker-Compose文件编写、部署步骤以及测试主从复制和故障转移功能
一、部署架构
主从结构
- 主节点:部署于192.168.56.100
- 从节点:部署于192.168.56.101和192.168.56.103
哨兵结构
- 每台服务器部署一个哨兵实例,形成三哨兵集群。
| ip | redis节点名称 | sentinel节点名称 |
| 192.168.56.100 | redis-master | redis-sentinel |
| 192.168.56.101 | redis-slave1 | redis-sentinel |
| 192.168.56.103 | redis-slave2 | redis-sentinel |
二、配置文件准备
创建conf目录保存redis.conf和sentinel.conf文件
创建data目录保存appendonly.aof、dump.rdb、redis.log文件

1.主节点Redis配置(redis-master.conf)
# 任何都可以连接redis bind 0.0.0.0 # 配置master密码 requirepass 123456 # 宕机后成为从要连接master的密码 masterauth 123456 # 开启持久化 appendonly yes
2.从节点Redis配置(redis-slave.conf)
# 指向主节点IP和端口 replicaof 192.168.56.100 6379 # 任何都可以连接redis bind 0.0.0.0 # 从节点密码 requirepass 123456 # 主节点密码 masterauth 123456 # 开启持久化 appendonly yes # 从节点具备写入权限 #slave-read-only no
3.哨兵配置(sentinel.conf)
port 26379 # 监控主节点,2为最小投票数 sentinel monitor mymaster 192.168.56.100 6379 2 # 主节点密码 sentinel auth-pass mymaster 123456 # 6秒无响应判定主节点下线 sentinel down-after-milliseconds mymaster 6000 # 控制同时进行同步的从节点数量为 1 sentinel parallel-syncs mymaster 1 # 故障转移超时时间 sentinel failover-timeout mymaster 6000
三、Docker-Compose文件编写
在三台服务器分别配置docker-compose
#version: '3'
services:
redis:
image: redis:6.2.14 # redis镜像版本
container_name: redis-master # 容器名称
ports:
# 指定宿主机端口与容器端口映射关系
- 6379:6379
volumes:
# 映射配置文件目录
- ./redis/conf/redis-master.conf:/usr/local/etc/redis/redis.conf
# 映射数据目录
- ./redis/data:/usr/local/etc/redis/data
restart: always # 容器开机自启
privileged: true # 获取宿主机root权限
command: redis-server /usr/local/etc/redis/redis.conf # 指定配置文件启动redis-server进程
networks:
- my-network
sentinel:
image: redis:6.2.14
container_name: redis-sentinel
command: redis-sentinel /usr/local/etc/redis/sentinel.conf
ports:
- "26379:26379"
volumes:
- ./redis/conf/sentinel.conf:/usr/local/etc/redis/sentinel.conf
restart: always
networks:
- my-network
networks:
my-network:
#external: true
name: my-network
driver: bridge*从节点需将redis-master.conf替换为redis-slave.conf,并调整container_name*sentinel内容不变
四、部署步骤
1.启动服务
docker-compose up -d # 每台服务器执行
2.验证部署
- 主从同步检查:
docker exec -it redis-master redis-cli -a 123456 info replication

查看role和connected_slaves字段
- 哨兵状态检查:
docker exec -it redis-sentinel redis-cli -p 26379 sentinel master mymaster

或者
进入哨兵容器:
docker exec -it redis-sentinel /bin/bash
连接哨兵:
redis-cli -p 26379 info
五、测试主从和故障转移
进入redis容器:
docker exec -it redis-master /bin/bash redis-cli auth 123456

1.测试主从复制
- master节点创建一个键值对:

- 从节点查看key是否存在:

主从复制正常!!!
2. 测试故障转移
我们把master(192.168.56.100)停掉,查看一个哨兵的日志:
docker stop redis-master
docker logs -f redis-sentinel

故障转移成功!!!
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
