乐趣区

关于redis:Redis-官方的高可用解决方案请收藏

Redis 主从复制的问题

Redis 主从复制可将主节点数据同步给从节点,从节点此时有两个作用:

  • 一旦主节点宕机,从节点作为主节点的备份能够随时顶上来。
  • 扩大主节点的读能力,分担主节点读压力。

主从复制同时存在以下几个问题:

  • 一旦主节点宕机,从节点降职成主节点,同时须要批改利用方的主节点地址,还须要命令所有 从节点去复制新的主节点,整个过程须要人工干预。
  • 主节点的写能力受到单机的限度。
  • 主节点的存储能力受到单机的限度。
  • 原生复制的弊病在晚期的版本中也会比较突出,比方:Redis 复制中断后,从节点会发动 psync。此时如果同步不胜利,则会进行全量同步,主库执行全量备份的同时,可能会造成毫秒或秒级的卡顿。
  • 在民工哥技术之路公众号后盾回复关键字  Redis 手册  收费获取一份 redis 最佳实际与实战指南电子书

Redis 的 哨兵(Sentinel)深刻探索

Redis Sentinel 的架构

Redis 的哨兵机制就是解决咱们以上主从复制存在缺点(选举问题),保障咱们的 Redis 高可用,实现自动化故障发现与故障转移。

该零碎执行以下三个工作:

  • 监控:哨兵会一直查看你的主服务器和从服务器是否运作失常。
  • 揭示:当被监控的某个 Redis 服务器呈现问题时,哨兵能够通过 API 给程序员发送告诉
  • 主动故障转移:主服务器宕机,哨兵会开始一次主动故障转移操作,降级一个从服务器为主服务器,并让其余从服务器改为复制新的主服务器.

配置 Sentinel

Redis 源码中蕴含了一个名为 sentinel.conf 的文件,这个文件是一个带有具体正文的 Sentinel 配置文件示例。

运行一个 Sentinel 所需的起码配置如下所示:

1)sentinel monitor mymaster 192.168.10.202 6379 2

Sentine 监听的 maste 地址,第一个参数是给 master 起的名字,第二个参数为 master IP,第三个为 master 端口,第四个为当该 master 挂了的时候,若想将该 master 判为生效,在 Sentine 集群中必须至多 2 个 Sentine 批准才行,只有该数量不达标,则就不会产生故障迁徙。2)sentinel down-after-milliseconds mymaster 30000

示意 master 被以后 sentinel 实例认定为生效的间隔时间,在这段时间内始终没有给 Sentine 返回无效信息,则认定该 master 主观下线。只有在足够数量的 Sentinel 都将一个服务器标记为主观下线之后,服务器才会被标记为主观下线,将服务器标记为主观下线所需的 Sentinel 数量由对主服务器的配置决定。3)sentinel parallel-syncs mymaster 2

当在执行故障转移时,设置几个 slave 同时进行切换 master,该值越大,则可能就有越多的 slave 在切换 master 时不可用,能够将该值设置为 1,即一个一个来,这样在某个

slave 进行切换 master 同步数据时,其余的 slave 还能失常工作,以此保障每次只有一个从服务器处于不能解决命令申请的状态。4)sentinel can-failover mymaster yes

在 sentinel 检测到 O_DOWN 后,是否对这台 redis 启动 failover 机制

5)sentinel auth-pass mymaster 20180408

设置 sentinel 连贯的 master 和 slave 的明码,这个须要和 redis.conf 文件中设置的明码一样

6)sentinel failover-timeout mymaster 180000

failover 过期工夫,当 failover 开始后,在此工夫内依然没有触发任何 failover 操作,以后 sentinel 将会认为此次 failoer 失败。执行故障迁徙超时工夫,即在指定工夫内没有大多数的 sentinel 反馈 master 下线,该故障迁徙打算则生效

7)sentinel config-epoch mymaster 0

选项指定了在执行故障转移时,最多能够有多少个从服务器同时对新的主服务器进行同步。这个数字越小,实现故障转移所需的工夫就越长。8)sentinel notification-script mymaster /var/redis/notify.sh

当 failover 时,能够指定一个 "告诉" 脚本用来告知以后集群的状况。脚本被容许执行的最大工夫为 60 秒,如果超时,脚本将会被终止 (KILL)


9)sentinel leader-epoch mymaster 0

同时一时间最多 0 个 slave 可同时更新配置, 倡议数字不要太大, 免得影响失常对外提供服务。
主观下线和主观下线
  • 主观下线:指的是单个 Sentinel 实例对服务器做出的下线判断。
  • 主观下线:指的是多个 Sentinel 实例在对同一个服务器做出 SDOWN 主观下线判断。

Redis Sentinel 的工作原理

1. 每个 Sentinel 以每秒一次的频率向它所知的主服务器、从服务器以及其余 Sentinel 实例发送一个 PING 命令。

2. 如果一个实例间隔最初一次无效回复 PING 命令的工夫超过指定的值,那么这个实例会被 Sentinel 标记为主观下线。

3. 正在监督这个主服务器的所有 Sentinel 要以每秒一次的频率确认主服务器确实进入了主观下线状态。

4. 有足够数量的 Sentinel 在指定的工夫范畴内批准这一判断,那么这个主服务器被标记为主观下线。

5. 每个 Sentinel 会以每 10 秒一次的频率向它已知的所有主服务器和从服务器发送 INFO 命令。当一个主服务器被 Sentinel 标记为主观下线时,Sentinel 向下线主服务器的所有从服务器发送 INFO 命令的频率会从 10 秒一次改为每秒一次。在民工哥技术之路公众号后盾回复关键字  Redis 手册  收费获取一份 redis 最佳实际与实战指南电子书。

6.Sentinel 和其余 Sentinel 协商主节点的状态,如果主节点处于 SDOWN 状态,则投票主动选出新的主节点。将残余的从节点指向新的主节点进行数据复制。

7. 当没有足够数量的 Sentinel 批准主服务器 下线时,主服务器的主观下线状态就会被移除。当主服务器从新向 Sentinel 的 PING 命令返回无效回复时,主服务器的主观下线状态就会被移除。

主动发现 Sentinel 和从服务器

一个 Sentinel 能够与其余多个 Sentinel 进行连贯,各个 Sentinel 之间能够相互查看对方的可用性,并进行信息替换。

你毋庸为运行的每个 Sentinel 别离设置其余 Sentinel 的地址,因为 Sentinel 能够通过公布与订阅性能来主动发现正在监督雷同主服务器的其余 Sentinel。

  • 每个 Sentinel 会以每两秒一次的频率,通过公布与订阅性能,向被它监督的所有主服务器和从服务器的频道发送一条信息,信息中蕴含了 Sentinel 的 IP 地址、端口号和运行 ID(runid)。
  • 每个 Sentinel 都订阅了被它监督的所有主服务器和从服务器的频道,查找之前未呈现过的 sentinel。当一个 Sentinel 发现一个新的 Sentinel 时,它会将新的 Sentinel 增加到一个列表中。
  • Sentinel 发送的信息中还包含残缺的主服务器以后配置。如果一个 Sentinel 蕴含的主服务器配置比另一个 Sentinel 发送的配置要旧,那么这个 Sentinel 会立刻降级到新配置上。
  • 在将一个新 Sentinel 增加到监督主服务器的列表下面之前,Sentinel 会先查看列表中是否曾经蕴含了和要增加的 Sentinel 领有雷同运行 ID 或者雷同地址(包含 IP 地址和端口号)的 Sentinel,如果是的话,Sentinel 会先移除列表中已有的那些领有雷同运行 ID 或者雷同地址的 Sentinel,而后再增加新 Sentinel

故障转移

一次故障转移操作由以下步骤组成:

  • 发现主服务器曾经进入主观下线状态。
  • 对咱们的以后纪元进行自增,并尝试在这个纪元中入选。
  • 如果入选失败,那么在设定的故障迁徙超时工夫的两倍之后,从新尝试入选。如果入选胜利,那么执行以下步骤。
  • 选出一个从服务器,并将它降级为主服务器。
  • 向被选中的从服务器发送 SLAVEOF NO ONE 命令,让它转变为主服务器。
  • 通过公布与订阅性能,将更新后的配置流传给所有其余 Sentinel,其余 Sentinel 对它们本人的配置进行更新。
  • 向已下线主服务器的从服务器发送 SLAVEOF 命令,让它们去复制新的主服务器。
  • 当所有从服务器都曾经开始复制新的主服务器时,领头 Sentinel 终止这次故障迁徙操作。

作者:顷刻之余
https://my.oschina.net/u/3995…

退出移动版