Spiga

Redis哨兵集群文档

2022-03-26 14:47:44

前提条件

在开始之前,请确保您已经准备好了 redis-cluster 文件夹,内部包含 docker-compose.ymlredis.conf 文件。

创建哨兵配置文件 (sentinel.conf)

redis-cluster 文件夹中,新建一个名为 sentinel.conf 的文件。

将以下配置内容复制并粘贴到 sentinel.conf 文件中。

# 哨兵监控的主节点信息
# 格式: sentinel monitor <master-name> <ip> <port> <quorum>
# <name>: 自定义的集群名称,例如 myredis
# <ip>: 主节点的IP、主机名、容器名
# <port>: 主节点的端口 6379
# <quorum>: 法定人数。表示至少需要多少个哨兵同意,才能判定主节点下线。3个哨兵建议设置为2
sentinel monitor myredis  6379 2

# 主节点连接密码。这必须与您在 redis.conf 中设置的 requirepass 和 masterauth 密码一致
# 格式: sentinel auth-pass <master-name> <password>
sentinel auth-pass myredis 123456

# 判定主节点下线的时长(毫秒)
# 如果主节点在30秒内没有响应,哨兵就认为它主观下线
# 格式: sentinel down-after-milliseconds <master-name> <milliseconds>
sentinel down-after-milliseconds myredis 30000

# 故障转移超时时间(毫秒)
# 当故障转移开始后,若超过此时间还未完成,则视为失败
# 格式: sentinel failover-timeout <master-name> <milliseconds>
sentinel failover-timeout myredis 180000

# 执行故障转移时,最多可以有多少个从节点同时对新的主节点进行同步
# 设置为 1 表示一次只有一个从节点进行同步,避免对新主节点造成过大压力
# 格式: sentinel parallel-syncs <master-name> <num-slaves>
sentinel parallel-syncs myredis 1

重要提示:请确保 sentinel auth-pass 的密码 123456 与您 redis.conf 中设置的密码一致。

使用命令行启动三个哨兵容器

现在,主从节点和网络都已就绪,我们可以安全地启动哨兵了。请注意,下方的命令中网络名已修改为 --network redis-net

启动第一个哨兵

docker run -d --name redis-sentinel-1 --network redis-cluster_redis-net -p 26379:26379 -v %cd%/sentinel.conf:/usr/local/etc/redis/sentinel.conf redis redis-sentinel /usr/local/etc/redis/sentinel.conf

启动第二个哨兵

docker run -d --name redis-sentinel-2 --network redis-cluster_redis-net -p 26380:26379 -v %cd%/sentinel.conf:/usr/local/etc/redis/sentinel.conf redis redis-sentinel /usr/local/etc/redis/sentinel.conf

启动第三个哨兵

docker run -d --name redis-sentinel-3 --network redis-cluster_redis-net -p 26381:26379 -v %cd%/sentinel.conf:/usr/local/etc/redis/sentinel.conf redis redis-sentinel /usr/local/etc/redis/sentinel.conf

验证哨兵集群状态

所有哨兵启动后,我们需要验证它们是否正常工作。

  1. 检查容器运行状态

    运行 docker ps,确保所有6个容器(3个主从,3个哨兵)都处于 Up 状态。

  2. 查看哨兵日志

    运行 docker logs redis-sentinel-1,您应该能看到它成功监控到主节点、从节点和其他哨兵的日志。

  3. 连接到哨兵进行查询

    docker exec -it redis-sentinel-1 redis-cli -p 26379
    

    进入哨兵命令行后,输入:

    SENTINEL master myredis
    

    如果返回信息中的 num-slaves2num-other-sentinels2,则表示整个集群已成功搭建。