🧑💻作者名称:DaenCode 🎤作者简介:啥技术都喜欢捣鼓捣鼓,喜欢分享技术、经验、生活。 😎人生感悟:尝尽人生百味,方知世间冷暖。 📖所属专栏:Redis从头学
文章目录 🌟前言🌟概述🌟搭建过程前情提要配置文件创建启动哨兵 🌟场景测试🌟写在最后 🌟前言
在上一篇文章中介绍了主从分离+读写分离以及其搭建的多种方式。如果其中的主节点宕机,需要我们手工去重新设置主节点,那么有没有一种方式可以自动设置主节点呢?那就是Redis中的哨兵机制,本文就介绍哨兵机制的原理以及其搭建方式。
🌟概述
哨兵模式:通过发送命令给多个节点来监控Redis的master以及slave的运行状态,并在master服务宕机后,自动将slave节点转为master服务。 哨兵模式的三大工作任务
监控:监控master以及其slave节点的运行状态。提醒:将检测的节点信息,通过API向客户端发送相关信息。自动故障转移:当master服务不能正常运行时,内部将从slave节点中选举出最新的master服务,并通知其他的slave节点更新主节点配置信息。多哨兵模式下的下线名称
主观下线:监控的Redis节点没有在规定的时间down-after-milliseconds内作出回应,则为主观下线。适用于所有节点。客观下线:监控的主节点发生故障时,哨兵与哨兵之间通过is-master-down-by-addr命令互相交流,并进行投票,若票数满足要求则判断为下线。只适用于主节点。仲裁:简单来说就是过个哨兵根据相关配置,进行投票选举出最新的主节点。注意:实际应用中配置一个哨兵往往不能保证主节点一直能正常运行,往往需要配置多个哨兵,哨兵与哨兵之间还会互相监控。
🌟搭建过程
此文的哨兵模式基于【Redis从头学-12】Redis主从复制和读写分离的多种部署方式解析(普通方式、Docker搭建方式、Docker-Compose搭建方式)进行搭建,前置环境可前往这篇文章查看。
前情提要 开放相应的哨兵模式端口26379、26380、26381。默认端口为26379。启动时,先启动主节点,再启动从节点,最后启动三个哨兵。
配置文件创建
配置项一览表
配置项描述port指定哨兵的监听端口,默认为26379。bind指定哨兵绑定的IP地址。dir指定哨兵的工作目录,用于存储持久化数据和日志文件。sentinel monitor <master-name> <ip> <port> <quorum>定义要监控的主节点。 <master-name>:主节点的名称。 <ip> 和 <port>:主节点的地址和端口号。 <quorum>:需要同意故障转移的最少票数。sentinel down-after-milliseconds <master-name> <milliseconds>定义哨兵将主节点标记为下线的时间阈值。sentinel parallel-syncs <master-name> <num>定义同时进行故障转移的最大并行同步数量。sentinel failover-timeout <master-name> <milliseconds>定义故障转移操作的超时时间。sentinel auth-pass <master-name> <password>如果主节点需要密码验证,使用此配置项提供密码。sentinel deny-scripts-reconfig <master-name>禁止从节点执行配置修改操作。sentinel leader-epoch <master-name> <epoch>指定当前哨兵的领导者纪元。1.在data/路径下创建sentinel文件夹以及在sentinel文件夹下创建三个文件sentinel1.conf、sentinel2.conf、sentinel3.conf。
mkdir -p /data/sentinel--创建文件夹cd /data/sentinel--进入到sentinel目录touch sentinel1.conf sentinel2.conf sentinel3.conf---创建存放哨兵模式的配置文件mkdir log--存放日志。2.sentinel1.conf配置文件。
port 26379bind 0.0.0.0daemonize yespidfile "/var/run/sentinel1.pid"logfile "/data/sentine/log/sentinel_26379.log"dir "/tmp"sentinel monitor mymaster 48.233.48.98 6379 2sentinel down-after-milliseconds mymaster 5000sentinel auth-pass mymaster daencode@topsentinel failover-timeout mymaster 300003.sentinel2.conf配置文件。
port 26380bind 0.0.0.0daemonize yespidfile "/var/run/sentinel2.pid"logfile "/data/sentinel/log/sentinel_26380.log"dir "/tmp"sentinel monitor mymaster 48.233.48.98 6379 2sentinel down-after-milliseconds mymaster 5000sentinel auth-pass mymaster daencode@topsentinel failover-timeout mymaster 300004.sentinel3.conf配置文件。
port 26381bind 0.0.0.0daemonize yespidfile "/var/run/sentinel3.pid"logfile "/data/sentinel/log/sentinel_26381.log"dir "/tmp"sentinel monitor mymaster 48.233.48.98 6379 2sentinel down-after-milliseconds mymaster 5000sentinel auth-pass mymaster daencode@topsentinel failover-timeout mymaster 30000启动哨兵
1.进入到redis安装目录中的bin目录。
cd /usr/local/redis/bin2.依次启动三个哨兵。这里注意要先启动主从节点。
./redis-server /data/sentinel/sentinel1.conf --sentinel./redis-server /data/sentinel/sentinel2.conf --sentinel./redis-server /data/sentinel/sentinel3.conf --sentinel3.验证是否启动成功。 4.进入到26379哨兵,查看节点信息。从下图红框部分可以看出为一主(name为mymaster),2从,3哨兵。 注意:如果红框内status状态为sdown,则代表没有配置成功。要去检查一下主从复制的配置文件以及哨兵配置文件中的IP地址是否有误、密码是否有误以及要注意关闭防火墙的配置。我这里找了半天,发现是自己的ip地址配错了,配置文件一定要细心编写,关键点在于ip地址、密码、路径
./redis-cli -h 49.233.48.98 -p 26379#查看节点信息info sentinel🌟场景测试
这里对master主节点6379进行shutdown,之后查看哨兵节点的日志信息。
1.下线主节点master-6379。
2.查看其中一个哨兵的日志信息。 日志解读:
+sdown master mymaster 49.233.48.98 6379:表示主服务器(mymaster)在IP地址为49.233.48.98,端口为6379的节点上被判定为下线(sdown)。这可能是因为主服务器出现了故障或无法正常工作。+new-epoch 1:表示一个新的选举轮次(epoch)开始,这是哨兵在选举新的主服务器时使用的计数器。此处的"1"表示当前轮次的编号。+vote-for-leader 9ddfd87d9127f7f7f2eb7aba24bd422a7782f121 1:表示哨兵节点已经投票给ID为9ddfd87d9127f7f7f2eb7aba24bd422a7782f121的实例来成为新的主服务器。"1"表示该节点的投票数。+odown master mymaster 49.233.48.98 6379 #quorum 3/2:表示主服务器(mymaster)正在执行故障转移操作,并且需要获得至少3个哨兵节点的投票(quorum)以确保操作的可靠性。"3/2"表示当前获得的投票数。Next failover delay: I will not start a failover before Mon Aug 28 02:26:03 2023:表示下一次故障转移操作的启动时间将在指定时间之后。在这种情况下,在2023年8月28日02:26:03之前不会执行故障转移操作。+config-update-from sentinel 9ddfd87d9127f7f7f2eb7aba24bd422a7782f121 10.0.16.11 26381 @ mymaster 49.233.48.98 6379:表示哨兵节点从ID为9ddfd87d9127f7f7f2eb7aba24bd422a7782f121的实例获取到新的配置更新,并且该实例的IP地址为10.0.16.11,端口为26381。+switch-master mymaster 49.233.48.98 6379 49.233.48.98 6380:表示成功将主服务器切换到IP地址为49.233.48.98,端口从6379切换为6380。+slave slave 49.233.48.98:6381 49.233.48.98 6381 @ mymaster 49.233.48.98 6380:表示一个新的从属服务器(slave)成功连接到主服务器(mymaster),从属服务器的IP地址为49.233.48.98,端口为6381。+sdown slave 49.233.48.98:6379 49.233.48.98 6379 @ mymaster 49.233.48.98 6380:表示从属服务器(位于IP地址为49.233.48.98,端口为6379的节点上)被判定为下线。3.登录之前的6380从节点,查看节点信息是否已经成为主节点。 可以看到已经成为新的master。
🌟写在最后
有关于一文带你搞懂Redis哨兵机制以及其搭建方式到此就结束了。在搭建时,编写的配置文件一定要详细检查、细心编写,还要注意防火墙的关闭或者端口号的开发。感谢大家的阅读,希望大家在评论区对此部分内容散发讨论,便于学到更多的知识。