03-Redis哨兵

Redis哨兵
目的:实现系统的高可用,基于主从复制
哨兵的工作流程
 1、每秒给master发送一次ping命令,master回复pong命令
 2、经历主观下线和客观下线
 只有经历客观下线,才能确定master出现故障
 3、哨兵的领导者选举
 第一次发现主观下线那个哨兵负责故障转移
 4、哨兵领导者负责故障转移

哨兵故障转移演示
 1、先搭建主从
 2、再搭建哨兵

1、什么是高可用 高并发、分布式、集群、微服务

它与被认为是不间断操作的容错技术有所不同。是目前企业防止核心系统因故障而无法工作的最有效保护手段

高可用一般指服务的冗余,一个服务挂了,可以自动切换到另外一个服务上,不影响客户体验

2、多种模式对比

主从复制,若主节点出现问题,则不能提供服务,需要人工修改配置将从变主

主从复制主节点的写能力单机,能力有限

单机节点的存储能力也有限

3、主从故障如何故障转移

主节点(master)故障,从节点slave-1端执行 slaveof no one后变成新主节点

其它的节点成为新主节点的从节点,并从新节点复制数据

需要人工干预,无法实现高可用

4、哨兵机制(sentinel)的高可用

原理:当主节点出现故障时,由Redis Sentinel自动完成故障发现和转移,并通知应用方,实现高可用性。

5、哨兵机制的三个定时监控任务作用:心跳

哨兵有三个定时监控任务完成对各节点的发现和监控。

6、哨兵主观下线和客观下线

(1)主观下线

主观下线后,不准确,不会做故障转移 

(2)客观下线

7、领导者哨兵选举流程 zookeeper

 

8、哨兵机制-故障转移流程

由Sentinel节点定期监控发现主节点是否出现了故障

sentinel会向master发送心跳PING来确认master是否存活,如果master在“一定时间范围”内不回应PONG 或者是回复了一个错误消息,那么这个sentinel会主观地(单方面地)认为这个master已经不可用了

当主节点出现故障,此时假设3个Sentinel节点共同选举了Sentinel3节点为领导者sentinel,负载处理主节点的故障转移

由Sentinel3领导者节点执行故障转移,过程和主从复制一样,但是自动执行

故障转移后的拓扑结构图

9、哨兵演示

9.1 先搭主从

先搭建好一主两从redis的主从复制,和之前复制的搭建一样,搭建方式如下:
A主节点6379节点(/usr/local/bin/conf/redis6379.conf):
      修改 requirepass 12345678    protected-mode no
B从节点redis6380.conf和redis6381.conf:
      修改 requirepass 12345678    protected-mode no
      加上masterauth 12345678 ,加上slaveof 192.168.42.111 6379
注意:当主从起来后,主节点可读写,从节点只可读不可写

9.2 再搭哨兵

redis sentinel哨兵机制配置(也是3个节点):
   /usr/local/bin/conf/sentinel_26379.conf  
   /usr/local/bin/conf/sentinel_26380.conf
   /usr/local/bin/conf/sentinel_26381.conf
将三个文件的端口改成: 26379   26380   26381
sentinel monitor mymaster 192.168.42.111 6379 2  //监听主节点6379
sentinel auth-pass mymaster 12345678     //连接主节点时的密码
protected-mode no
配完此脚本,哨兵机制可正常启动运行。
sentinel monitor mymaster 192.168.42.111 6379 2  //监控主节点的IP地址端口
sentinel auth-pass mymaster 12345678  //sentinel连主节点的密码
sentinel config-epoch mymaster 2      //执行故障转移时, 最多可以有多少个从节点同时对新的主节点进行数据同步
sentinel leader-epoch mymaster 2
sentinel failover-timeout mymaster 180000 //故障转移超时时间180s,                         
    a,如果转移超时失败,下次转移时时间为之前的2倍;
    b,从节点变主节点时,从节点执行slaveof no one命令一直失败的话,当时间超过180S时,则故障转移失败
    c,从节点复制新主节点时间超过180S转移失败
sentinel down-after-milliseconds mymaster 300000//sentinel节点定期向主节点ping命令
启动sentinel服务:
            ./redis-sentinel conf/sentinel_26379.conf &
            ./redis-sentinel conf/sentinel_26380.conf &
            ./redis-sentinel conf/sentinel_26381.conf &

猜你喜欢

转载自blog.csdn.net/qq_45037155/article/details/124901284
今日推荐