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

posted @ 2021-08-04 11:30  有梦想的肥宅  阅读(241)  评论(0编辑  收藏  举报