Redis主动哨兵模式搭建
在 Redis 主从复制模式中,因为系统不具备自动恢复的功能,所以当主服务器(master)宕机后,需要手动把一台从服务器(slave)切换为主服务器。在这个过程中,不仅需要人为干预,而且还会造成一段时间内服务器处于不可用状态,同时数据安全性也得不到保障,因此主从模式的可用性较低,不适用于线上生产环境。
Redis 官方推荐一种高可用方案,也就是 Redis Sentinel 哨兵模式,它弥补了主从模式的不足。Sentinel 通过监控的方式获取主机的工作状态是否正常,当主机发生故障时, Sentinel 会自动进行 Failover(即故障转移),并将其监控的从机提升主服务器(master),从而保证了系统的高可用性。
Redis哨兵模式原理
哨兵是Redis的一种运行模式,它专注于对Redis实例(主节点、从节点)运行状态的监控,并能够在主节点发生故障时通过一系列的机制实现选主及主从切换,实现故障转移,确保整个Redis系统的可用性。Redis哨兵具备的能力有如下几个:
- 监控(Monitoring):持续监控Redis主节点、从节点是否处于预期的工作状态。
- 通知(Notification):哨兵可以把Redis实例的运行故障信息通过API通知监控系统或者其他应用程序。
- 自动故障恢复(Automatic failover):当主节点运行故障时,哨兵会启动自动故障恢复流程:某个从节点会升级为主节点,其他从节点会使用新的主节点进行主从复制,通知客户端使用新的主节点进行。
- 配置中心(Configuration provider):哨兵可以作为客户端服务发现的授权源,客户端连接到哨兵请求给定服务的Redis主节点地址。如果发生故障转移,哨兵会通知新的地址。这里要注意:哨兵并不是Redis代理,只是为客户端提供了Redis主从节点的地址信息。
哨兵模式是天然的分布式系统,它被设计为基于一套配置,并在多个哨兵实例的配合下工作。多实例共同协作有以下优势:
- 主节点的系统故障是在多个实例共同认可的情况下完成的,大大降低了误报的概率。
- 即使不是所有的哨兵实例都正常运行哨兵集群也能正常工作,这大大增加了系统的健壮性。
使用 Sentinel 搭建 Redis 集群,基本结构图如下所示:
在上图过程中,哨兵主要有两个重要作用:
- 第一:哨兵节点会以每秒一次的频率对每个 Redis 节点发送
PING
命令,并通过 Redis 节点的回复来判断其运行状态。 - 第二:当哨兵监测到主服务器发生故障时,会自动在从节点中选择一台将机器,并其提升为主服务器,然后使用 PubSub 发布订阅模式,通知其他的从节点,修改配置文件,跟随新的主服务器。
在实际生产情况中,Redis Sentinel 是集群的高可用的保障,为避免 Sentinel 发生意外,它一般是由 3~5 个节点组成,这样就算挂了个别节点,该集群仍然可以正常运转。其结构图如下所示:
上图所示,多个哨兵之间也存在互相监控,这就形成了多哨兵模式,现在对该模式的工作过程进行讲解,介绍如下:
- 主观下线
主观下线,适用于主服务器和从服务器。如果在规定的时间内(配置参数:down-after-milliseconds
),Sentinel 节点没有收到目标服务器的有效回复,则判定该服务器为“主观下线”。比如 Sentinel1 向主服务发送了PING
命令,在规定时间内没收到主服务器PONG
回复,则 Sentinel1 判定主服务器为“主观下线”。
- 客观下线
客观下线,只适用于主服务器。 Sentinel1 发现主服务器出现了故障,它会通过相应的命令,询问其它 Sentinel 节点对主服务器的状态判断。如果超过半数以上的 Sentinel 节点认为主服务器 down 掉,则 Sentinel1 节点判定主服务为“客观下线”。
- 投票选举
投票选举,所有 Sentinel 节点会通过投票机制,按照谁发现谁去处理的原则,选举 Sentinel1 为领头节点去做 Failover(故障转移)操作。Sentinel1 节点则按照一定的规则在所有从节点中选择一个最优的作为主服务器,然后通过发布订功能通知其余的从节点(slave)更改配置文件,跟随新上任的主服务器(master)。至此就完成了主从切换的操作。
对上对述过程做简单总结:
Sentinel 负责监控主从节点的“健康”状态。当主节点挂掉时,自动选择一个最优的从节点切换为主节点。客户端来连接 Redis 集群时,会首先连接 Sentinel,通过 Sentinel 来查询主节点的地址,然后再去连接主节点进行数据交互。当主节点发生故障时,客户端会重新向 Sentinel 要地址,Sentinel 会将最新的主节点地址告诉客户端。因此应用程序无需重启即可自动完成主从节点切换。
Redis主从哨兵规划
本文安装使用3台服务器,共1主2从3哨兵,涉及服务器的复用
IP | 角色1 | 端口1 | 角色2 | 端口2 | 角色3 | 端口3 |
---|---|---|---|---|---|---|
199.188.166.111 | Redis Master | 6379 | Sentinel | 26379 | ||
199.188.166.112 | Redis Slave | 6379 | Sentinel | 26379 | ||
199.188.166.113 | Redis Slave | 6379 | Sentinel | 26379 |
Redis主从哨兵安装与配置
Redis下载
直接从官方网站下载即可:Download | Redis
示例版本
redis-7.0.4.tar.gz
安装步骤
解压
1 |
|
编译
1 |
|
安装
1 |
|
在/app/redis
下创建etc
目录存放配置文件,方便后续管理维护
1 |
|
主从配置
1 |
|
通过命令设置密码,不需要重启redis服务。连接redis之后,通过命令设置
1
config set requirepass 123456
设置之后,可通过以下指令查看密码
1config get requirepass
注:通过命令行修改了密码之后,配置文件(/etc/redis.conf)的requirepass字段后面的密码是不会随之修改的
哨兵配置
每台机器的哨兵进程都需要一个配置文件sentinel.conf
,三台机器的配置是一样的,同样放到etc
目录下
1 |
|
启动服务
1 |
|
停止服务
1 |
|
查看状态
1 |
|
Redis哨兵模式的优缺点
优点
- 哨兵模式是基于主从模式的,所有主从的优点,哨兵模式都具有。
- 主从可以自动切换,系统更健壮,可用性更高。
缺点
- 具有主从模式的缺点,每台机器上的数据是一样的,内存的可用性较低。
- Redis较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂。
拓展:为什么Redis推荐奇数节点
其实,Redis并不是只能是奇数个节点,只是推荐奇数个节点,主要原因还是处于成本考虑,因为奇数个节点和偶数个节点允许宕机的节点数是一样的,因为Redis规定:
集群中,半数以上(必须>50%,=50%也不行)节点认为主节点故障了,才会选举新的节点。
蚂蚁🐜再小也是肉🥩!
“您的支持,我的动力!觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭”
微信支付
支付宝支付