自学内容网 自学内容网

Docker实现Redis主从,以及哨兵机制

Docker实现Redis主从,以及哨兵机制

要通过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查看方式:

image-20240702184827391

然后,使用类似的命令启动从节点,但使用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

image-20240702185349655

输入指令info,没有问题

image-20240702185433175

进入从节点

exec -it 容器id /bin/bash

正常启动redis

image-20240702185529150

输入指令info,主节点redis-master状态为up,没有问题

image-20240702185620947

主从配置成功

哨兵主要功能

  1. 监控(Monitoring)
    • 哨兵会定期检查Redis主从节点的健康状态。如果发现任何节点不可用,哨兵会记录这个状态并尝试解决问题。
  2. 通知(Notification)
    • 如果哨兵检测到Redis服务器出现问题(比如主节点宕机),它会通知系统管理员或其他应用程序,便于及时处理。
  3. 自动故障转移(Automatic Failover)
    • 当主节点出现故障时,哨兵会自动选举一个从节点作为新的主节点,并通知其他从节点和客户端更新连接信息。这确保了即使主节点出问题,系统仍能继续正常运行。
  4. 配置提供者(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

原文地址:https://blog.csdn.net/AZURE060606/article/details/140161586

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!