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

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
日志服务 SLS,月写入数据量 50GB 1个月
简介: 【Redis从头学-13】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搭建方式)进行搭建,前置环境可前往这篇文章查看。


前情提要


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

配置文件创建


配置项一览表


配置项 描述
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 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.验证是否启动成功。

4afcdc73badf8f64c8b64883244b930a_4a42c8dffa6145069b1031c3492e71d9.png

4.进入到26379哨兵,查看节点信息。从下图红框部分可以看出为一主(name为mymaster),2从,3哨兵。

注意:如果红框内status状态为sdown,则代表没有配置成功。要去检查一下主从复制的配置文件以及哨兵配置文件中的IP地址是否有误、密码是否有误以及要注意关闭防火墙的配置。我这里找了半天,发现是自己的ip地址配错了,配置文件一定要细心编写,关键点在于ip地址、密码、路径


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


bac9eb04cc4f07aa554db4ccc3854a6d_10fdc0328fec4a5da1026b99894119f9.png


🌟场景测试


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


1.下线主节点master-6379。

a810b95b617aa0a0f255291caea8f2f6_14199ed30d0b437a96dfbdf7fdc290ba.png


2.查看其中一个哨兵的日志信息。

3c9f6e3d5b5a7bb6b5f85c3e3e5325b7_36b100b0f1e94d54a24a6402a7a4616c.png

日志解读:


  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。

efa691d476fb95e475d603a333e34c81_1413dfca1b3f4297aa448db4e0e66d96.png


🌟写在最后


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


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
2月前
|
缓存 NoSQL Java
Redis深度解析:解锁高性能缓存的终极武器,让你的应用飞起来
【8月更文挑战第29天】本文从基本概念入手,通过实战示例、原理解析和高级使用技巧,全面讲解Redis这一高性能键值对数据库。Redis基于内存存储,支持多种数据结构,如字符串、列表和哈希表等,常用于数据库、缓存及消息队列。文中详细介绍了如何在Spring Boot项目中集成Redis,并展示了其工作原理、缓存实现方法及高级特性,如事务、发布/订阅、Lua脚本和集群等,帮助读者从入门到精通Redis,大幅提升应用性能与可扩展性。
62 0
|
18小时前
|
存储 缓存 NoSQL
大数据-38 Redis 高并发下的分布式缓存 Redis简介 缓存场景 读写模式 旁路模式 穿透模式 缓存模式 基本概念等
大数据-38 Redis 高并发下的分布式缓存 Redis简介 缓存场景 读写模式 旁路模式 穿透模式 缓存模式 基本概念等
12 4
|
18小时前
|
存储 NoSQL 大数据
大数据-51 Redis 高可用方案CAP-AP 主从复制 一主一从 全量和增量同步 哨兵模式 docker-compose测试
大数据-51 Redis 高可用方案CAP-AP 主从复制 一主一从 全量和增量同步 哨兵模式 docker-compose测试
12 3
|
18小时前
|
SQL 分布式计算 NoSQL
大数据-42 Redis 功能扩展 发布/订阅模式 事务相关的内容 Redis弱事务
大数据-42 Redis 功能扩展 发布/订阅模式 事务相关的内容 Redis弱事务
8 2
|
18小时前
|
存储 缓存 NoSQL
大数据-46 Redis 持久化 RDB AOF 配置参数 混合模式 具体原理 触发方式 优点与缺点
大数据-46 Redis 持久化 RDB AOF 配置参数 混合模式 具体原理 触发方式 优点与缺点
7 1
|
1月前
|
存储 NoSQL Redis
SpringCloud基础7——Redis分布式缓存,RDB,AOF持久化+主从+哨兵+分片集群
Redis持久化、RDB和AOF方案、Redis主从集群、哨兵、分片集群、散列插槽、自动手动故障转移
SpringCloud基础7——Redis分布式缓存,RDB,AOF持久化+主从+哨兵+分片集群
|
21天前
|
设计模式 存储 安全
PHP中单例模式的深入解析与实践指南
在PHP开发领域,设计模式是构建高效、可维护代码的重要工具。本文聚焦于单例模式——一种确保类仅有一个实例,并提供全局访问点的模式。我们将从理论出发,探讨单例模式的基本概念、应用场景,并通过实际案例分析其在PHP中的实现技巧。最后,讨论单例模式的优势、潜在缺陷及如何在实际项目中合理运用。
|
13天前
|
存储 缓存 NoSQL
Redis 过期删除策略与内存淘汰策略的区别及常用命令解析
Redis 过期删除策略与内存淘汰策略的区别及常用命令解析
30 0
|
16天前
|
NoSQL 网络协议 Redis
Redis的主从复制和哨兵模式
本文详细介绍了Redis的主从复制配置、原理(包括全量复制和增量复制)以及如何搭建一主二从的Redis集群,同时还探讨了Redis哨兵模式的概念、配置文件、以及如何配置一主二从三哨兵的Redis哨兵模式,以实现高可用性。
|
2月前
|
运维 监控 NoSQL
【Redis】哨兵(Sentinel)原理与实战全解~炒鸡简单啊
Redis 的哨兵模式(Sentinel)是一种用于实现高可用性的机制。它通过监控主节点和从节点,并在主节点故障时自动进行切换,确保集群持续提供服务。哨兵模式包括主节点、从节点和哨兵实例,具备监控、通知、自动故障转移等功能,能显著提高系统的稳定性和可靠性。本文详细介绍了哨兵模式的组成、功能、工作机制以及其优势和局限性,并提供了单实例的安装和配置步骤,包括系统优化、安装、配置、启停管理和性能监控等。此外,还介绍了如何配置主从复制和哨兵,确保在故障时能够自动切换并恢复服务。

热门文章

最新文章

推荐镜像

更多