Redis 一主一从哨兵模式配置

哨兵模式

架构

redis 的集群方案大致有三种:

  • redis cluster 集群方案;
  • master/slave 主从方案;
  • 哨兵模式来进行主从替换以及故障恢复。

sentinel(哨兵)是用于监控 redis 集群中 master 状态的工具,是 Redis 的高可用性解决方案,sentinel 哨兵模式已经被集成在 redis2.4 之后的版本中。

sentinel 本身是一个独立运行的进程,它能监控 master-slave 集群,发现 master 宕机后能进行自动切换。sentinel 可以让 redis 实现主从复制,当一个集群中的 master 失效之后,sentinel 可以选举出一个新的 master 用于自动接替 master 的工作,集群中的其他 redis 服务器自动指向新的 master 同步数据。一般建议 sentinel 采取奇数台,防止某一台 sentinel 无法连接到 master 导致误切换。

Redis 一主一从哨兵模式配置_第1张图片

工作流程

sentinel 的主要作用:

  1. master 状态检测;
  2. 如果 master 异常,则会进行 master-slave 切换,将其中一个 slave 作为 master,将之前的 master 作为 slave;
  3. master-slave 切换后,master_redis.conf、slave_redis.conf 和 sentinel.conf 的内容都会发生改变,即 master_redis.conf 中会多一行 slaveof 的配置,sentinel.conf 的监控目标会随之调换。

sentinel 工作方式:

  1. 每个 sentinel 以每秒钟一次的频率向它所知的 master,slave 以及其他 sentinel 实例发送一个 ping 命令;
  2. 如果一个实例(instance)距离最后一次有效回复 ping 命令的时间超过 own-after-milliseconds 选项所指定的值,则这个实例会被 sentinel 标记为主观下线;
  3. 如果一个 master 被标记为主观下线,则正在监视这个 master 的所有 sentinel 要以每秒一次的频率确认 master 的确进入了主观下线状态;
  4. 当有足够数量的 sentinel(大于等于配置文件指定的值)在指定的时间范围内确认 master 的确进入了主观下线状态,则 master 会被标记为客观下线;
  5. 在一般情况下,每个 sentinel 会以每 10 秒一次的频率向它已知的所有 master,slave 发送 info 命令;
  6. 当 master 被 sentinel 标记为客观下线时,sentinel 向下线的 master 的所有 slave 发送 info 命令的频率会从 10 秒一次改为每秒一次;
  7. 若没有足够数量的 sentinel 同意 master 已经下线,master 的客观下线状态就会被移除。 若 master 重新向 sentinel 的 ping 命令返回有效回复,master 的主观下线状态就会被移除。

sentinel 在内部有 3 个定时任务:

  1. 每 10 秒每个 sentinel 会对 master 和 slave 执行 info 命令,这个任务达到两个目的:

    • 发现 slave 节点
    • 确认主从关系
  2. 每 2 秒每个 sentinel 通过 master 节点的 channel 交换信息(pub/sub)。master 节点上有一个发布订阅的频道(sentinel:hello)。sentinel 节点通过 sentinel:hello 频道进行信息交换(对节点的"看法"和自身的信息),达成共识。

  3. 每 1 秒每个 sentinel 对其他 sentinel 和 redis 节点执行 ping 操作(相互监控),这个其实是一个心跳检测,是失败判定的依据。

主观下线

所谓主观下线(subjectively down, 简称 sdown)指的是单个 sentinel 实例对服务器做出的下线判断,即单个 sentinel 认为某个服务下线(有可能是接收不到订阅,之间的网络不通等等原因)。主观下线就是说如果服务器在 down-after-milliseconds 给定的毫秒数之内, 没有返回 sentinel 发送的 ping 命令的回复, 或者返回一个错误, 那么 sentinel 将这个服务器标记为主观下线。

客观下线

客观下线(objectively down, 简称 odown)指的是多个 sentinel 实例在对同一个服务器做出 sdown 判断, 并且通过 sentinel is-master-down-by-addr 命令互相交流之后, 得出的服务器下线判断,然后开启 failover。客观下线就是说只有在足够数量的 sentinel 都将一个服务器标记为主观下线之后, 服务器才会被标记为客观下线(odown)。只有当 master 被认定为客观下线时,才会发生故障迁移。

配置

服务器信息

主节点:10.124.5.207

从节点:10.124.5.198

redis:redis-6.2.7

安装

# 去官网检查最新版本,yum 安装的版本较低,不推荐
root@controller1:~# wget http://download.redis.io/releases/redis-6.2.7.tar.gz
root@co

你可能感兴趣的:(架构设计,linux,redis,分布式,缓存)