写点什么

【Redis 权威指南】「特性分析」Sentinel 的特性分析典籍指南(1)

作者:浩宇天尚
  • 2021 年 12 月 05 日
  • 本文字数:2534 字

    阅读完需:约 8 分钟

【Redis权威指南】「特性分析」Sentinel的特性分析典籍指南(1)

Redis 的 Sentinel 模式进行分析

所有资源来源于 Redis 官方文档的翻译:https://redis.io/topics/sentinel

Redis Sentinel 模式

Redis Sentinel 为 Redis 提供了高可用性。实际上,这意味着使用 Sentinel 可以创建一个 Redis 部署,在没有人为干预的情况下抵抗某些类型的故障。


Redis Sentinel 还提供其他辅助任务,如监视、通知,并充当客户端的配置提供程序。这是宏观层面(即宏观层面)哨兵能力的完整列表。

Redis Sentinel 的功能实现

  • 监测:Sentinel 不断检查主实例和副本实例是否按预期工作。

  • 通知:Sentinel 可以通过 API 通知系统管理员或其他计算机程序,其中一个受监视的 Redis 实例出现问题。

  • 自动故障切换:如果主服务器未按预期工作,Sentinel 可以启动故障切换过程,其中一个复制副本升级为主服务器,其他附加复制副本将重新配置为使用新的主服务器,并且使用 Redis 服务器的应用程序在连接时会被告知要使用的新地址。

  • 配置提供程序:Sentinel 充当客户端服务发现的授权来源:客户端连接到 Sentinel,以请求负责给定服务的当前 Redis 主机的地址。如果发生故障转移,Sentinel 将报告新地址。

Sentinel 的分布式特性

Redis Sentinel 的分布式特性 Sentinel 是一个分布式系统:Sentinel 本身设计为在多个 Sentinel 进程协作的配置中运行。


多个 Sentinel 进程协作的优点如下:当多个哨兵同意某个给定主机不再可用时,将执行故障检测。这降低了误报的概率。即使并非所有 Sentinel 进程都在工作,Sentinel 也能工作,从而使系统对故障具有鲁棒性。


毕竟,拥有一个本身就是单点故障的故障切换系统是没有乐趣的。Sentinel、Redis 实例(主机和副本)以及连接到 Sentinel 和 Redis 的客户端的总和也是一个具有特定属性的大型分布式系统。


将逐步介绍概念,从理解 Sentinel 基本属性所需的基本信息开始,到更复杂的信息(可选),以了解 Sentinel 的工作原理。

Sentinel 快速入门

当前版本的 Sentinel 称为 Sentinel 2,是对最初的 Sentinel 实现的重写,使用了更强、更简单的预测算法。


Sentinel 的稳定版本从 Redis2.8 开始发布。新的开发是在不稳定的分支中执行的,新的特性有时在被认为是稳定的时候就被移植到最新的稳定分支中。


Redis 2.6 附带的 Redis Sentinel 版本 1 已弃用,不应使用。

Sentinel 的运行方式

运行 Sentinel,如果您使用的是 redis Sentinel 可执行文件(或者如果您有一个与 redis server 可执行文件同名的符号链接),则可以使用以下命令行运行 Sentinel:


redis-sentinel /path/to/sentinel.conf
复制代码


您可以直接使用 redis server 可执行文件以 Sentinel 模式启动它:


redis-server /path/to/sentinel.conf --sentinel
复制代码


两种方法都是一样的。但是,在运行 Sentinel 时必须使用配置文件,因为系统将使用该文件来保存当前状态,在重新启动时将重新加载该状态。如果没有提供配置文件或配置文件路径不可写,Sentinel 将拒绝启动。


默认情况下,Sentinel 运行侦听到 TCP 端口 26379 的连接,因此要使 Sentinel 正常工作,服务器的端口 26379 必须打开,才能从其他 Sentinel 实例的 IP 地址接收连接。否则哨兵就无法交谈,也无法就如何做达成一致,因此故障切换将永远不会执行。

部署 Sentinel 之前

  1. 需要了解的基本情况是,您至少需要三个 Sentinel 实例才能实现健壮的部署,这三个 Sentinel 实例应该放在被认为以独立方式失败的计算机或虚拟机中。例如,在不同的可用性区域上执行不同的物理服务器或虚拟机。

  2. Sentinel+Redis 分布式系统不保证在故障期间保留已确认的写入,因为 Redis 使用异步复制。

  3. 有一些方法可以部署 Sentinel,使窗口丢失写操作的时间限制在某些时刻,而还有其他不太安全的方法可以部署它。你的客户需要哨兵支持,流行的客户端库有 Sentinel 支持,但不是全部。

  4. 如果您不经常在开发环境中进行测试,那么就没有安全的 HA 设置,如果可以,在生产环境中,如果 HA 设置正常,那么就更好了。

  5. Sentinel、Docker 或其他形式的网络地址转换或端口映射应谨慎混合:Docker 执行端口重新映射,打破 Sentinel 对其他 Sentinel 进程和主机副本列表的自动发现。

配置 Sentinel

Redis 源发行版包含一个名为 Sentinel.conf 的文件,该文件是一个自我记录的示例配置文件,可用于配置 Sentinel,但典型的最小配置文件如下所示:


sentinel monitor mymaster 127.0.0.1 6379 2 sentinel down-after-milliseconds mymaster 60000 sentinel failover-timeout mymaster 180000 sentinel parallel-syncs mymaster 1
复制代码


  • 您只需要指定要监视的主机,为每个分离的主机(可能有任意数量的副本)指定不同的名称。无需指定自动发现的副本。

  • Sentinel 将使用有关副本的其他信息自动更新配置(以便在重新启动时保留这些信息)。

  • 每次在故障切换期间将副本升级为主副本时,以及每次发现新的 Sentinel 时,都会重写配置。

sentinel monitor 语句的参数含义
sentinel monitor <master-group-name> <ip> <port> <quorum>
复制代码


仲裁是指需要就无法访问主机这一事实达成一致意见的哨兵数量,以便真正将主机标记为失败,并在可能的情况下最终启动故障转移过程,但是,仲裁仅用于检测故障。


为了实际执行故障切换,其中一个哨兵需要被选为故障切换的负责人并获得继续执行的授权。


这只有在大多数 Sentinel 进程投票的情况下才会发生。例如,如果您有 5 个 Sentinel 进程,并且给定主机的仲裁设置为值 2,则会发生以下情况:

注意事项
  • 如果两个哨兵同时同意无法访问主服务器,那么其中一个哨兵将尝试启动故障转移。

  • 如果至少有三个 Sentinel 可访问,则故障切换将被授权并实际启动。实际上,这意味着在故障期间,如果大多数 Sentinel 进程无法通信,Sentinel 将永远不会启动故障转移(也就是少数分区中没有故障转移)。

其他哨兵选项

sentinel <option_name> <master_name> <option_value>
复制代码


  • down after Millimes:是哨兵开始认为某个实例已关闭而不可访问的时间(毫秒)。

  • parallel-syncs:并行同步设置可重新配置以在故障切换后同时使用新主机的副本数。数量越小,故障切换过程完成所需的时间就越长,但是,如果将副本配置为服务旧数据,则可能不希望所有副本同时与主机重新同步。


虽然复制过程对于复制副本来说基本上是无阻塞的,但有时它会停止从主机加载大容量数据。


通过将此选项的值设置为 1,您可能希望确保一次只能访问一个副本


可以在运行时修改配置参数:使用 SENTINEL SET 修改特定于主机的配置参数。使用 SENTINEL 配置集修改全局配置参数。

发布于: 3 小时前阅读数: 6
用户头像

浩宇天尚

关注

🏆 InfoQ写作平台-签约作者 🏆 2020.03.25 加入

【个人简介】酷爱计算机技术、醉心开发编程、喜爱健身运动、热衷悬疑推理的”极客狂人“ 【技术格言】任何足够先进的技术都与魔法无异 【技术范畴】Java领域、Spring生态、MySQL专项、APM专题及微服务/分布式体系等

评论

发布
暂无评论
【Redis权威指南】「特性分析」Sentinel的特性分析典籍指南(1)