Redis高可用与Sentinel灾备切换案例

1.高可用介绍

1.1 高可用概念

高可用HA(High Avaitalabilty) 是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间。

1.2 通过几大要点来解释高可用?

单机是高可用的大敌,应该尽量在系统设计过程中避免单点保证系统高可用,架构设计的核心准则是:冗余每次出现故障需要人工介入,恢复势必会增加系统的不可服务实践,实现自动故障转移。

一般互联网访问啊,或者部署分层都是下图这样表示的!

  1. 客户端访问是以域名方式访问
  2. dns解析域名,返回ip
  3. 通过nginx进行代理,访问应用服务。
  4. 应用服务可以访问缓存,也可访问数据库。

 那么上面这个图哪里可以用高可用呢?

首先,dns本身就是高可用,因为dns解析的时候是需要浏览器解析,然后找到本机是否配置,实在不行也会联网到域名中心配置。

1.[客户端层]到[反向代理层]的高可用,是通过反向代理层的冗余实现的,以nginx为例:有两台nginx,一台对线上提供服务,另一台冗余以保证高可用,常见的实践是keepalived存活探测。

2.[反向代理层]到[WEB应用]的高可用,是通过站点层的冗余来实现的,假设反向代理层是nginx,nginx.conf层能够配置多个web后端,并且nginx能够探测到多个后端的存活性。自动故障转移:当web-server挂了的时候,nginx能够探测到会自动进行故障转移,将流量自动迁移到其他的web-server,整个过程由nginx自动完成,对调用方是透明的。

3.[服务层]到[缓存层]的高可用,是通过缓存数据的冗余来实现的,redis天生支然支持主从同步,redis官方也有sentinel哨兵机制,来做redis的存活性探测。

4.[服务层]到[数据库层]的高可用,数据库层用“主从同步,读写分离”架构,所以数据层的高可用,又分为“读库高可用”和“写库高可用”两类,读库采用冗余的方式实现高可用,写库采用keepalive存活探测。

主要讲讲redis的高可用。

这里边是1主3从,server1写数据,其他server负责复制数据,那么Sentinel系统负责监控所有的节点,比如1秒就会给每个节点发送ping,如果返回Pong那就证明此节点是可用的,如果不可用Sentinel会对某节点摘除。

2.手动灾备切换

如果主节点意外宕机,那程序就无法正常使用,此时我们演示一下手动操作切换,再来演示下Sentinel自动切换。

首先按照上一章主从复制把redis集群启动起来,然后进入主节点进行连接,redis-cli.exe -p 6379

输入info replication 查看集群信息

role:角色是(master)主节点

connected_slaves:从节点连接数是2个

slave0:第1个从节点是某个ip下的端口号是6380

slave1:第2个从节点是某个ip下的端口号是6381

此时我把6379的主节点关掉,也就变成没有主节点没有了写的功能,那么我们手动的把从节点6380变为主节点,用slaveof no one命令

使用slaveof no one 就是停止本从服务器复制功能,并且将从服务器转换为主服务器角色的功能指令。

 使用完此命令以后用info replication命令查看信息发现从节点已经变成了主节点,然后没有从节点

我们打开从节点6381的集群信息,角色还是从节点,那么此时从节点还会依赖之前宕机的主节点,所以需要手动切换为新的主节点6380的从节点。

使用slaveof ip port (ps:主节点ip和端口) 用了这个命令从节点依赖的就是新的主节点了,此时查看主节点集群就是展示的有一个6381的的从节点了。

以上我们演示了出现故障手动操作集群保障可用的过程,但是我们不能时时刻刻去操控或者是盯着出现问题去修改的,所以我们会使用Sentinel工具。

3.Sentinel灾备切换

Sentinel是监控redis系统高可用的,主节点因为意外情况宕机,从节点不能写操作只能读操作,那么怎么能让从节点做主节点的工作呢?换句话说怎么让从节点变成主节点呢?Sentinel英文是哨兵,哨兵的意思就是监视,其实还有就是出现故障了我们要提醒操作员主从切换了,并且还要自动转移故障,把故障的节点摘除掉,选择其他从节点进行转移。

首先咱们先来恢复下环境,把6379的redis打开,此时可以用命令看,虽然显示master但此时已经和集群没有关系了,我们把6380和6381从新变为6379的从节点,依次使用slaveof 127.0.0.1 6379 

此时再次查看6379的话就可以发现有两个从节点了

 我们在主节点的Redis的配置下新增Sentinel配置文件,名字为sentinel-master.conf

sentinel-master.conf 文件内容为:

port 16379
sentinel monitor mymaster 127.0.0.1 6379 1
sentinel down-after-milliseconds mymaster 10000
sentinel failover-timeout mymaster 60000 

sentinel  parallel-syncs mymaster 1

然后到指定目录启动sentinel,命令为:redis-server.exe sentinel-master.conf --sentinel

sentinel 监控的是6379主节点,同时也知道了6380和6381的从节点。

3.1 Sentinel命令讲解

 sentinel monitor mymaster 127.0.0.1 6379 1 

这句命令的意思是:监控主服务器,名称为mymaster是主节点名称,也可以起任意名称,1表示将这个主服务器判断为失效至少2个Sentinel同意,(只要同意sentinel的数量不达标,自动故障迁移就不会执行)

一般集群redis是3主3从或3主6从,因为不同的机器,3主就是3个服务器,就需要3个sentinel 文件,所以注意sentinel 名称不要重复,那么这个时候我们同意sentinel 故障的转移数量就可以设置2个同意就可以进行故障转移

sentinel down-after-milliseconds mymaster 10000

这句命令的意思是:指定了Sentinel认为服务器已经断线所需的毫秒数

sentinel failover-timeout mymaster 60000

这句命令的意思是:我们有主观下线,还有客观下线,这个就是客观下线,我们要进行投票,选择的毫秒时

sentinel  parallel-syncs mymaster 1

指定了在执行故障转移时,最多有多少个从服务器同时对新的主服务器进行同步,这个数字越小,完成故障转移的所需的时间就越短。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值