【redis】redis哨兵模式

1、简介

  • Redis 哨兵(Redis Sentinel)是 Redis 的高可用性解决方案,它可以在主节点(master)发生故障时自动进行故障转移,将其中的一个从节点(slave)提升为新的主节点,确保 Redis 服务的连续性。
  • 简单来说,当主库宕机,在从库中选择一个,切换为主库。

2、功能

  • 监控(Monitoring):哨兵会持续检查主节点和从节点的健康状况,包括实例是否在运行,主从复制是否正常等。
  • 自动故障转移(Automatic Failover):当主节点发生故障时,哨兵会进行投票,选择一个从节点作为新的主节点,并更新其他从节点的配置,让它们指向新的主节点。
  • 通知(Notification):哨兵可以将故障转移的结果通知给客户端或管理员。
  • 配置提供者(Configuration Provider):哨兵可以作为客户端的配置提供者,客户端可以从哨兵获取最新的主节点地址。

3、工作原理

  • 哨兵是一个独立的进程,它可以与多个 Redis 实例(主节点和从节点)进行交互。
  • 哨兵之间会相互通信,形成一个哨兵集群。
  • 当一个哨兵检测到主节点故障时,它会与其他哨兵进行通信,并尝试进行故障转移。
  • 故障转移的过程包括选择新的主节点、更新从节点的配置、通知客户端等步骤。

4、配置

4.1配置建议

  • 为了确保故障转移的正确性,你需要确保哨兵集群中的哨兵数量是奇数个(如 1、3、5 等),这样可以避免投票时出现平局的情况。
  • 哨兵只能解决 Redis 的主从复制中的单点故障问题,对于其他类型的故障(如磁盘故障、网络分区等)可能无法完全解决。
  • 在使用哨兵时,建议同时配置持久化(如 RDB 或 AOF),以确保数据的可靠性。
  • 客户端在连接 Redis 时,应该使用哨兵提供的地址进行连接,而不是直接连接到 Redis 实例。这样,当发生故障转移时,客户端可以自动连接到新的主节点。

4.2实际配置

1、主从配置

主节点配置(redis.conf)

  • bind <ip>:绑定IP地址。
  • port <port>:指定端口号(例如:6379)。
  • daemonize yes:以守护进程方式运行。
  • pidfile /var/run/redis_<port>.pid:指定PID文件位置。
  • logfile "<logfile-path>":指定日志文件路径。
  • dir "<data-dir>":指定数据目录。
  • requirepass <password>(可选):设置密码。

从节点配置(redis.conf)

在从节点的配置文件中,除了上述主节点的配置外,还需要添加:

  • replicaof <master-ip> <master-port>:指定主节点的IP地址和端口号。
  • masterauth <password>(如果主节点设置了密码):指定主节点的密码。

2、哨兵配置

哨兵节点配置

对于每个哨兵节点,你需要一个sentinel.conf配置文件,其中包含以下关键配置:

  • sentinel monitor <master-name> <master-ip> <master-port> <quorum>
    • <master-name>:给主节点起的名字,可以自定义。
    • <master-ip><master-port>:主节点的IP地址和端口号。
    • <quorum>:表示多少个哨兵节点同意某个主节点不可用时,才进行故障转移。通常是哨兵节点数量减一。

其他哨兵配置选项

  • sentinel down-after-milliseconds <master-name> <milliseconds>:指定哨兵认为主节点不可用的时间阈值。
  • sentinel failover-timeout <master-name> <milliseconds>:指定故障转移的超时时间。
  • sentinel parallel-syncs <master-name> <numslaves>:指定在故障转移期间,可以同时重新配置为新的主节点的从节点数量。

3、启动哨兵和Redis节点

  • 启动Redis主从节点。
  • 启动哨兵节点,使用redis-sentinel /path/to/sentinel.conf命令。

4、验证配置

  • 使用redis-cli -p <sentinel-port> sentinel masters命令来查看哨兵监控的主节点状态。
  • 使用redis-cli -p <redis-port> info replication命令来查看Redis节点的复制信息。

5、哨兵集群

5.1简介

  • 采用多个哨兵,组成一个集群,以少数服从多数的原则,来判断主库是否已客观下线。

5.2功能

  • 监控:哨兵集群会定期向Redis主节点和从节点发送PING命令,检测它们的健康状态。
  • 故障检测:当哨兵检测到主节点未能在规定的时间内响应PING命令时,它会将该主节点标记为客观下线(SDOWN)。
  • 故障转移:当足够数量的哨兵(根据配置,通常是过半数)同意主节点已经客观下线时,哨兵集群会选择一个从节点作为新的主节点,并通知其他从节点进行主从切换。
  • 通知:哨兵集群会通过发布/订阅机制通知客户端新的主节点地址,以便客户端重新连接。
  • 配置管理:哨兵集群会更新并维护Redis主从复制的配置信息,确保系统的一致性。

5.3原理

  • 监控阶段:哨兵节点通过定期发送PING命令来检测Redis主从节点的状态。如果主节点无法响应,哨兵会将其标记为疑似下线(PDOWN)。
  • 通知阶段:哨兵节点之间会进行通信,交换各自对Redis主从节点的监控结果。
  • 故障转移阶段:当足够数量的哨兵节点认为主节点已经客观下线时,会进行故障转移。首先,通过选举算法选择一个哨兵节点作为领导者(Leader),然后由领导者负责执行故障转移操作,包括选择一个从节点作为新的主节点,并通知其他从节点进行主从切换。

5.4配置

1、配置主从复制

配置一个Redis主节点和至少一个从节点。

在Redis的配置文件(通常是redis.conf)中:

  • 主节点:不需要特殊配置,只需确保Redis实例正在运行。
  • 从节点:使用replicaof(旧版本中是slaveof)指令指定主节点的IP地址和端口。例如:replicaof <master-ip> <master-port>

2、配置哨兵实例

对于每个哨兵实例,创建一个配置文件(通常是sentinel.conf),并指定以下关键参数:

  • 哨兵监控的主节点:使用sentinel monitor命令指定要监控的主节点的名称、IP地址、端口和quorum值(即认为主节点已不可用的哨兵数量)。例如:sentinel monitor mymaster <master-ip> <master-port> <quorum>

    • <master-name>:给主节点起的名字,可以自定义。
    • <master-ip>:主节点的IP地址。
    • <master-port>:主节点的端口号。
    • <quorum>:在多少个哨兵实例认为主节点不可用时,才进行故障转移。
  • 哨兵间通信:确保所有哨兵实例都知道其他哨兵实例的地址和端口,以便它们可以相互通信和协作。这通常通过在哨兵配置文件中添加sentinel known-sentinel <master-name> <sentinel-ip> <sentinel-port>指令来实现。

  • 故障转移超时时间:使用sentinel down-after-milliseconds <master-name> <milliseconds>指定哨兵在多长时间内没有收到主节点的响应后,将其标记为不可用。

  • 故障转移过程中的投票时间:使用sentinel failover-timeout <master-name> <milliseconds>指定故障转移过程中,哨兵等待其他哨兵响应的最长时间。

3、启动哨兵实例

  • 使用redis-sentinel /path/to/sentinel.conf命令启动每个哨兵实例。

4、验证配置

  • 使用Redis客户端连接到其中一个哨兵实例,并使用SENTINEL masters命令来验证哨兵是否正在监控您指定的主节点。
  • 使用SENTINEL slaves <master-name>命令来查看主节点的从节点列表。
  • 31
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值