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

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 【Redis权威指南】「特性分析」Sentinel的特性分析典籍指南(1)

Redis的Sentinel模式进行分析


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



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实例应该放在被认为以独立方式失败的计算机或虚拟机中。例如,在不同的可用性区域上执行不同的物理服务器或虚拟机。


  1. Sentinel+Redis分布式系统不保证在故障期间保留已确认的写入,因为Redis使用异步复制。
  2. 有一些方法可以部署Sentinel,使窗口丢失写操作的时间限制在某些时刻,而还有其他不太安全的方法可以部署它。你的客户需要哨兵支持,流行的客户端库有Sentinel支持,但不是全部。


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


  1. 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配置集修改全局配置参数。




相关实践学习
基于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 Redis
Redis 新版本引入多线程的利弊分析
【10月更文挑战第16天】Redis 新版本引入多线程是一个具有挑战性和机遇的改变。虽然多线程带来了一些潜在的问题和挑战,但也为 Redis 提供了进一步提升性能和扩展能力的可能性。在实际应用中,我们需要根据具体的需求和场景,综合评估多线程的利弊,谨慎地选择和使用 Redis 的新版本。同时,Redis 开发者也需要不断努力,优化和完善多线程机制,以提供更加稳定、高效和可靠的 Redis 服务。
48 1
|
1月前
|
存储 缓存 监控
利用 Redis 缓存特性避免缓存穿透的策略与方法
【10月更文挑战第23天】通过以上对利用 Redis 缓存特性避免缓存穿透的详细阐述,我们对这一策略有了更深入的理解。在实际应用中,我们需要根据具体情况灵活运用这些方法,并结合其他技术手段,共同保障系统的稳定和高效运行。同时,要不断关注 Redis 缓存特性的发展和变化,及时调整策略,以应对不断出现的新挑战。
63 10
|
1月前
|
缓存 监控 NoSQL
Redis 缓存穿透的检测方法与分析
【10月更文挑战第23天】通过以上对 Redis 缓存穿透检测方法的深入探讨,我们对如何及时发现和处理这一问题有了更全面的认识。在实际应用中,我们需要综合运用多种检测手段,并结合业务场景和实际情况进行分析,以确保能够准确、及时地检测到缓存穿透现象,并采取有效的措施加以解决。同时,要不断优化和改进检测方法,提高检测的准确性和效率,为系统的稳定运行提供有力保障。
49 5
|
3月前
|
监控 NoSQL Redis
Redis Sentinel:秒杀系统背后的可靠性保障神器!
本文详细介绍了如何在个人项目中利用 Redis 哨兵模式保障系统的可靠性与高可用性。哨兵模式通过监控主从服务器状态、自动故障转移和通知客户端等功能,确保在主服务器宕机时系统仍能正常运行。适用于读请求多于写请求的场景,如秒杀系统,能有效缓解数据库压力。同时也探讨了哨兵模式在高并发场景下的优化方法及潜在缺陷,帮助开发者更好地应用该模式。
71 7
Redis Sentinel:秒杀系统背后的可靠性保障神器!
|
2月前
|
监控 NoSQL 算法
Redis Sentinel(哨兵)详解
Redis Sentinel(哨兵)详解
116 4
|
2月前
|
存储 消息中间件 NoSQL
【redis】redis的特性和主要应用场景
【redis】redis的特性和主要应用场景
113 1
|
2月前
|
NoSQL 关系型数据库 MySQL
Redis 事务特性、原理、具体命令操作全方位诠释 —— 零基础可学习
本文全面阐述了Redis事务的特性、原理、具体命令操作,指出Redis事务具有原子性但不保证一致性、持久性和隔离性,并解释了Redis事务的适用场景和WATCH命令的乐观锁机制。
285 0
Redis 事务特性、原理、具体命令操作全方位诠释 —— 零基础可学习
|
3月前
|
Oracle NoSQL 关系型数据库
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
506 2
|
3月前
|
存储 Prometheus NoSQL
Redis 内存突增时,如何定量分析其内存使用情况
【9月更文挑战第21天】当Redis内存突增时,可采用多种方法分析内存使用情况:1)使用`INFO memory`命令查看详细内存信息;2)借助`redis-cli --bigkeys`和RMA工具定位大键;3)利用Prometheus和Grafana监控内存变化;4)优化数据类型和存储结构;5)检查并调整内存碎片率。通过这些方法,可有效定位并解决内存问题,保障Redis稳定运行。
121 3
|
4月前
|
运维 监控 NoSQL
【Redis】哨兵(Sentinel)原理与实战全解~炒鸡简单啊
Redis 的哨兵模式(Sentinel)是一种用于实现高可用性的机制。它通过监控主节点和从节点,并在主节点故障时自动进行切换,确保集群持续提供服务。哨兵模式包括主节点、从节点和哨兵实例,具备监控、通知、自动故障转移等功能,能显著提高系统的稳定性和可靠性。本文详细介绍了哨兵模式的组成、功能、工作机制以及其优势和局限性,并提供了单实例的安装和配置步骤,包括系统优化、安装、配置、启停管理和性能监控等。此外,还介绍了如何配置主从复制和哨兵,确保在故障时能够自动切换并恢复服务。