Docker实现Redis主从,以及哨兵机制
目录
- Docker实现Redis主从,以及哨兵机制
- 准备Redis镜像
- 创建Redis主节点配置文件
- 启动Redis从节点
- 确认主从连接
- 哨兵主要功能
- 配置哨兵文件
- 创建Redis哨兵的Docker容器
要通过Docker实现Redis的主从(master-slave)复制,你可以通过运行多个Redis容器,并配置其中一个作为主节点(master),其余的作为从节点(slave)来实现。每个从节点都会复制主节点的数据。
以下是一个基本的步骤指南,展示如何使用Docker来设置Redis的主从复制:
准备Redis镜像
通过Docker Hub拉取官方的Redis镜像:
docker pull redis
创建Redis主节点配置文件
创建一个Redis配置文件(redis.conf
),并在其中设置密码和其他配置。例如:
# redis.conf
requirepass 0909
# 其他配置...
然后,在启动Redis容器时使用这个配置文件,并命名为redis-master
:
docker run --name redis-master -d -p 6380:6379 -v /usr/local/etc/redis/redis.conf:/usr/local/etc/redis/redis.conf redis redis-server /usr/local/etc/redis/redis.conf
- 将宿主机的6380端口开放给主节点容器
- 挂载宿主机的
/usr/local/etc/redis/redis.conf
作为Redis配置文件路径
注意:上面的命令假设你的Redis镜像使用/usr/local/etc/redis/redis.conf
作为容器默认的配置文件路径。不同版本的Redis镜像可能会有略微区别
启动Redis从节点
创建从节点的配置文件redis-slave.conf
,每个从节点都可以有各自的配置,我们将他和主节点放在同一目录下(/usr/local/etc/redis/
)
# redis-slave.conf
replicaof 10.0.4.11 6380
masterauth 666
# 其他配置...
replicaof
:主节点的ip查看方式:
然后,使用类似的命令启动从节点,但使用redis-slave.conf
作为配置文件,名为redis-slave
的从节点容器:
docker run --name redis-slave -d -p 6381:6379 -v /usr/local/etc/redis/redis-slave.conf:/usr/local/etc/redis/redis.conf redis redis-server /usr/local/etc/redis/redis.conf
确认主从连接
进入主节点
exec -it 容器id /bin/bash
正常启动redis
输入指令info
,没有问题
进入从节点
exec -it 容器id /bin/bash
正常启动redis
输入指令info
,主节点redis-master状态为up
,没有问题
主从配置成功
哨兵主要功能
- 监控(Monitoring)
- 哨兵会定期检查Redis主从节点的健康状态。如果发现任何节点不可用,哨兵会记录这个状态并尝试解决问题。
- 通知(Notification)
- 如果哨兵检测到Redis服务器出现问题(比如主节点宕机),它会通知系统管理员或其他应用程序,便于及时处理。
- 自动故障转移(Automatic Failover)
- 当主节点出现故障时,哨兵会自动选举一个从节点作为新的主节点,并通知其他从节点和客户端更新连接信息。这确保了即使主节点出问题,系统仍能继续正常运行。
- 配置提供者(Configuration Provider)
- 哨兵可以提供当前的Redis主从节点配置给客户端,使客户端能够自动连接到新的主节点。
配置哨兵文件
哨兵的配置通常在一个名为 sentinel.conf
的文件中
# sentinel监控的主节点 mymaster为自定义名称
# 2表示哨兵数量阈值。它表示在进行故障转移之前,必须有多少个哨兵节点认为主服务器已经不可达
sentinel monitor mymaster 127.0.0.1 6379 2 # 如果master没有在30000毫秒内响应 PING,则认为master down
sentinel down-after-milliseconds mymaster 30000 # 如果 sentinel 在该配置指定的时间内未能成功地与足够数量的 sentinel 节点或 master 节点进行通信,
# 那么它将停止对其进行故障转移操作
sentinel failover-timeout mymaster 180000 # 通知配置(可选)
# sentinel notification-script mymaster /var/redis/notify-script.sh # 客户端重新配置脚本(可选)
# 当 master 发生变化时,可以通过这个脚本来自动调整客户端配置
# sentinel client-reconfig-script mymaster /var/redis/reconfig-script.sh
创建Redis哨兵的Docker容器
docker run --name sentinel-1 -d \ --volume /usr/etc/redis/sentinel.conf:/usr/local/etc/redis/sentinel.conf \ redis redis-sentinel /usr/local/etc/redis/sentinel.conf