zoukankan      html  css  js  c++  java
  • Redis 哨兵

    哨兵简介

    哨兵定义

    哨兵(sentinel)是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障时通过投票机制选择新的 master 并将所有 slave 连接到新的 master。

    疑问:投票规则是啥、

    哨兵作用

    • 监控
      • 不断地检查 master 和 slave 是否正常运行
      • master 存活检测、master 与 slave 运行情况检测
    • 通知(提醒)
      • 当被监控的服务器出现问题时,向其他(哨兵间、客户端)发送通知
    • 自动故障转移
      • 断开 master 与 slave 连接,选取一个 slave 作为 master,将其他 slave 连接到新的 master,并告知客户端新的服务器地址

    注意:哨兵也是一台 redis 服务器,只是不提供数据服务;通常哨兵配置数量为单数(一般很少配1个,都是3个起步,配单数是为了投票的时候不会出现票数相同的情况)

    启用哨兵模式

    配置哨兵

    • 配置一拖二的主从结构

    • 配置三个哨兵(配置相同,端口不同)

      • 参看 sentinel.conf
    • 启动哨兵

      redis-sentinel sentinel-端口号.conf

    启用哨兵操作步骤:

    1. 查看 master 服务配置,之前都配好了,确认一下

    2. 查看 slave 服务配置,之前也配置好了

    3. 配置三个哨兵

      哨兵配置文件(三个哨兵的配置相同,端口不同),sentinel-26379.conf 配置如下:

      # 端口号
      port 26379
      # 日志等信息存放目录,可以自行改动
      dir /tmp
      # mymaster 是自己起的名字,就是个称呼可以随便起
      # 最后的数字 2 代表:如果有两个哨兵认为 mymaster 主服务器挂掉,则主服务器被判定为挂掉,这个值通常设定为哨兵数量的一半+1
      sentinel monitor mymaster 127.0.0.1 6379 2
      # 主服务器连接多长时间没响应会被判定为挂掉,默认为30s(下面的3000单位是毫秒)
      sentinel down-after-milliseconds mymaster 3000
      # 当主机挂掉后,新换上来的主机数据同步并行线程数
      parallel-syncs mymaster 1
      # 新主机换上来后,数据同步时间超过 180s 就算超时
      sentinel failover-timeout mymaster 180000
      

      执行下面两条命令,生成 sentinel-26380.conf 和 sentinel-26381.conf

      sed 's/26379/26380/g' sentinel-26379.conf > sentinel-26380.conf
      sed 's/26379/26381/g' sentinel-26379.conf > sentinel-26381.conf
      
    4. 启动 master 服务

      redis-server /redis-4.0.0/conf/redis-6379.conf

    5. 启动 slave 服务

      redis-server /redis-4.0.0/conf/redis-6380.conf
      redis-server /redis-4.0.0/conf/redis-6380.conf
      
    6. 启动哨兵服务

      redis-sentinel /redis-4.0.0/conf/sentinel-26379.conf
      redis-sentinel /redis-4.0.0/conf/sentinel-26380.conf
      redis-sentinel /redis-4.0.0/conf/sentinel-26381.conf
      

      启动完成之后,就可以用哨兵客户端连接服务端进行信息查看了,连接命令和正常 reids 客户端连接命令一样,比如我们要连接端口为26379的哨兵服务:reids-cli -p 26379,哨兵客户端不支持 getset 相关的操作指令,只支持哨兵相关操作指令

    7. 测试 master slave 服务有没有问题

      在 master 服务器新的命令窗口中,执行redis-cli -p 6379连接服务,紧接着执行set name zhangsan;
      在 slave 服务器新的命令行窗口中,执行redis-cli -p 6380连接服务,紧接着执行get name如果获取到 “zhangsan”,则测试通过。

    8. 测试哨兵服务是否有效

      将原来的 master 服务停掉,等待30s(因为在哨兵配置文件中设定的时间是30s),后如果重新选出了新的 master 则测试通过。

    哨兵工作原理

    主从切换

    哨兵在进行主从切换过程中主要经历三个阶段:监控、通知、故障转移

    阶段一:监控

    阶段二:通知阶段

    哨兵之间维护一个长期信息对等的阶段

    阶段三:故障转移

    1. 先确认故障

    2. 通过投票的方式从多个哨兵中选出真正处理故障的一个哨兵。假如有 5 个哨兵,此时大家都会同时向其余哨兵进行广播,广播的时候会带上自己之前被选举出来的次数等信息,假如我是 2 号哨兵,我先收到 1 号哨兵的消息后,我会投票给 1 号,就这样进行选举,如果一轮没有选出来,还会继续下一轮,直到选出票数最高的为止

    3. 上一步中被选出来的哨兵会在多个 slave 中选出一个作为 master

      排除掉的:

      • 不在线

      • 响应慢

      • 与原 master 断开时间久的

      优先原则:

      • 优先级
      • offset: offset 小的更优先
      • runid: runid 小的更优先

      哨兵向 master(被选出来的 slave) 发送指令

      • slaveof no one 断开与原 master 的连接
      • 向其它 slave 发送 slaveof 新master_IP 新master_端口

    从哨兵服务的日志中,我们可以看到哨兵是怎么一步步完成这些操作的,每一条日志都写得很好理解。

  • 相关阅读:
    出现 could not open jvm.cfg 的解决办法
    powerdesigner相关概念理解
    UML建模类图
    LAMP环境折腾
    ThinkPHP学习笔记1
    ubuntu14在kDE界面下的关于eclipse提示框黑色背景的修改!
    LAMP环境安装与apache配置
    Unix网络编程---第四次作业
    Unix网络编程---第三次作业
    Unix网络编程---第二次作业
  • 原文地址:https://www.cnblogs.com/wuyongqiang/p/12732264.html
Copyright © 2011-2022 走看看