【Redis从头学-13】Redis哨兵模式解析以及搭建指南

‍作者名称:DaenCode
作者简介:啥技术都喜欢捣鼓捣鼓,喜欢分享技术、经验、生活。
人生感悟:尝尽人生百味,方知世间冷暖。
所属专栏:Redis从头学


【Redis从头学-13】Redis哨兵模式解析以及搭建指南_第1张图片


文章目录

  • 前言
  • 概述
  • 搭建过程
    • 前情提要
    • 配置文件创建
    • 启动哨兵
  • 场景测试
  • 写在最后

前言

在上一篇文章中介绍了主从分离+读写分离以及其搭建的多种方式。如果其中的主节点宕机,需要我们手工去重新设置主节点,那么有没有一种方式可以自动设置主节点呢?那就是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搭建方式)进行搭建,前置环境可前往这篇文章查看。


前情提要

  1. 开放相应的哨兵模式端口26379、26380、26381。默认端口为26379。
  2. 启动时,先启动主节点,再启动从节点,最后启动三个哨兵。

配置文件创建

配置项一览表

配置项 描述
port 指定哨兵的监听端口,默认为26379。
bind 指定哨兵绑定的IP地址。
dir 指定哨兵的工作目录,用于存储持久化数据和日志文件。
sentinel monitor 定义要监控的主节点。
:主节点的名称。
:主节点的地址和端口号。
:需要同意故障转移的最少票数。
sentinel down-after-milliseconds 定义哨兵将主节点标记为下线的时间阈值。
sentinel parallel-syncs 定义同时进行故障转移的最大并行同步数量。
sentinel failover-timeout 定义故障转移操作的超时时间。
sentinel auth-pass 如果主节点需要密码验证,使用此配置项提供密码。
sentinel deny-scripts-reconfig 禁止从节点执行配置修改操作。
sentinel leader-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 26379
bind 0.0.0.0
daemonize yes
pidfile "/var/run/sentinel1.pid"
logfile "/data/sentine/log/sentinel_26379.log"
dir "/tmp"
sentinel monitor mymaster 48.233.48.98 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel auth-pass mymaster daencode@top
sentinel failover-timeout mymaster 30000

3.sentinel2.conf配置文件。

port 26380
bind 0.0.0.0
daemonize yes
pidfile "/var/run/sentinel2.pid"
logfile "/data/sentinel/log/sentinel_26380.log"
dir "/tmp"
sentinel monitor mymaster 48.233.48.98 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel auth-pass mymaster daencode@top
sentinel failover-timeout mymaster 30000

4.sentinel3.conf配置文件。

port 26381
bind 0.0.0.0
daemonize yes
pidfile "/var/run/sentinel3.pid"
logfile "/data/sentinel/log/sentinel_26381.log"
dir "/tmp"
sentinel monitor mymaster 48.233.48.98 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel auth-pass mymaster daencode@top
sentinel failover-timeout mymaster 30000

启动哨兵

1.进入到redis安装目录中的bin目录。

cd /usr/local/redis/bin

2.依次启动三个哨兵。这里注意要先启动主从节点。

./redis-server /data/sentinel/sentinel1.conf --sentinel
./redis-server /data/sentinel/sentinel2.conf --sentinel
./redis-server /data/sentinel/sentinel3.conf --sentinel

3.验证是否启动成功。
【Redis从头学-13】Redis哨兵模式解析以及搭建指南_第2张图片
4.进入到26379哨兵,查看节点信息。从下图红框部分可以看出为一主(name为mymaster),2从,3哨兵。
注意:如果红框内status状态为sdown,则代表没有配置成功。要去检查一下主从复制的配置文件以及哨兵配置文件中的IP地址是否有误、密码是否有误以及要注意关闭防火墙的配置。我这里找了半天,发现是自己的ip地址配错了,配置文件一定要细心编写,关键点在于ip地址、密码、路径

./redis-cli -h 49.233.48.98 -p 26379
#查看节点信息
info sentinel

【Redis从头学-13】Redis哨兵模式解析以及搭建指南_第3张图片


场景测试

这里对master主节点6379进行shutdown,之后查看哨兵节点的日志信息。


1.下线主节点master-6379。
在这里插入图片描述


2.查看其中一个哨兵的日志信息。
【Redis从头学-13】Redis哨兵模式解析以及搭建指南_第4张图片
日志解读:

  1. +sdown master mymaster 49.233.48.98 6379:表示主服务器(mymaster)在IP地址为49.233.48.98,端口为6379的节点上被判定为下线(sdown)。这可能是因为主服务器出现了故障或无法正常工作。
  2. +new-epoch 1:表示一个新的选举轮次(epoch)开始,这是哨兵在选举新的主服务器时使用的计数器。此处的"1"表示当前轮次的编号。
  3. +vote-for-leader 9ddfd87d9127f7f7f2eb7aba24bd422a7782f121 1:表示哨兵节点已经投票给ID为9ddfd87d9127f7f7f2eb7aba24bd422a7782f121的实例来成为新的主服务器。"1"表示该节点的投票数。
  4. +odown master mymaster 49.233.48.98 6379 #quorum 3/2:表示主服务器(mymaster)正在执行故障转移操作,并且需要获得至少3个哨兵节点的投票(quorum)以确保操作的可靠性。"3/2"表示当前获得的投票数。
  5. Next failover delay: I will not start a failover before Mon Aug 28 02:26:03 2023:表示下一次故障转移操作的启动时间将在指定时间之后。在这种情况下,在2023年8月28日02:26:03之前不会执行故障转移操作。
  6. +config-update-from sentinel 9ddfd87d9127f7f7f2eb7aba24bd422a7782f121 10.0.16.11 26381 @ mymaster 49.233.48.98 6379:表示哨兵节点从ID为9ddfd87d9127f7f7f2eb7aba24bd422a7782f121的实例获取到新的配置更新,并且该实例的IP地址为10.0.16.11,端口为26381。
  7. +switch-master mymaster 49.233.48.98 6379 49.233.48.98 6380:表示成功将主服务器切换到IP地址为49.233.48.98,端口从6379切换为6380。
  8. +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。
  9. +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从头学-13】Redis哨兵模式解析以及搭建指南_第5张图片


写在最后

有关于一文带你搞懂Redis哨兵机制以及其搭建方式到此就结束了。在搭建时,编写的配置文件一定要详细检查、细心编写,还要注意防火墙的关闭或者端口号的开发。感谢大家的阅读,希望大家在评论区对此部分内容散发讨论,便于学到更多的知识。


请添加图片描述

你可能感兴趣的:(Redis从头学,redis,数据库,缓存,分布式)