zoukankan      html  css  js  c++  java
  • Redis(五)Redis的高可用方案【哨兵】

     文章更新时间:2021/08/06

     一、哨兵架构

    架构图

    • sentinel哨兵是特殊的redis服务,不提供读写服务,主要用来监控redis实例节点。
    • 哨兵架构下客户端第一次需要从哨兵找出redis的主节点
    • 后续就直接访问redis的主节点,不会每次都通过 sentinel代理访问redis的主节点
    • 当redis的主节点发生变化,哨兵会第一时间感知到,并且将新的redis主节点通知给客户端

      PS:这里面redis的客户端一般都实现了订阅功能,订阅sentinel发布的节点变动消息

    构建步骤

    1、创建一个新的目录,模拟用【从根目录开始演示】
    cd zhTools/redis-5.0.3/zhRedisDemo
    mkdir sentinel #创建主从模式的目录
    cd sentinel 
    mkdir 26380 #用于存放6380端口的数据【哨兵1】
    mkdir 26381 #用于存放6381端口的数据【哨兵2】
    mkdir 26382 #用于存放6381端口的数据【哨兵3】
    
    2、把redis的哨兵文件复制3份分别放到对应的目录下【从根目录开始演示】
    cd zhTools/redis-5.0.3
    cp sentinel.conf zhRedisDemo/sentinel/26380/sentinel-26380.conf
    cp sentinel.conf zhRedisDemo/sentinel/26381/sentinel-26381.conf 
    cp sentinel.conf zhRedisDemo/sentinel/26382/sentinel-26382.conf 
    
    3、进入26380目录,并修改sentinel-26380.conf【另外两台配置类似】
    port 26380 #端口
    daemonize yes #守护线程方式启动【后台运行】
    pidfile "/var/run/redis‐sentinel‐26380.pid" #把pid进程号写入pidfile配置的文件
    logfile "26380.log" #日志文件存放在当前目录
    dir /root/zhTools/redis-5.0.3/zhRedisDemo/sentinel/26380/data # 指定数据存放目录
    sentinel monitor mymaster 120.24.58.161 26380 2 #配置监控的主机ip,mymaster这个名字随便取,客户端访问时会用到。
    PS:最后的2表示明当有多少个sentinel认为一个master失效时,master才算真正失效(值一般为:sentinel总数/2 + 1) sentinel auth-pass mymaster xxxxxxx #如果主节点设置了密码,需要设置这个属性
    PS:sentinel不能分别为master和slave设置不同的密码,因此master和slave的密码应该设置相同。
    4、使用配置文件分别启动3个哨兵 redis‐sentinel sentinel‐26380.conf redis‐sentinel sentinel‐26381.conf redis‐sentinel sentinel‐26382.conf 5、连接上哨兵,即可查看集群信息是否搭建完成 redis‐cli ‐p 26380 127.0.0.1:26380>info

     

      PS:当哨兵启动后,集群相关的信息会被写到哨兵的配置文件里面。

    二、使用哨兵架构需要注意的一些事情

    哨兵概念

      哨兵其实也是redis实例,只不过不提供读写服务,主要用来监控redis实例节点

      哨兵一般配单数(半数选举机制)

    半数选举机制

      半数选举机制主要指的是:

    • 1、当哨兵监控的主节点挂了,那么必须有一半以上的哨兵认为当前主节点挂了,才会真正开始选举新的主节点
    • 2、当开始选举新的主节点时,从节点必须得到一半以上的哨兵“投票”,才能成为新的主节点

      PS:哨兵全部挂了,则集群瘫痪,无法访问。

    访问瞬断

      由于网络波动或者其他原因发生网络访问瞬断时,redis会开始检测主节点信息,如果通过半数确认redis挂了,则哨兵会去选举新的主节点,在选举期间redis无法提供服务

    主节点访问问题

      由于哨兵模式下从节点会去拉取主节点的数据,主节点一般配置不超过10个G,因为太大了会影响同步时的效率。

    三、Redis哨兵选举原理分析【重点理解哈~】

    • 1、当一个master服务器被某sentinel视为下线状态后,该sentinel会与其他sentinel协商选出sentinel的leader进行故障转移工作【相当于sentinel的master】
    • 2、每个发现master服务器进入下线的sentinel都可以要求其他sentinel选自己为sentinel的leader,选举是先到先得【sentinel开始竞争当leader~】
    • 3、同时每个sentinel每次选举都会自增配置纪元(选举周期)【currentEpoch】,每个纪元中只会选择一 个sentinel的leader【每次选举只有一个Leader~】
    • 4、如果所有超过一半的sentinel选举某sentinel作为leader。之后该sentinel进行故障转移操作,从存活的slave中选举出新的master【sentinel的leader去给slave选出新的老大当master~】
    • 5、如果哨兵集群只有一个哨兵节点,redis的主从也能正常运行以及选举master,如果master挂了,那唯一的那个哨兵节点就是哨兵leader了,也可以正常选举新master【只有一个sentinel那就不用选了,它自己就是leader】

      PS:为了高可用一般都推荐至少部署三个哨兵节点。【奇数原理会在后面的集群篇重点解释,先有一个概念】

  • 相关阅读:
    React-Native: bios打开VT-x选项
    React-Native:解决真机调试时候Could not get BatchedBridge, make sure your bundle is packaged properly
    node.js异步编程的几种模式
    第29章 电容触摸屏—触摸画板
    第28章 LTDC—液晶显示中英文
    第27章 LTDC/DMA2D—液晶显示
    第26章 FMC—扩展外部SDRAM
    第25章 串行FLASH文件系统FatFs
    第24章 QSPI—读写串行FLASH
    第23章 I2C—读写EEPR
  • 原文地址:https://www.cnblogs.com/riches/p/15095445.html
Copyright © 2011-2022 走看看