zoukankan      html  css  js  c++  java
  • 哨兵模式

    一、哨兵模式

    1.主要功能

    哨兵主要功能有两点:
      a、监控所有节点数据库是否在正常运行。
      b、master数据库出现故障时,可以自动通过投票机制,从slave节点中选举新的master,实现将从数据库转换为主数据库的自动切换。
    Master-Slave切换后,master_redis.conf、slave_redis.conf和sentinel.conf的内容都会发生改变,即master_redis.conf中会多一行slaveof的配置,sentinel.conf的监控目标会随之调换。

    Redis的哨兵系统用于管理多个 Redis 服务器,该系统执行以下三个任务:
      a、监控(Monitoring): 哨兵(sentinel) 会不断地检查你的Master和Slave是否运作正常。
      b、提醒(Notification):当被监控的某个 Redis出现问题时, 哨兵(sentinel) 可以通过 API 向管理员或者其他应用程序发送通知。
      c、自动故障迁移(Automatic failover):当一个Master不能正常工作时,哨兵(sentinel) 会开始一次自动故障迁移操作,它会将失效Master的其中一个Slave升级为新的Master, 并让失效Master的其他Slave改为复制新的Master; 当客户端试图连接失效的Master时,集群也会向客户端返回新Master的地址,使得集群可以使用Master代替失效Master。

    2.工作方式

    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)节点会每秒一次的频率向建立了命令连接的实例发送PING命令,如果在down-after-milliseconds毫秒内没有做出有效响应包括(PONG/LOADING/MASTERDOWN)以外的响应,哨兵就会将该实例在本结构体中的状态标记为SRI_S_DOWN主观下线
    客观下线
    当一个哨兵节点发现主节点处于主观下线状态是,会向其他的哨兵节点发出询问,该节点是不是已经主观下线了。如果超过配置参数quorum个节点认为是主观下线时,该哨兵节点就会将自己维护的结构体中该主节点标记为SRI_O_DOWN客观下线

    3.优缺点

    优点:高可用,在主节点故障时能实现故障的转移
    缺点:
      1)好像没办法做到水平拓展,如果内容很大的情况下。
      2)主从服务器的数据要经常进行主从复制,这样造成性能下降。
      3)当主服务器宕机后,从服务器切换成主服务器的那段时间,服务是不能用的。

    二、哨兵模式的读写分离

    哨兵模式下,客户端一般会保持两种连接,与哨兵的连接,以及master的连接。数据操作当然使用master连接,如果master出故障了,可以通过与哨兵的连接来获取master的最新地址。

    一般的客户端连接流程如下:

      1.连接哨兵,根据master的名称获取master的ip和port。

      2.通过ip和port连接master。

    另外,有一些公司自己封装了redis客户端,可以通过哨兵获得master及其slaves,采用读写分离,读slaves,写master。

    三、搭建哨兵模式

    需要先有主从环境,前面已经搭配了1主2从的主从环境。

    1.sentinel搭建过程

    mkdir /data/26380
    cd /data/26380
    vim sentinel.conf
    port 26380
    dir "/data/26380"
    sentinel monitor mymaster 127.0.0.1 6380 1           #1表示sentinel个数,当有超大型redis集群,有多个sentinel的时候,有1个sentinel认为某个redis master宕机了,则表示它宕机了,切换主从
    sentinel down-after-milliseconds mymaster 5000      #主库宕机5000毫秒,开始切换
    sentinel auth-pass mymaster 123456 
    
    启动:
    [root@db01 26380]# redis-sentinel /data/26380/sentinel.conf  &>/tmp/sentinel.log &
    
    如果有问题:
    1)重新准备1主2从环境
    2)kill掉sentinel进程
    3)删除sentinel目录下的所有文件
    4)重新搭建sentinel
    View Code

    2.搭建完成后,测试

    redis-cli -p 6380 -a 123456 shutdown
    redis-cli -p 6381 -a 123456 info replication 
    
    启动源主库(6380),看状态。
    redis-server /data/6380/redis.conf
    redis-cli -p 6380 -a 123456 info replication 
    
    Sentinel管理命令:
    redis-cli -p 26380
    PING :返回 PONG 。
    SENTINEL masters :列出所有被监视的主服务器
    SENTINEL slaves <master name> 
    
    SENTINEL get-master-addr-by-name <master name> : 返回给定名字的主服务器的 IP 地址和端口号。 
    SENTINEL reset <pattern> : 重置所有名字和给定模式 pattern 相匹配的主服务器。 
    SENTINEL failover <master name> : 当主服务器失效时, 在不询问其他 Sentinel 意见的情况下, 强制开始一次自动故障迁移。
    View Code
  • 相关阅读:
    残疾流浪歌手的令人陶醉的声音
    关于浏览器参数的获取
    项目开发文档模板
    scoped_ptr源码
    从逗号分隔的字符串中删除某个子串的js函数
    合并两个数组的js函数
    comutil.h移值(_com_error,_bstr_t,_variant_t类的移值)
    判断两个对象是否相等的js函数
    托管可执行文件的结构(The Structure of a Managed Executable File)
    访问cookie的js函数
  • 原文地址:https://www.cnblogs.com/xufengnian/p/11920633.html
Copyright © 2011-2022 走看看