文章目录
什么是高可用?
高可用 这个词一般出现于分布式系统,指通过设计减少系统不能提供服务的时间,通俗来说,系统什么时候都能用,特别NB,就是高可用。
- 假设系统一直能够提供服务,我们说系统的可用性是100%。
- 如果系统每运行100个时间单位,会有1个时间单位无法提供服务,我们说系统的可用性是99%。
- 很多公司的高可用目标是4个9,也就是99.99%,这就意味着,系统的年停机时间为8.76个小时。
Redis为何高可用?
当“高可用”这个词结合Redis,我首先会想到以下点:
- redis的多机部署
- 主从服务器之类的
- 哨兵、故障转移
- 数据丢失之后的数据同步,RDB、AOF之类的
接下来我会对这些点进行详细分析。
原因一、哨兵机制
哨兵是 redis 集群机构中非常重要的一个组件,哨兵集群会对redis集群实时三项监控,来监控节点的可用性,这是高可用的重要保障之一。
1、当一个Sentinel启动时, 它需要执行以下步骤:
- 初始化服务器。
- 将普通Redis服务器使用的代码替换成Sentinel专用代码。
- 初始化Sentinel状态。
- 根据给定的配置文件, 初始化Sentinel的监视主服务器列表。
- 创建连向主服务器的网络连接
主要有以下功能:
- 集群监控:负责监控 redis master 和 slave 进程是否正常工作。
- 消息通知:如果某个 redis 实例有故障,那么哨兵负责发送消息作为报警通知给管理员。
- 故障转移:如果 master node 挂掉了,会自动转移到 slave node 上。
- 配置中心:如果故障转移发生了,通知 client 客户端新的 master 地址。
哨兵用于实现 redis 集群的高可用,本身也是分布式的,作为一个哨兵集群去运行。
- 故障转移时,判断一个 master node 是否宕机了,需要大部分的哨兵都同意才行,涉及到了分布式选举的问题。
- 即使部分哨兵节点挂掉了,哨兵集群还是能正常工作的,因为如果一个作为高可用机制重要组成部分的故障转移系统本身是单点的,那就很坑爹了。
2、哨兵对节点的三项监控
(1)info命令:
每隔 10 秒,每个哨兵节点都会向主、从 Redis 数据节点发送 info 命令,目的是获取新的拓扑结构信息。Redis 拓扑结构信息包括了:
- 本节点角色:主或从
- 主从节点的地址
- 端口信息。
这样,哨兵节点就能从 info 命令中自动获取到从节点信息,因此那些后续才加入的从节点信息不需要显式配置就能自动感知。