1.【Redis】高可用之二:哨兵(sentinel)
2.基于 Docker 搭建 Redis-Sentinel 哨兵模式集群教程
3.redis一主二从三哨兵搭建
4.Redis 哨兵模式 - 源码梳理
5.使用 Docker Compose 部署 Redis Sentinel 高可用架构
6.[redis 源码走读] sentinel 哨兵 - 脑裂处理方案
【Redis】高可用之二:哨兵(sentinel)
上一篇文章我们介绍了复制,正是由于复制的痛点,产生了哨兵(sentinel)。
什么是哨兵?哨兵会巡查监控后台master主机,查看是否存在故障。如果故障了,源码解析是什么就会根据投票数自动将某一个从库转换为新主库,继续对外服务(解决复制的痛点)。
简单来讲,哨兵就是一种无人值守的运维机制。
以下是配置Redis一主二从的步骤建议。
配置好一主二从后,将解压缩后的Redis/opt目录下的sentinel.conf 复制到自定义的aqinredis文件夹中。
接着进行相关配置修改(以上都可以按照配置Redis一主二从的文章对配置文件Redis.conf的修改)。
设置要监控的主机服务器。
下面提供需要配置的全部参数(跟着操作的同学直接拷贝即可,注意对应参数的修改)。
按本文操作的3台配置分别如下图。
启动
执行redis-sentinel启动(记得添加软连接)
依次使用各自的配置文件启动
启动成功~
查看日志
查看哨兵日志,可以看到其监控的主从信息,以及烧饼集群的信息。
原先的配置文件也会自动写入一些内容(下图红框框)。
模拟主机宕机
接下来我们模拟主机宕机。
此时有以下问题需要注意。uctcpip源码
过一段时间以后(给哨兵选举的时间)再尝试获取可以发现,原先的数据还在。
尝试插入数据,会发现上可以,不行(还是只读)。
查看下此时两台从机的信息。
我们查看下sentinel日志,看看发生了什么。
sentinel.log
sentinel.log
sentinel.log
从上面三个哨兵日志可以看到,哨兵在确认主机宕机后(我们的案例配置的quorum是2,即3个哨兵中至少有2个认为主机宕机就确认主机宕机),对从机进行了新主机的投票选举,最终决定将主机从..0.2 切换成了..0.4 。
重启..0.2 ,并查看其主从信息。
可以看到,此时变成了的从机(不会出现主机冲突)。
由于目前是从机,因此也无法进行写操作。
总结
总结我们上面提到的三个问题:故障转移、选举Leader、实施故障转移。
当主节点被判断客观下线后,xcos 源码各个哨兵节点会进行协商,先选举出一个领导者(leader),并由该leader进行接下来的故障迁移(failover),那么这个Leader是如何选择出来的呢?
我们还是从日志入手。
由sentinel.log可以看到,sentinel的ID是a7c7aabf8fcbf9bbc9c2,他把票投给了ID为beffc9ebf3ba6cecc8b8decc的sentinel。
由sentinel.log可以看到,sentinel的ID是a5b3bcfca0ecef4d0b2acc,他把票投给了他自己。
由sentinel.log可以看到,sentinel的ID是beffc9ebf3ba6cecc8b8decc,他也把票投给了他自己。
此时sentinel有2票,sentinel有1票,因此,sentinel当选leader,并执行后续的故障转移流程选出新的主机。
哨兵的Leader是怎么选的?
通过raft算法,这个算值得单独出一篇来讲( ̄∇ ̄)/
故障转移具体步骤
总结
上述的failover操作均由sentinel自己独立完成,完全无需人工干预。
哨兵“食用”建议
于是我们有了下一篇文章——集群!敬请期待( ̄∇ ̄)/ ~~~~~~~~~
基于 Docker 搭建 Redis-Sentinel 哨兵模式集群教程
哨兵模式是spack 源码Redis集群的一种高级配置方案,结合主从复制机制与哨兵监控功能,实现高可用性集群。哨兵监控主节点,一旦检测到主节点异常,自动触发故障恢复流程,确保数据连续性。
在哨兵工作流程中,配置文件中通过`sentinel monitor`来指定主节点的IP、端口,实现对多个主节点的监控。哨兵启动后,会与主节点建立两条连接,用于实时监控状态。
主节点故障后,哨兵启动故障恢复流程,使用Raft算法选举领头哨兵。领头哨兵从故障主节点的从节点中选出一个,将其提升为新的主节点,并通知其他从节点跟随新主节点,完成数据同步。旧主节点被更新为从节点,恢复服务。
基于Docker搭建Redis-Sentinel集群教程,dbimport 源码首先在单机上创建网络环境。然后创建主节点容器,以及两个从节点容器。通过查看主节点IP(哨兵配置文件中使用),新建配置文件`sentinel.conf`,配置主节点信息。接着创建哨兵容器,实现对主从节点的监控。验证集群是否成功搭建,可通过连接任意主节点执行`INFO replication`命令,以及输入`INFO sentinel`查看哨兵状态。
至此,基于Docker的Redis-Sentinel集群搭建完成,确保了系统的高可用性和数据一致性。
redis一主二从三哨兵搭建
首先,为搭建redis一主二从三哨兵环境,我们需要对环境进行准备。在redhat 7.6系统中,以redis用户身份进行操作,且选择redis 5版本。 搭建完成后,服务器的目录结构如下:/home/redis/redis5//redis.conf - 主redis配置文件
/home/redis/redis5//redis.conf - 第一个从redis配置文件
/home/redis/redis5//redis.conf - 第二个从redis配置文件
/home/redis/redis5//sentinel.conf - 第一个哨兵配置文件
/home/redis/redis5//sentinel.conf - 第二个哨兵配置文件
/home/redis/redis5//sentinel.conf - 第三个哨兵配置文件
/home/redis/redis5/bin/redis相关工具 - 包括redis-benchmark, redis-check-aof, redis-check-rdb等
/home/redis/redis5/bin/redis-cli - redis命令行工具
/home/redis/redis5/bin/redis-sentinel - 哨兵工具
/home/redis/redis5/bin/redis-server - redis服务启动文件
/home/redis/redis5/data - 数据存储目录
/home/redis/redis5/log - 日志文件目录
配置文件中,主redis不需要配置replicaof,而从redis需要配置为replicaof主节点。由于在同一台虚拟机上,记得根据端口修改日志文件名、db文件名和进程文件名。 启动时,建议先启动主节点,然后是两个从节点,最后是哨兵节点。启动命令的具体细节未在文中给出,但提供了启动顺序的建议。 完成搭建后,可以通过命令查看集群信息,而停止服务时,也需要相应的命令。对于日志、进程和数据文件的管理,如果在一台机器上,可以考虑将同类文件归置在同一个目录,以提高管理效率。Redis 哨兵模式 - 源码梳理
本文以Redis 7.0.版本为基准,如有不妥之处,敬请指正。
哨兵模式的代码流程逻辑如下:哨兵节点每秒(主从切换时为1秒)向已知的主节点和从节点发送info命令。接收到主节点的info回复后,解析其中的slave字段信息,进而创建相应的从节点instance。收到从节点的info回复后,解析其中的slave_master_host、slave_master_port、slave_master_link_status、slave_priority、slave_repl_offset、replica_announced等信息(步骤2和sentinelInfoReplyCallback)。
在sentinel.masters的初始数据中,来自于sentinel.conf中的monitor,利用info命令探测主节点及其所属的从节点。通过订阅__sentinel__:hello频道,获取其他哨兵节点的信息。其中,link->act_ping_time表示最早一次未收到回复的ping请求发送时间,收到回复后其会被重置为0。因此,其不为0时,表示有未收到回复的ping请求。link->last_avail_time表示最近一次收到对ping有效回复的时间,link->last_pong_time表示最近一次收到对ping回复(有效和无效)的时间,link->pc_last_activity表示最近一次收到publish的消息,ri->role_reported_time表示最近一次收到info且回复中role相比于上次发生改变的时间。
Raft一致性算法
thesecretlivesofdata.com...
使用 Docker Compose 部署 Redis Sentinel 高可用架构
在现代应用中,确保系统连续运行和数据安全是关键。Redis,因其高效性能和广泛用途,在缓存及会话管理等场景中应用广泛。尽管Redis Cluster集群具备横向扩展与高效率,但在主节点故障时,需依赖自动切换到从节点的机制来维护应用稳定性。此时,Redis Sentinel就成为了解决方案。
Redis Sentinel用于提升高可用性,它监控Redis主从复制架构,当主节点出现故障时自动将从节点升级为主节点,确保系统可用性。虽然Cluster集群提供数据分布与冗余,但主节点故障需要机制自动切换备份节点,这正是Sentinel哨兵集群的作用。
将Sentinel哨兵集群与Cluster集群结合使用,实现数据分布与高可用性间的平衡,构建稳定可靠的Redis部署。使用Docker Compose文件部署Sentinel,简化实现自动故障转移功能。
在redis-sentinel文件夹中创建docker-compose.yml文件,配置Sentinel节点容器。为每个Sentinel节点创建sentinel1.conf、sentinel2.conf等配置文件,定义监控主节点及故障判定超时等设置。
运行docker-compose up -d命令启动Sentinel容器,使其监视Redis主从复制集群。
部署Redis Sentinel于现有Redis 3主3从Cluster集群,实现更高可用性。利用Docker Compose快速实现自动故障转移,确保主节点故障时系统自动切换到从节点,保护数据完整与应用可用性。
借助Docker Compose部署Redis Sentinel高可用性方案,不仅提供更佳应用保障,还能降低运维成本。将高可用性机制整合到应用架构,为业务稳定性和可靠性带来显著提升。
[redis 源码走读] sentinel 哨兵 - 脑裂处理方案
哨兵模式的 Redis 集群在部署时可能出现脑裂现象,即产生多个主服务导致数据不一致的情况。哨兵通过检查、发现故障并进行故障转移来维护集群的高可用性。合理部署配置哨兵和主服务可以有效降低脑裂现象。配置哨兵节点个数和选举法定人数,确保多个哨兵能进行相互选举,选出领导者哨兵进行故障转移,法定人数一般建议为哨兵总数的一半以上,以实现少数服从多数的决策。对于主服务,通过修改配置,当主服务与一定数量的副本失去联系时,禁止客户端向故障主服务进行写操作,从而避免数据不一致的情况。解决此问题时,需注意配置选项min-slaves-to-write,其依赖于副本的链接个数,合理设置以确保集群的故障转移能力。高版本的 Redis 已对相关选项进行了优化。总之,通过合理部署哨兵和主服务配置,可以有效管理 Redis 集群,减少脑裂现象带来的问题。