Redis高可用方案--sentinel(哨兵模式)和集群

redis高可用方案--sentinel(哨兵模式)和集群一. redis高可用方案--sentinel(哨兵模式)哨兵模式简介:sentinel工作过程:关于sentinel的三个定时任务:sentinel网络:sentinel网络故障修复原理:哨兵模式配置二. redis高可用方案--集群redis集群设计:redis集群节点分配和数据分配节点分配redis集群的主从模式redis集群搭建:一. redis高可用方案–sentinel(哨兵模式)当我们搭建好redis主从复制方案后会发现一个问题,那
摘要由CSDN通过智能技术生成

一. redis高可用方案–sentinel(哨兵模式)

当我们搭建好redis主从复制方案后会发现一个问题,那就是当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,同时在手动切过程中也会导致redis服务器写入功能不可用。所以需要一种方法可以完成Master故障后可以自动的将一个Slave切换为Master,这个时候就有了sentinel哨兵模式。

redis主从复制传送门

哨兵模式简介:

sentinel是官方提供的高可用方案,其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。同时 sentinel是一个分布式系统,可以在一个架构中运行多个Sentinel进程,可以做到sentinel的高可用。

在这里插入图片描述

sentinel工作过程:
  1. 通过向主服务器和从服务器发送ping命令,让服务器返回运行状态。
  2. 当哨兵监测到master宕机,会自动将一个slave切换成master,然后通过发布订阅模式通知其他的从服务器,修改配置文件,让它们切换主机。
关于sentinel的三个定时任务:
  1. 每1秒每个sentinel对其他sentinel和redis节点执行ping操作,心跳检测。
  2. 每10秒每个sentinel会对master和slave执行info命令,目的是发现slave结点,确定主从关系。
  3. 每2秒每个sentinel通过master节点的channel交换信息(pub/sub)。master节点上有一个发布订阅的频道(sentinel:hello)。sentinel节点通过__sentinel__:hello频道进行信息交换(对节点的"看法"和自身的信息),达成共识.
sentinel网络:

sentinel是一个分布式系统,可以在一个架构中运行多个Sentinel进程。所以监控同一个Master的Sentinel会自动连接,组成一个分布式的Sentinel网络,互相通信并交换彼此关于被监视服务器信息。

在这里插入图片描述

sentinel网络故障修复原理:
  1. 主观下线:
    当主服务器发生故障时,此时一个sentinel发现了故障,系统并不会马上进行failover过程(这个现象称为主观下线),它会向网络中的其他Sentinel进行确认。

  2. 客观下线:
    接着其他Sentinel也陆续发现故障,这个时候其中一个Sentinel就会发起投票。一定数量的哨兵(在配置文件中指定)确认Master被标记为主观下线,此时将Master标记为客观下线

3.sentinel的leader选举:
要想完成故障切换(将故障master剔除,并将一个slave提升为master)就必须先选举一个leader。最先发现故障的sentinel向其他哨兵发起请求成为leader,其他哨兵在没有同意别的哨兵的leader请求时,就会把票投给该sentinel。当半数以上的sentinel投票通过后就认定该sentinel为leader。接下来的故障切换有该leader完成。

  1. master选举:
    leader选好后将故障master剔除,从slave中挑选一个成为master。遵照的原则如下:
  • slave的优先级
  • slave从master那同步的数据量,那个slave多就优先。
  1. 新Master再通过发布订阅模式通知所有sentinel更新监控主机信息。
  2. 故障的主服务器修复后将成为从服务器继续工作。
  • 故障发生

在这里插入图片描述

  • 故障切换

在这里插入图片描述

  • Master重新上线后

在这里插入图片描述

哨兵模式配置

本实验在一台机器上完成,创建不同端口的redis实例。

主机名 ip redis服务器
redis 192.168.126.162 127.0.0.1 6380 主
redis 192.168.126.162 127.0.0.1 6381 从
redis 192.168.126.162 127.0.0.1 6382 从
  1. 创建redis实例
[root@redis ~]# nohup redis-server --port 6380 >> /data/redis/log/6380.log 2>&1 & 
[root@redis ~]# nohup redis-server --port 6381 >> /data/redis/log/6381.log 2>&1 & 
[root@redis ~]# nohup redis-server --port 6382 >> /data/redis/log/6382.log 2>&1 & 

[root@redis ~]# ps -ef |grep redis
root      16421  16314  0 03:01 pts/1    00:00:00 redis-server *:6380
root      16427  16314  0 03:01 pts/1    00:00:00 redis-server *:6381
root      16431  16314  0 03:01 pts/1    00:00:00 redis-server *:6382
root      16436  16314  0 03:01 pts/1    00:00:00 grep --color=auto redis
  1. 连接数据库并设置主从复制
[root@redis ~]# redis-cli -p 6380
127.0.0.1:6380> 

[root@
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值