Redis哨兵-实现Redis高可用

上一篇文章的内容是redis的主从复制,当一个主结点挂后,从节点可以通过执行命令 replicaof no one 主节点的切换,这里我们主要是实现自动切换,采用哨兵机制(Redis Sentinel)

架构图

Redis哨兵-实现Redis高可用_第1张图片

Sentinel的功能列表:

  1. 监控(Monitoring):Sentinel不断的去检查你的主从实例是否按照预期在工作。
  2. 通知(Notification):Sentinel可以通过一个api来通知系统管理员或者另外的应用程序,被监控的Redis实例有一些问题
  3. 自动故障转移(Automatic failover):如果一个主节点没有按照预期工作,Sentinel会开始故障转移过程,把一个从节点提升为主节点,并重新配置其他的从节点使用新的主节点,使用Redis服务的应用程序在连接的时候也被通知新的地址。
  4. 配置提供者(Configuration provider):Sentinel给客户端的服务发现提供来源:对于一个给定的服务,客户端连接到Sentinels来寻找当前主节点的地址。当故障转移发生的时候,Sentinels将报告新的地址。

Sentinel的分布式特性

Redis Sentinel是一个分布式系统,Sentinel运行在有许多Sentinel进程互相合作的环境下,它本身就是这样被设计的。有许多Sentinel进程互相合作的优点如下:

  1. 当多个Sentinel同意一个master不再可用的时候,就执行故障检测。这明显降低了错误概率。
  2. 即使并非全部的Sentinel都在工作,Sentinel也可以正常工作,这种特性,让系统非常的健康。

配置文件说明:

sentinel 的配置文件位置:在redis的源码目录
Redis哨兵-实现Redis高可用_第2张图片

port 26379    //端口
sentinel monitor mymaster 127.0.0.1 6381 2  //监控一个叫做mymaster的主节点,地址是 127.0.0.1 端口号是6379,并且有2个仲裁机器(有两个sentinel判定redis挂了,redis就会认为是挂了)
sentinel down-after-milliseconds mymaster 60000 // 这个时间内一旦我们不能收到回复,主节点将发现失败。

实际操作:

将sentinel的配置文件我们copy3份到redistest目录(防止影响正在运行的redis实例)

Redis哨兵-实现Redis高可用_第3张图片

修改三个实例的配置文件

1.修改端口
Redis哨兵-实现Redis高可用_第4张图片
2. 指定主节点
在这里插入图片描述

启动主节点和从节点

# 启动redis的命令
redis-server ./6379.conf  start|start|stop
#启动命令
redis-sentinel ./26379
ps -fe | grep sentinel  
kill -9 进程

启动6379(主节点)
Redis哨兵-实现Redis高可用_第5张图片
启动6380
Redis哨兵-实现Redis高可用_第6张图片
启动6381
Redis哨兵-实现Redis高可用_第7张图片
启动sentinel集群

启动26379
Redis哨兵-实现Redis高可用_第8张图片
启动26380
Redis哨兵-实现Redis高可用_第9张图片
启动26381
Redis哨兵-实现Redis高可用_第10张图片
从配置文件中可看出: 每个sentinel几点之间是保持通信的,与主节点通过发布订阅的模式进行通信,主节点上有从节点和sentinl的信息
在主节点上执行请阅命令
Redis哨兵-实现Redis高可用_第11张图片

sentinel的api

SENTINEL masters 展示监控的主节点和它们的状态列表
SENTINEL master 展示指定的主节点的信息
SENTINEL salves 展示这个主节点的从节点,以及它们的状态
SENTINEL sentinels 展示这个主节点的sentinel实例,以及它们的状态
SENTINEL get-master-addr-by-name 返回主节点的IP和端口号。如果这个主节点的一次故障转移正在进行,就返回提升的从节点的IP和端口号

Redis哨兵-实现Redis高可用_第12张图片
Redis哨兵-实现Redis高可用_第13张图片

在这里插入图片描述

故障转移

n/2+1的sentinel几点在60秒内没有收到主节点的消息,则判定主节点挂了,然后再从节点中选举一个从节点升级为主节点,然后进行数据同步

我们停止6379redia实例, 观察sentinel的输出日志
在这里插入图片描述
查询目前的主节点
在这里插入图片描述

你可能感兴趣的:(redis,redis)