zoukankan      html  css  js  c++  java
  • Redis-sentinel 哨兵介绍

    Redis-Sentinel是redis官方推荐的高可用性解决方案,当用redis作master-slave的高可用时,如果master本身宕机,redis本身或者客户端都没有实现主从切换的功能。 
    而redis-sentinel就是一个独立运行的进程,用于监控多个master-slave集群,自动发现master宕机,进行自动切换slave > master。
     

    sentinel主要功能如下:

        1、不时的监控redis是否良好运行,如果节点不可达就会对节点进行下线标识

        2、如果被标识的是主节点,sentinel就会和其他的sentinel节点“协商”,如果其他节点也人为主节点不可达,就会选举一个sentinel节点来完成自动故障转义

        3、在master-slave进行切换后,master_redis.conf、slave_redis.conf和sentinel.conf的内容都会发生改变,即master_redis.conf中会多一行slaveof的配置,sentinel.conf的监控目标会随之调换

     

    一、部署方式

    部署方式有两种,以下任意一种都可以,建议使用第一种,比较符合大家的习惯

    redis-sentinel /path/to/sentinel.conf

    redis-server /path/to/sentinel.conf --sentinel

    二、标准配置文件

    sentinel.conf

    protected-mode外,所有的参数都可以使用默认值启动sentinel。

    重要参数解析:

    protected-mode : 保护模式;bind ip 和protected-mode至少有一个开放对外,其他服务器才能访问。虽然配置文件注释项设置为no,但是启动后会因为protected-mode=yes报错.需要将注释符号去掉

    port:此Sentinel实例运行的端口

    dir:工作目录,默认/tmp

    sentinel monitor <master-name> <ip> <redis-port> <quorum>: 哨兵监控项,master-name主节点的别名,在codis集群里就是 "集群名-group" ;ip:port即主节点ip端口;quorum代表判断主节点失败至少需要多少个Sentinel节点节点同意,默认值2

    sentinel down-after-milliseconds <master-name> <milliseconds>:每个Sentinel节点都要定期PING命令来判断Redis数据节点和其余Sentinel节点是否可达,默认30000毫秒,即超过30s且没有回复,则判定不可达。为避免误判。可增大该值

    sentinel parallel-syncs <master-name> <numreplicas>: 故障转移后,原来的从节点会向新的主节点发起复制操作,限制同时向新的主节点发起复制操作的从节点个数,默认值为1个

    sentinel failover-timeout <master-name> <milliseconds>:故障转移超时时间,默认180000毫秒,即3分钟。

     

    三、常用命令

    1、redis-cli -p 26379 info  如同Redis-server info命令;返回# Server、# Clients、# CPU、# Stats、# Sentinel几个模块的信息,其中# Sentinel如下

    除此之外还有官方文档提供的命令,如下图

    2、redis-cli -p 26379  sentinel masters 获取sentinel监控别名实例的主节点信息

    3、redis-cli -p 26379  sentinel master gtdba_test-3  获取sentinel所有的配置信息

    4、redis-cli -p 26379 SENTINEL slaves gtdba_test-3获取sentinel监控别名实例的slave节点信息

    5、redis-cli -p 26379 SENTINEL SENTINELS gtdba_test-1  获取sentinel集群别的sentinel信息

    6、redis-cli -p 26379 SENTINEL get-master-addr-by-name gtdba_test-1 获取当前别名实例的主节点ip和端口

    7、redis-cli -p 26379 sentinel reset "*gtdba_test*"  重置包含gtdba_test的主节点,清除相关信息

    8、redis-cli -p 23679 sentinel failover  gtdba_test-1 手动强制故障转移

    9、redis-cli -p 23679 sentinel ckquorum gtdba_test-1  检查可用的sentinel个数

    19、redis-cli -p 23679 sentinel flushconfig  将配置信息刷新到磁盘上。

    四、故障转移实际操作,以一次debug sleep命令来看sentinel触发的failover全过程如下

    1、本机sentinel节点确认6501无法返回心跳信息,触发Subjectively Down state状态,即本机sentinel主观认为6501节点故障

    2、达到2/2多数确认,204主机6501节点不可用,触发Objectively Down state,即多数sentinel投票客观确认6501节点故障

    3、开启新纪元(新时代)

    4、尝试failover故障转移

    5、为节点dcdb**(即204主机本机sentinel节点)发起sentinel leader故障转移投票

    6、sentinel集群另外两个sentinel节点投票给204主机sentinel节点

    7、已完成选举,sentinel leader节点可以执行failover

    8、在当前故障的主节点的副本里选择合适的节点作为主节点

    9、由于只有203:6501一个副本节点,故选择该节点作为备用主节点。

    10、原有的从节点203:6501执行slaveof no one操作,并执行promoted操作,将203:6501提升为主节点

    11、修改原有主节点的状态

    12、故障转移已完成

    13、切换主节点为新的master节点

    14、其他slave节点(包括故障节点)与主节点重建主从关系

     

    五、注意事项

    down-after-milliseconds超时时间设置需要慎重考虑,太短容易误判导致主从重置。太长则延长业务不可用时间。

    failover-timeout:故障转移超时时间也需要根据时间情况考虑是否延长或者缩短

  • 相关阅读:
    Part 3:视图和模板--Django从入门到精通系列教程
    Part 2:模型与后台管理admin站点--Django从入门到精通系列教程
    Part 1:请求与响应--Django从入门到精通系列教程
    java的static关键字
    接口
    final关键字
    抽象类
    动态绑定多态
    对象转型2
    对象转型1
  • 原文地址:https://www.cnblogs.com/chou1214/p/12482711.html
Copyright © 2011-2022 走看看