美文网首页redis
redis Sentinel(哨兵)架构下的高可用

redis Sentinel(哨兵)架构下的高可用

作者: 宇晨棒棒的 | 来源:发表于2020-05-18 11:16 被阅读0次

    1.哨兵模式简单介绍

    Redis Sentinel是一个分布式架构,其中包含若干个Sentinel节点和Redis数据节点,每个Sentinel节点会对数据节点和其余Sentinel节点进行监控,当它发现节点不可达时,会对节点做下线标识。

    如果被标识的是主节点,它还会和其他Sentinel节点进行“协商”,当大多数Sentinel节点都认为主节点不可达时,它们会选举出一个Sentinel节点来完成自动故障转移的工作,同时会将这个变化通知给Redis应用方。整个过程完全是自动的,不需要人工来介入,所以这套方案很有效地解决了Redis的高可用问题。

    哨兵架构图

    2.Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务

    1)监控任务:

    A.每隔10秒,每个Sentinel节点会向主节点和从节点发送info命令获取最新的拓扑结构。

    B.每隔2秒,每个Sentinel节点会向Redis数据节点的__sentinel__:hello频道上发送该Sentinel节点对于主节点的判断以及当前Sentinel节点的信息,同时每个Sentinel节点也会订阅该频道,来了解其他Sentinel节点以及它们对主节点的判断。

    C.每隔一秒,每个Sentinel节点会向主节点、从节点、其余Sentinel节点发送一条ping命令做一次心跳检测,来确认这些节点当前是否可达。

    2)提醒(Notification): 

    A.主观下线:因为每隔一秒,每个Sentinel节点会向主节点、从节点、其余Sentinel节点发送一条ping命令做一次心跳检测,当这些节点超过down-after-milliseconds没有进行有效回复,Sentinel节点就会对该节点做失败判定,这个行为叫做主观下线

    B.客观下线:当Sentinel主观下线的节点是主节点时,该Sentinel节点会向其他Sentinel节点询问对主节点的判断,当超过<quorum>个数,那么意味着大部分的Sentinel节点都对这个主节点的下线做了同意的判定,于是该Sentinel节点认为主节点确实有问题,这时该Sentinel节点会做出客观下线的决定。

    C.领导者Sentinel节点选举

    假设s1(sentinel-1)最先完成客观下线,它会向其余Sentinel节点发送命令,请求成为领导者;收到命令的Sentinel节点如果没有同意过其他Sentinel节点的请求,那么就会同意s1的请求,否则拒绝;如果s1发现自己的票数已经大于等于某个值,那么它将成为领导者

    3)自动故障迁移(Automatic failover): 

    当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器

    哨兵故障迁移

    实现哨兵模式:

    1.基础环境:一个master和两个slave的基础架构

    2.配置哨兵模式

    cp /usr/local/src/redis-4.0.12/sentinel.conf  /usr/local/redis/sentinel.conf 

    默认端口:26379

    3.配置三个哨兵:

    cp sentinel.conf  sentinel27000.conf

    cp sentinel.conf  sentinel27001.conf

    修改配置文件(sentinel27000.conf和sentinel27000.conf依据下面的配置文件):

    port 26379

    bind 0.0.0.0

    logfile "/usr/local/redis/log/sentinel-${port}.log"

    dir /usr/local/redis/sentinel

    sentinel monitor mymaster 127.0.0.1 6379 2

    sentinel down-after-milliseconds mymaster 30000

    sentinel parallel-syncs mymaster 1

    // 180 秒后开始故障自动装换

    sentinel failover-timeout mymaster 180000

    sentinel deny-scripts-reconfig yes

    参数解释:

    1)down-after-milliseconds 选项指定了 Sentinel 认为服务器已经断线所需的毫秒数。

    如果服务器在给定的毫秒数之内, 没有返回 Sentinel 发送的 PING 命令的回复, 或者返回一个错误, 那么 Sentinel 将这个服务器标记为主观下线(subjectively down,简称 SDOWN )

    2)parallel-syncs 选项指定了在执行故障转移时, 最多可以有多少个从服务器同时对新的主服务器进行同步, 这个数字越小, 完成故障转移所需的时间就越长

    3)sentinel monitor 自定义的主节点名称 主节点的 IP 主节点端口 票数

    票数是指最少有n个Sentinel 实例同意一台 redis 服务器宕机,才会认为 客观下线

    4.启动哨兵:

    /usr/local/redis/bin/redis-sentinel /usr/local/redis/sentinel.conf

    /usr/local/redis/bin/redis-sentinel /usr/local/redis/sentinel27000.conf

    /usr/local/redis/bin/redis-sentinel /usr/local/redis/sentinel27001.conf

    5.查看sentinel的状态:

    /usr/local/redis/bin/redis-cli -p 26379/27001/27000

    执行info sentinel

    查看sentinel的状态

    6.关闭master查看哨兵状态

    master进程

    kill -9  19340

    查看哨兵状态:(不断的刷新其中一个 Sentinel 节点的信息,观察最后一行信息的变化)

    master的ip发生的变化

    6.如果原先master恢复,此时的master的ip不会发生变化

    相关文章

      网友评论

        本文标题:redis Sentinel(哨兵)架构下的高可用

        本文链接:https://www.haomeiwen.com/subject/sltxohtx.html