当前位置: 首页 > news >正文

【C#与Redis】--高级主题--Redis 哨兵

一、简介

1.1 哨兵的概述

哨兵(Sentinel)是 Redis 分布式系统中用于监控和管理多个 Redis 服务器的组件。它的主要目标是确保 Redis 系统的高可用性,通过实时监测主节点和从节点的状态,及时发现并自动处理故障,保证系统的稳定运行。

1.2 为什么需要哨兵?

引入Redis哨兵的原因主要与以下几个方面有关:

  1. 高可用性需求:
    • 在生产环境中,确保Redis服务的高可用性是至关重要的。哨兵帮助监控Redis节点的状态,及时发现主节点的故障并进行自动故障转移,以保障系统的连续性和可用性。
  2. 故障自动处理:
    • 通过哨兵,Redis能够实现自动故障转移,即在主节点发生故障时,哨兵会自动选择并提升一个从节点为新的主节点。这种自动处理机制大大减少了管理员手动干预的需求,加快了故障恢复速度。
  3. 实时监控和警报:
    • 哨兵能够实时监控Redis节点的状态,并通过配置的方式提供实时的警报和通知。这使得管理员能够及时了解系统的健康状况,采取预防或紧急措施,从而提高对系统的监控和管理效率。
  4. 自动发现和配置更新:
    • Redis哨兵通过周期性地与Redis服务器通信,能够自动发现新的节点,并且在系统拓扑结构发生变化时进行自动更新。这种自动发现和配置更新的机制简化了系统的扩展和维护过程,使得系统更加灵活和易于管理。
  5. Quorum机制防脑裂:
    • 哨兵采用Quorum(法定人数)机制来进行主节点切换的决策,确保在多数哨兵达成一致时才执行故障转移。这有助于防止由于网络分区等问题导致的脑裂(split-brain)情况,提高系统的可靠性。
  6. 配置和管理通知:
    • 哨兵提供了配置和管理通知的机制,使得管理员能够及时获知节点的状态变化、故障转移的情况等重要信息。这有助于管理员在发生问题时迅速做出反应,采取必要的措施来修复或调整系统。

引入Redis哨兵是为了提高Redis分布式系统的稳定性、可用性和可维护性,确保系统在面对故障和变化时能够迅速、自动地做出适当的响应。

二、哨兵的工作原理

2.1 哨兵的运行模式

Redis Sentinel(哨兵)可以以单独模式或多哨兵模式运行,具体取决于你的系统架构和可用性需求。

  1. 单哨兵模式:
    在单哨兵模式下,系统中只有一个哨兵实例监控 Redis 集群。这种简单的部署适用于小规模应用或测试环境,但不适用于对高可用性有更严格需求的生产环境。
    特点和配置包括:

    • 只有一个哨兵实例在监控 Redis 集群。
    • 故障检测和自动故障转移仍然有效,但是缺乏多节点监控的冗余性。
    • 配置文件中通常只包含一个监控的 Redis 集群的信息。
  2. 多哨兵模式:
    在多哨兵模式下,系统中有多个哨兵实例同时监控 Redis 集群。这种模式提供了更高的可用性和冗余,确保在某个哨兵失效时仍然能够保持监控和维护功能。
    特点和配置包括:

    • 多个哨兵实例分布在不同的主机上,相互协同工作。
    • 配置文件中包含所有哨兵的信息,它们互相感知,并通过投票机制(Quorum)决策是否执行自动故障转移。
    • 多哨兵提供了更强大的故障检测和决策能力,降低了单点故障的风险。

在实际部署中,多哨兵模式更为常见,因为它能够提供更高的可用性和系统稳定性。在配置中,需要确保哨兵实例能够相互发现并形成一个工作群体,共同监控和维护 Redis 集群。

2.2 选举过程

Redis Sentinel 中的选举过程是在主节点(Master)不可用的情况下,由哨兵协作决策选择新的主节点的过程。以下是选举的基本过程:

  1. 主节点失效检测:

    • 当哨兵检测到主节点不可用,可能是由于网络问题、进程崩溃或其他原因,哨兵会将主节点标记为不可用。
  2. 哨兵之间的通信:

    • 在多哨兵模式中,失效的主节点信息会通过哨兵之间的通信进行传播。各个哨兵实例相互感知主节点的状态变化。
  3. 进行选举:

    • 在哨兵集群中,进行主节点选举需要达成一定的共识,这就是 Quorum 机制的应用。
    • Quorum 是指在多数哨兵达成一致时才执行选举操作,这有助于防止由于网络分区等问题导致的误操作。
  4. Quorum 的计算:

    • 哨兵进行选举时,需要得到超过半数的哨兵的支持才能执行选举。这确保了选举的合理性和可靠性。
  5. 选举的结果:

    • 如果足够多的哨兵同意进行选举,它们会协作选择一个新的主节点。
    • 选举成功后,新的主节点会晋升为主,同时旧的主节点标记为从节点,确保数据的持久性。
  6. 系统状态更新:

    • 选举成功后,哨兵会更新配置,将新的主节点信息广播到整个系统,确保客户端和其他节点能够感知到变化。
  7. 自动故障转移完成:

    • 一旦新的主节点选举完成,整个自动故障转移过程也就完成了,系统会恢复到正常运行状态。

通过这个选举过程,Redis Sentinel 确保在主节点不可用的情况下,能够迅速而可靠地选择一个新的主节点,从而保证了系统的高可用性。Quorum 的机制防止了脑裂的发生,确保选举的有效性。

三、配置和部署

3.1 配置文件详解

Redis Sentinel 的配置文件通常包含有关哨兵本身以及要监控的 Redis 集群的信息。以下是一个简单的哨兵配置文件示例,以及各个重要配置项的解释:

# 哨兵的标识名称
sentinel my-sentinel
# 哨兵监听的IP和端口
bind 127.0.0.1 26379
# 监控的 Redis 集群信息
sentinel monitor my-master 127.0.0.1 6379 2
# 配置哨兵间通信的密码
sentinel auth-pass my-sentinel-password
# 配置哨兵之间的心跳频率
sentinel down-after-milliseconds my-master 5000
# 配置故障转移的超时时间
sentinel failover-timeout my-master 10000
# 配置 Quorum 的值,用于选主决策
sentinel parallel-syncs my-master 1

配置项详解:

  1. sentinel my-sentinel:设置哨兵的标识名称。

  2. bind 127.0.0.1 26379:指定哨兵监听的 IP 地址和端口号。

  3. sentinel monitor my-master 127.0.0.1 6379 2

    • my-master:被监控的 Redis 主节点的名称。
    • 127.0.0.1:被监控的 Redis 主节点的 IP 地址。
    • 6379:被监控的 Redis 主节点的端口。
    • 2:Quorum 的值,用于选主决策。
  4. sentinel auth-pass my-sentinel-password:配置哨兵之间通信的密码。

  5. sentinel down-after-milliseconds my-master 5000:配置哨兵判定节点下线所需的时间,单位是毫秒。

  6. sentinel failover-timeout my-master 10000:配置故障转移的超时时间,单位是毫秒。

  7. sentinel parallel-syncs my-master 1:配置在执行故障转移时,同时同步的从节点个数。

以上仅是一份简单的配置文件示例,具体的配置项可能会根据实际需求和环境的不同而有所调整。需要注意的是,哨兵配置文件的路径和名称可以根据实际情况自行指定。配置文件的详细说明可以参考 Redis 官方文档。

3.2 哨兵的部署策略

Redis Sentinel 的部署策略取决于系统的可用性需求、复杂性、性能和安全性等因素。以下是一些建议的部署策略:

  1. 单点哨兵:

    • 适用情况: 适用于小规模的应用或测试环境,对高可用性要求不是很高的场景。
    • 特点: 简单、轻量,部署和管理成本较低。
    • 注意事项: 单点哨兵存在单点故障风险,因此不适用于对高可用性有严格要求的生产环境。
  2. 多节点哨兵:

    • 适用情况: 适用于生产环境,对高可用性有更高要求。
    • 特点: 多个哨兵相互协作,提高了系统的可用性和冗余性。
    • 部署建议:
      • 选择奇数个哨兵,以确保在网络分区等情况下仍能保持 Quorum。
      • 哨兵分布在不同的物理节点,以提高容错能力。
  3. 配置文件统一管理:

    • 适用情况: 对于较大规模的 Redis 集群,采用配置文件的集中管理方式更为方便。
    • 特点: 统一的配置文件可以使部署和维护更加简便。
    • 部署建议:
      • 使用集中的配置管理工具,如配置中心或版本控制系统,确保所有哨兵实例使用相同的配置。
  4. 安全性保障:

    • 适用情况: 对于要求较高安全性的系统。
    • 特点: 配置密码以保护哨兵之间的通信,限制对监控端口的访问。
    • 部署建议:
      • 使用 SSL/TLS 进行哨兵之间的通信加密。
      • 限制监控端口的访问,确保只有授权的机器能够连接到哨兵。
  5. 高性能环境:

    • 适用情况: 高并发、高吞吐量的生产环境。
    • 特点: 配置合适的硬件和网络环境,避免性能瓶颈。
    • 部署建议:
      • 将哨兵部署在性能较好的机器上。
      • 避免哨兵成为性能瓶颈,确保它们能够及时响应并处理监控任务。

根据具体情况,可以结合以上策略进行定制化的部署方案。在部署之前,建议详细了解应用场景和需求,充分考虑系统的可用性、性能和安全性等方面的因素。

3.3 监控和警报设置

在 Redis Sentinel 中,监控和警报设置是确保系统高可用性的关键步骤。通过设置合适的监控和警报,管理员可以及时发现并处理潜在的问题。以下是哨兵监控和警报设置的一些建议:

  1. 哨兵监控设置:
  • 哨兵的心跳频率:
    • 通过 sentinel down-after-milliseconds 配置项设置哨兵判定节点下线所需的时间。较短的心跳频率可以更快地检测到节点故障,但也可能增加误报的风险。
  • 监控的节点数量:
    • 通过 sentinel parallel-syncs 配置项设置在执行故障转移时,同时同步的从节点个数。可以根据系统的负载和性能需求进行调整。
  • 故障转移的超时时间:
    • 通过 sentinel failover-timeout 配置项设置故障转移的超时时间。确保足够的时间来完成故障转移,同时避免长时间的不可用。
  1. 警报设置:
  • 监控节点状态变化:
    • 配置哨兵通知机制,使其能够实时通知管理员有关节点状态的变化。可以使用电子邮件、短信或集成到监控系统中。
  • 故障转移通知:
    • 设置警报以通知管理员在发生故障转移时采取行动。这有助于管理员了解系统正在经历的变化,并及时进行干预。
  • 阈值报警:
    • 根据系统的性能指标,设置阈值报警,例如内存使用率、CPU负载等。这有助于预防潜在的性能问题。
  1. 日志设置:
  • 记录关键事件:
    • 配置哨兵以记录关键事件和错误信息。这些日志可以帮助管理员在发生故障时进行故障排查和分析。
  • 日志轮转:
    • 设置日志轮转策略,以避免日志文件过大。这有助于保持系统的稳定性和维护日志的可读性。
  1. 安全设置:
  • 哨兵之间的通信加密:
    • 使用 SSL/TLS 等加密方式确保哨兵之间的通信是安全的,防止敏感信息被窃取。
  • 限制监控端口访问:
    • 通过网络策略或防火墙限制监控端口的访问,确保只有授权的机器可以连接到哨兵。

这些设置的具体配置方式可以通过修改 Redis Sentinel 配置文件来实现。根据实际需求和安全策略,管理员应该仔细调整这些配置,以确保系统的监控和警报能够及时、准确地响应潜在的问题。

四、故障恢复和自动故障转移

4.1 故障发现
  1. 哨兵如何检测主节点故障
    Redis Sentinel 通过一系列机制来检测主节点故障,确保及时发现并采取措施进行自动故障转移。以下是主要的检测机制:
    • 心跳检测:

      • Sentinel 通过定期向主节点发送命令来检测其健康状态,这个操作被称为心跳检测。
      • 心跳检测的频率由配置项 sentinel down-after-milliseconds 决定,即在多久没有收到主节点的响应后,哨兵就认为主节点可能故障。
    • 主观下线判定:

      • 当一个哨兵实例连续一定次数没有收到主节点的心跳响应时,该哨兵会主观地判定主节点为下线状态。
      • 连续未收到心跳响应的次数由配置项 sentinel down-after-milliseconds 决定。
    • 客观下线判定:

      • 当多数(Quorum)哨兵都主观地判定主节点下线时,会进行客观下线判定。
      • 客观下线判定是通过哨兵之间的通信达成共识,确保不是单个哨兵的误判。
    • 自动故障转移:

      • 一旦主节点被客观下线判定,哨兵会启动自动故障转移流程。
      • 哨兵会从当前的从节点中选出一个新的主节点,然后通知其他哨兵和 Redis 客户端进行切换。
    • 选主流程中的 Quorum 机制:

    • 在选主过程中,哨兵之间通过 Quorum 机制达成共识。这确保了在多数哨兵的一致性下才执行自动故障转移,防止了脑裂的问题。

通过这些机制,Redis Sentinel 能够在主节点故障的情况下,及时地检测到并采取行动,确保系统的高可用性。心跳检测、主观下线判定、客观下线判定和自动故障转移等机制相互协作,保障了主节点故障的可靠检测和自动处理。

  1. 监控节点状态的关键指标
    监控 Redis 节点状态时,可以关注一些关键的性能指标,这些指标可以帮助管理员及时发现问题、做出调整,并确保系统的稳定运行。以下是一些关键的监控节点状态的指标:
    • 内存使用率:

      • 指标说明: 跟踪 Redis 实例的内存使用情况。
      • 原因: 如果内存使用率接近或达到上限,可能导致系统性能下降,甚至发生内存溢出。
    • CPU 使用率:

      • 指标说明: 监控 Redis 进程的 CPU 使用率。
      • 原因: 高 CPU 使用率可能表明系统面临高负载,需要进一步分析是因为请求量大还是其他原因。
    • 连接数:

      • 指标说明: 跟踪当前与 Redis 服务器建立的连接数。
      • 原因: 高连接数可能对系统性能产生影响,需要确保连接数在可接受范围内。
    • 命令执行速度:

      • 指标说明: 监控 Redis 执行命令的速度。
      • 原因: 如果命令执行速度下降,可能是由于性能瓶颈或系统负载过高引起的。
    • 主从同步延迟:

      • 指标说明: 监控主从节点之间的同步延迟。
      • 原因: 高同步延迟可能表明网络或节点性能问题,影响故障转移和数据一致性。
    • 持久化操作情况:

      • 指标说明: 跟踪 RDB 快照和 AOF 文件的持久化操作情况。
      • 原因: 检查持久化操作是否正常,防止数据丢失,确保数据的持久性。
    • 慢查询日志:

      • 指标说明: 监控慢查询日志,记录执行时间超过阈值的命令。
      • 原因: 识别慢查询可以帮助优化性能和改进查询。
    • 网络 I/O 情况:

      • 指标说明: 监控 Redis 服务器的网络 I/O 情况。
      • 原因: 高网络延迟或低带宽可能导致请求响应时间变长。
    • 集群节点状态:

      • 指标说明: 在 Redis 集群环境中,监控各个节点的状态。
      • 原因: 确保集群中的所有节点都处于正常运行状态,防止节点故障导致系统不稳定。
    • 哨兵监控信息:

      • 指标说明: 在使用 Redis Sentinel 时,监控哨兵的状态和通信情况。
      • 原因: 保障哨兵正常运行,及时发现主节点故障并执行故障转移。

通过监控这些关键指标,管理员能够全面了解 Redis 节点的状态,及时发现潜在问题,并采取措施进行调整,以确保系统的高可用性和性能。

4.2 自动故障转移
  1. Redis 的无损故障转移
    Redis 通过 Redis Sentinel 实现了无损故障转移的功能。无损故障转移是指在主节点发生故障时,系统能够快速而准确地选择一个从节点升级为新的主节点,而不会丢失已有的数据或服务中断。这种无损故障转移的机制确保了在主节点发生故障时,系统能够迅速选择并晋升一个新的主节点,从而保证了 Redis 的高可用性和数据的一致性。Quorum 机制的使用防止了误操作,确保了在多数哨兵达成一致性的情况下才执行主节点的切换。

  2. 哨兵的决策过程

    • 主节点故障检测:
      • Redis Sentinel 定期向主节点发送心跳检测,如果在指定的时间内未收到主节点的响应,哨兵将主观判定主节点为下线状态。
    • 客观下线判定:
      • 多个哨兵之间进行通信,如果多数哨兵都主观判定主节点为下线,那么会形成客观下线的共识。
    • 选主过程:
      • 当客观下线判定形成后,哨兵会启动选主过程,选出一个新的主节点。这个过程采用 Quorum 机制,确保只有在多数哨兵的一致性下才执行选主。
    • 从节点晋升为新主节点:
      • 选主完成后,新的主节点会从当前的从节点中选出,并晋升为主节点。晋升的过程中,哨兵会确保尽可能地保留已有的数据。
    • 通知其他节点和客户端:
      • 一旦新的主节点选定,哨兵会通知其他从节点和 Redis 客户端,确保它们能够感知到主节点的变化。
    • 自动故障转移完成:
      • 整个自动故障转移过程完成后,系统就恢复到正常运行状态,而且在此过程中没有发生数据丢失或服务中断。

五、哨兵的高级功能

5.1 Quorum(法定人数)

Quorum(法定人数)是 Redis Sentinel 中的一个关键概念,用于确保在多个哨兵之间达成共识,以防止由于网络分区等问题而导致的误操作。Quorum 的概念涉及到选主过程和客观下线判定,以下是与 Quorum 相关的高级功能:

  1. Quorum 的计算:
    • 在 Redis Sentinel 中,Quorum 的计算公式为 (哨兵总数 / 2) + 1
    • Quorum 决定了选主过程中所需的最小投票数,确保了在集群中节点数为奇数时的正确决策。
    • 例如,如果有 5 个哨兵,则 Quorum 为 (5 / 2) + 1 = 3,表示至少需要 3 个哨兵的一致性来执行选主。
  2. Quorum 在客观下线判定中的应用:
    • 客观下线判定是通过多数哨兵的一致性来确定主节点是否下线的过程。
    • 如果多数哨兵认为主节点下线,则形成客观下线的共识,触发后续的选主过程。
  3. Quorum 在选主过程中的应用:
    • 在选主过程中,每个哨兵会为一个从节点投票,将其晋升为新的主节点。
    • Quorum 确保了选主的合法性,只有当足够多的哨兵投票给同一个从节点时,该从节点才能成为新的主节点。
  4. Quorum 的优势:
    • Quorum 机制的使用避免了由于网络分区等原因导致的脑裂问题。即使一部分哨兵无法与其他哨兵通信,依然能够达成 Quorum 的一致性,确保了选主和客观下线判定的正确性。
  5. 动态调整 Quorum:
    • 在一些场景下,可能需要根据集群的规模或要求动态调整 Quorum 的值。
    • 可以通过修改哨兵的配置文件来调整 Quorum 的值,确保在不同规模的集群中仍然能够正确运作。

Quorum 的概念和机制在 Redis Sentinel 中是非常重要的,它保证了在主节点故障的情况下,多个哨兵之间能够达成共识,确保了选主过程的准确性和系统的高可用性。

5.1 哨兵的附加任务

除了主要的监控和故障转移任务外,Redis Sentinel 还可以执行一些附加的任务,这些任务有助于提高系统的稳定性和可维护性。以下是一些哨兵的附加任务:

  1. 配置文件更新:
    • 哨兵可以监视 Redis 集群中各个节点的配置文件,并在配置文件发生变化时负责更新这些变化。这确保了配置的同步性和一致性。
  2. 故障诊断和日志记录:
    • 在发生故障或其他问题时,哨兵会记录相关的日志信息,以帮助管理员进行故障诊断。这些日志包括节点状态变化、故障转移过程、选主过程等信息。
  3. 事件通知和观察:
    • 哨兵可以通过事件通知机制向其他系统或监控工具发送通知,以便实时监控系统状态的变化。这有助于管理员及时了解系统的健康状况。
  4. 节点维护任务:
    • 哨兵可以执行一些节点维护任务,例如定期清理过期的哨兵节点信息,以保持监控系统的清晰和高效。
  5. 网络隔离的处理:
    • 在发生网络隔离时,哨兵可以协助判断集群中的哪些节点受到了隔离,并采取相应的措施,以防止脑裂的问题。
  6. 自动添加或删除哨兵:
    • 在动态环境中,可以配置哨兵自动添加或删除到监控集群的哨兵节点。这有助于适应集群规模的变化。
  7. 密码管理:
    • 哨兵可以协助管理集群中节点的密码,确保各个节点的密码一致性,提高系统的安全性。
  8. 实例分级:
    • 哨兵可以为集群中的不同实例分级,以便更灵活地管理和监控不同级别的节点。

这些附加任务使得哨兵不仅仅是一个监控和故障转移的工具,还能够在实际运维中更全面地协助管理员,确保 Redis 集群的稳定性和高可用性。不同的 Redis Sentinel 部署可能会根据具体的需求选择性地启用这些附加任务。

六、最佳实践和注意事项

在部署 Redis Sentinel 时,有一些最佳实践和注意事项可以帮助确保系统的高可用性、稳定性和安全性。以下是一些建议:

6.1 最佳实践:
  1. 奇数个哨兵:
    • 部署奇数个哨兵,以确保在网络分区的情况下仍能维持 Quorum。
  2. 哨兵分布:
    • 将哨兵分布在不同的物理节点或可用区,以提高容错能力。
  3. 配置文件集中管理:
    • 使用集中的配置管理工具,确保所有哨兵实例使用相同的配置文件。
  4. 密码保护:
    • 使用密码保护 Redis 节点,提高系统的安全性。
  5. SSL/TLS 加密:
    • 在哨兵之间的通信中启用 SSL/TLS 加密,确保通信的安全性。
  6. 合理设置心跳频率:
    • 根据实际网络和性能情况,合理设置哨兵的心跳频率。
  7. 监控和警报设置:
    • 配置监控和警报,确保能够及时发现并处理潜在的问题。
  8. 备份和恢复策略:
    • 建立定期备份和恢复策略,以应对数据丢失或损坏的情况。
6.2 注意事项:
  1. 避免单点故障:
    • 避免将所有哨兵部署在同一台机器上,以防止单点故障。
  2. 哨兵版本一致性:
    • 确保所有哨兵实例的版本一致,以避免由于不同版本造成的问题。
  3. 避免哨兵过多:
    • 不要过度部署哨兵,因为哨兵本身也会消耗资源,而且过多的哨兵可能导致网络流量增加。
  4. 合理设置故障转移超时:
    • 避免设置过短的故障转移超时,以防止误判和频繁的故障转移。
  5. 网络和防火墙配置:
    • 配置网络和防火墙,确保哨兵之间的通信和对 Redis 节点的访问是受控的。
  6. 谨慎使用自动故障转移:
    • 谨慎使用自动故障转移,确保在执行故障转移之前充分了解系统状态。
  7. 哨兵的监控策略:
    • 不要依赖于哨兵的自我监控,建议使用外部监控工具对 Redis 节点和哨兵进行监控。

七、C#案例

我们使用 StackExchange.Redis C# 客户端库来连接 Redis Sentinel,获取主节点信息,订阅节点状态变化事件,并模拟主节点的故障转移。首先,确保已安装 StackExchange.Redis NuGet 包。

using System;
using System.Threading.Tasks;
using StackExchange.Redis;class Program
{static async Task Main(){// 连接到 Redis Sentinelvar connectionMultiplexer = ConnectionMultiplexer.Connect("your_sentinel_address:26379");// 获取 Redis Sentinel 实例var sentinel = connectionMultiplexer.GetSentinelMasterConnection("your_master_name");// 获取并显示主节点信息var master = sentinel.GetMasterInformation();Console.WriteLine($"Initial Master Name: {master.Name}");// 订阅主节点状态变化事件var subscriber = connectionMultiplexer.GetSubscriber();await subscriber.SubscribeAsync("+switch-master", (channel, message) =>{Console.WriteLine($"Master Switched! New Master: {message}");});// 模拟主节点故障转移,可通过停止 Redis 主节点进程来触发Console.WriteLine("Simulating Master Failure...");Console.WriteLine("Press Enter to continue after simulating failure.");Console.ReadLine();// 获取并显示故障转移后的新主节点信息master = sentinel.GetMasterInformation();Console.WriteLine($"New Master Name: {master.Name}");// 关闭连接connectionMultiplexer.Close();}
}

在此示例中,你需要替换 “your_sentinel_address” 和 “your_master_name” 为你的 Redis Sentinel 地址和主节点的名称。在运行该示例时,模拟主节点故障转移时,你将看到订阅的事件输出了新的主节点信息。
这个简单的示例演示了如何使用 C# 连接到 Redis Sentinel,获取主节点信息,并订阅节点状态变化事件。在实际应用中,你可能需要处理更多的异常情况、安全性问题,并适应你的具体用例。

八、总结

Redis Sentinel是Redis的高可用性解决方案,通过监控和自动故障转移确保系统稳定运行。其核心概念包括心跳检测、客观下线判定、Quorum机制等,通过这些机制无损地实现主节点故障转移。哨兵还执行附加任务,如配置文件更新、故障诊断和日志记录等,提高系统可维护性。在实践中,确保哨兵数为奇数、合理分布、配置文件一致性,以及配置监控和警报是关键最佳实践。注意避免单点故障、保持哨兵版本一致、网络和防火墙配置等也是重要的注意事项。综合而言,遵循最佳实践并注意系统配置和部署细节,可以有效保障Redis Sentinel在高可用性方面的成功运行。

相关文章:

【C#与Redis】--高级主题--Redis 哨兵

一、简介 1.1 哨兵的概述 哨兵(Sentinel)是 Redis 分布式系统中用于监控和管理多个 Redis 服务器的组件。它的主要目标是确保 Redis 系统的高可用性,通过实时监测主节点和从节点的状态,及时发现并自动处理故障,保证系…...

linux安装python

文章目录 前言一、下载安装包二、安装1.安装依赖2.解压3.安装4.软链接5.验证 总结 前言 本篇文章介绍linux环境下安装python。 一、下载安装包 下载地址:官方网站 我们以最新的标准版为例 二、安装 1.安装依赖 yum -y install openssl-devel ncurses-devel li…...

【如何破坏单例模式(详解)】

✅如何破坏单例模式 💡典型解析✅拓展知识仓✅反射破坏单例✅反序列化破坏单例✅ObjectlnputStream ✅总结✅如何避免单例被破坏✅ 避免反射破坏单例✅ 避免反序列化破坏单例 💡典型解析 单例模式主要是通过把一个类的构造方法私有化,来避免重…...

什么是 SPI,它有什么用?

文章目录 什么是 SPI,它有什么用? 什么是 SPI,它有什么用? SPI 全称是 Service Provider Interface ,它是 JDK 内置的一种动态扩展点的实现。 简单来说,就是我们可以定义一个标准的接口,然后第三…...

FolkMQ 新的消息中间件,v1.0.25

简介 采用 “多路复用” “内存运行” “快照持久化” “Broker 集群模式”(可选)基于 Socket.D 网络应用协议 开发。全新设计,自主架构! 角色功能生产端发布消息(Qos0、Qos1)、发布定时消息&#xff…...

小程序入门-登录+首页

正常新建一个登录页面 创建首页和TatBar,实现登录后底部出现两个按钮 代码 "pages": ["pages/login/index","pages/index/index","pages/logs/logs" ],"tabBar": {"list": [{"pagePath"…...

React快速入门之组件

目录 组件JSX在标签使用{}嵌入JS表达式使用组件组件嵌套以🌲树的方式管理组件间的关系组件纯粹原则 组件 文件:Profile.js export default function Profile({isPacked true,head,stlyeTmp,src,size 80}) {if (isPacked) {head head &q…...

.NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布

作者: Jon Galloway - Principal Program Manager, .NET Community Team Mehul Harry - Product Marketing Manager, .NET, Azure Marketing 排版:Alan Wang .NET Conf 2023 是有史以来规模最大的 .NET 会议,来自全球各地的演讲者进行了 100 …...

Hadoop入门学习笔记——六、连接到Hive

视频课程地址:https://www.bilibili.com/video/BV1WY4y197g7 课程资料链接:https://pan.baidu.com/s/15KpnWeKpvExpKmOC8xjmtQ?pwd5ay8 Hadoop入门学习笔记(汇总) 目录 六、连接到Hive6.1. 使用Hive的Shell客户端6.2. 使用Beel…...

【K8S 基本概念】Kurbernetes的架构和核心概念

目录 一、Kurbernetes 1.1 简介 1.2、K8S的特性: 1.3、docker和K8S: 1.4、K8S的作用: 1.5、K8S的特性: 二、K8S集群架构与组件: 三、K8S的核心组件: 一、master组件: 1、kube-apiserve…...

WPS复选框里打对号,显示小太阳或粗黑圆圈的问题解决方法

问题描述 WPS是时下最流行的字处理软件之一,是目前唯一可以和微软office办公套件相抗衡的国产软件。然而,在使用WPS的过程中也会出现一些莫名其妙的错误,如利用WPS打开docx文件时,如果文件包含复选框,经常会出…...

对“企业数据资源相关会计处理暂行规定“的个人理解

附:2023年数据资源入表白皮书下载: 关注WX公众号: commindtech77, 获得数据资产相关白皮书下载地址 1. 回复关键字:数据资源入表白皮书 下载 《2023数据资源入表白皮书》 2. 回复关键字:光大银行 下载 光…...

JavaScript:函数隐含对象arguments/剩余参数. . .c/解构赋值

除了this,在函数内部还存在着一个隐含的参数arguments arguments 是一个类数组对象(伪数组) 调用函数时传递的所有实参,都被存储在arguments中 arguments[0] 表示的是第一个实参 arguments[1] 表示的是第二个实参 以此类推..…...

MFC窗体背景颜色的设置、控件白色背景问题、控件文本显示重叠问题、被父窗体背景覆盖的问题

文章目录 设置mfc窗体背景颜色窗体设置背景颜色后解决控件白色背景解决重复修改控件文本后重叠的问题自绘控件被父窗体背景覆盖的问题 设置mfc窗体背景颜色 设置窗体的背景颜色非常简单,只需要在窗体的OnEraseBkgnd里面填充窗体背景就可以了,甚至直接画…...

c++简易AI

今天小编一时雅兴大发&#xff0c;做了一个c的简易AI&#xff0c;还是很垃圾的&#xff01; 题外话&#xff08;每期都会有&#xff09;&#xff1a;我的蛋仔名叫酷影kuying&#xff0c;大家能加我好友吗&#xff1f; 上代码咯&#xff01; #include<bits/stdc.h> #in…...

java获取两个List集合之间的交集、差集、并集

文章目录 方式一、jdk8 Stream求交集、并集、差集方式二、求交集方式三、collections4.CollectionUtils求交集、差集、并集 本文总结一下java中获取两个List之间的交集、补集、并集的几种方式。 最常用的通过for循环遍历两个集合的方式在这里就不整理了&#xff0c;主要整理一些…...

轻松实现iphone截图传电脑

目录 摘要 引言 用户登录工具和连接设备 生成截图 摘要 本篇博文介绍了克魔助手这款工具&#xff0c;解决了iPhone与Windows系统下图片传输的烦恼。通过连接同一Wi-Fi&#xff0c;使用克魔助手轻松实现了iPhone截图传输到电脑上的便捷操作。用户只需简单地下载并安装克魔助…...

【网络安全】upload靶场pass1-10思路

目录 Pass-1 Pass-2 Pass-3 Pass-4 Pass-5 Pass-6 Pass-7 Pass-8 Pass-9 Pass-10 &#x1f308;嗨&#xff01;我是Filotimo__&#x1f308;。很高兴与大家相识&#xff0c;希望我的博客能对你有所帮助。 &#x1f4a1;本文由Filotimo__✍️原创&#xff0c;首发于CSDN&#x1…...

共享单车之数据存储

文章目录 第1关&#xff1a;获取工作簿中的数据第2关&#xff1a;保存共享单车数据 第1关&#xff1a;获取工作簿中的数据 相关知识 获取工作簿中的信息&#xff0c;我们可以使用Java POI&#xff08;POI是一个提供API给Java程序对Microsoft Office格式档案读和写的功能&#…...

Flink(十一)【状态管理】

Flink 状态管理 我们一直称 Flink 为运行在数据流上的有状态计算框架和处理引擎。在之前的章节中也已经多次提到了“状态”&#xff08;state&#xff09;&#xff0c;不论是简单聚合、窗口聚合&#xff0c;还是处理函数的应用&#xff0c;都会有状态的身影出现。状态就如同事务…...

【三维目标检测/自动驾驶】IA-BEV:基于结构先验和自增强学习的实例感知三维目标检测(AAAI 2024)

系列文章目录 论文&#xff1a;Instance-aware Multi-Camera 3D Object Detection with Structural Priors Mining and Self-Boosting Learning 地址&#xff1a;https://arxiv.org/pdf/2312.08004.pdf 来源&#xff1a;复旦大学 英特尔Shanghai Key Lab /美团 文章目录 系列文…...

wefew

123212...

Springboot整合JSP-修订版本(Springboot3.1.6+IDEA2022版本)

1、问题概述&#xff1f; Springboot对Thymeleaf支持的要更好一些&#xff0c;Springboot内嵌的Tomcat默认是没有JSP引擎&#xff0c;不支持直接使用JSP模板引擎。这个时候我们需要自己配置使用。 2、Springboot整合使用JSP过程 现在很多的IDEA版本即使创建的项目类型是WAR工…...

Java核心知识点1-java和c++区别、隐式和显示类型转换

java和c区别 java通过虚拟机实现跨平台特性&#xff0c;但c依赖于特定的平台。java没有指针&#xff0c;它的引用可以理解为安全指针&#xff0c;而c和c一样具有指针。java支持自动垃圾回收&#xff0c;而c需要手动回收。java不支持多重继承&#xff0c;只能通过实现多个接口来…...

C++图论之强连通图

1. 连通性 什么是连通性&#xff1f; 连通&#xff0c;字面而言&#xff0c;类似于自来水管道中的水流&#xff0c;如果水能从某一个地点畅通流到另一个地点&#xff0c;说明两点之间是连通的。也说明水管具有连通性&#xff0c;图中即如此。 无向图和有向图的连通概念稍有差…...

SadTalker数字人增加视频输出mp4质量精度

最近在用数字人简易方案&#xff0c;看到了sadtalker虽然效果差&#xff0c;但是可以作为一个快速方案&#xff0c;没有安装sd的版本&#xff0c;随便找了个一键安装包 设置如上 使用倒是非常简单&#xff0c;但是出现一个问题&#xff0c;就是输出的mp4都出马赛克了 界面上却…...

swing快速入门(三十二)消息对话框

注释很详细&#xff0c;直接上代码 上一篇 新增内容 1.自定义对话框前列图标 2.消息对话框的若干种形式 package swing21_30;import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent;public class swing_test_30 {// 定义一个JFrameJFrame jFrame n…...

《Spring Cloud学习笔记:Nacos配置管理 OpenFeign LoadBalancer Getway》

基于Feign的声明式远程调用&#xff08;代码更优雅&#xff09;&#xff0c;用它来去代替我们之前的RestTemplate方式的远程调用 1. Nacos配置管理&#xff1a;Nacos Config 服务配置中心介绍 首先我们来看一下,微服务架构下关于配置文件的一些问题&#xff1a; 配置文件相…...

深入解析 Flink CDC 增量快照读取机制

一、Flink-CDC 1.x 痛点 Flink CDC 1.x 使用 Debezium 引擎集成来实现数据采集&#xff0c;支持全量加增量模式&#xff0c;确保数据的一致性。然而&#xff0c;这种集成存在一些痛点需要注意&#xff1a; 一致性通过加锁保证&#xff1a;在保证数据一致性时&#xff0c;Debez…...

060:vue中markdown编辑器mavon-editor的应用示例

第060个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下&#xff0c;本专栏提供行之有效的源代码示例和信息点介绍&#xff0c;做到灵活运用。 &#xff08;1&#xff09;提供vue2的一些基本操作&#xff1a;安装、引用&#xff0c;模板使…...

使用SCP在Linux中安全复制文件:参数详解

SCP&#xff08;Secure Copy&#xff09;是一个在Linux和其他类Unix系统中使用的命令行工具&#xff0c;用于在本地和远程主机之间安全地复制文件和目录。本文将详细介绍SCP的多个常用参数&#xff0c;并通过示例进行说明。 基本语法 scp [options] source destination其中&a…...

【动态规划精选题目】3、简单多状态模型

此动态规划系列主要讲解大约10个系列【后续持续更新】 本篇讲解简单多状态模型中的9道经典题&#xff0c;会在讲解题目同时给出AC代码 目录 1、按摩师 2、力扣198:打家劫舍1 3、打家劫舍II 4、删除并获得点数 5、 粉刷房子 6、力扣309:买卖股票的最佳时机含冷冻期 7、 买…...

软件测试/测试开发丨Python 虚拟环境及pip环境管理

venv 虚拟环境管理 venv 虚拟环境的优点 独立的 Python 环境&#xff0c;不会产生冲突有助于包的管理删除和卸载方便 venv 使用方法 创建虚拟环境 python3 -m venv test 激活虚拟环境 切换指定文件夹Windows&#xff1a;/Scripts/macOS&#xff1a;/bin/ 执行指令&#xff…...

Mybatis SQL构建器类 - SQL类

下面是一些例子&#xff1a; // Anonymous inner class public String deletePersonSql() {return new SQL() {{DELETE_FROM("PERSON");WHERE("ID #{id}");}}.toString(); }// Builder / Fluent style public String insertPersonSql() {String sql new…...

海云安亮相2023北京国际金融安全论坛,助力金融企业数字化转型降本增效

近日&#xff0c;2023北京国际金融安全论坛暨金融科技标准认证生态大会在北京金融安全产业园成功举办。深圳海云安网络安全技术有限公司&#xff08;以下简称“海云安”&#xff09;受邀参展亮相此次大会。海云安作为国内领先的金融科技服务商&#xff0c;展示了开发安全系列产…...

nodeJS搭建免费代理IP池爬取贴吧图片实战

之前用python写过爬虫&#xff0c;这次想试试nodeJS爬虫爬取贴吧图片&#xff0c;话不多说代码如下&#xff0c;爬取制定吧的前十页所有帖子里的图片 爬取贴吧图片脚本 你得提前创建一个images文件夹 const axios require("axios"); const cheerio require("…...

基于图搜索的自动驾驶规划算法 - BFS,Dijstra,A*

本文将讲解BFS&#xff0c;Dijstra&#xff0c;A*&#xff0c;动态规划的算法原理&#xff0c;不正之处望读者指正&#xff0c;希望有兴趣的读者能在评论区提出一些这些算法的面试考点&#xff0c;共同学习&#xff0c;一起进步 0 图论基础 图有三种&#xff1a;无向图、有向…...

Spring系列学习四、Spring数据访问

Spring数据访问 一、Spring中的JDBC模板介绍1、新建SpringBoot应用2、引入依赖&#xff1a;3、配置数据库连接&#xff0c;注入dbcTemplate对象&#xff0c;执行查询&#xff1a;4&#xff0c;测试验证&#xff1a; 二、整合MyBatis Plus1&#xff0c;在你的项目中添加MyBatis …...

HBase 创建不分裂的表 ( 禁止 Table Split )

注意&#xff1a;由于 HBase 版本众多&#xff0c;配置表的语法在不同版本上会有差异&#xff0c;本文介绍的配置方法是在 1.4.9 版本上测试的&#xff0c;使用 HBase 2.0 的版本需要核实并修改相关配置方法&#xff01; 有时候&#xff0c;出于特殊需要&#xff0c;我们希望对…...

docker入门概念详解

本篇文章对docker的一些基础概念和周边概念进行了详细解释。帮助你可以很好的理解docker是用来干什么的&#xff0c;docker是怎么工作的。其中有docker所运用到的技术解释&#xff0c;docker的不同发展版本&#xff0c;dokcer的架构&#xff0c;docker的生态等等详解。希望本片…...

C++程序设计实践报告【格式】

C程序设计实践报告 原XX工业学院 C程序设计实践报告 题目&#xff1a; 专业&#xff1a; 学号&#xff1a; 姓名&#xff1a; 年 月 日 目录 一、绪…...

浅谈数据仓库运营

一、背景 企业每天都会产生大量的数据&#xff0c;随着时间增长&#xff0c;数据会呈现几何增长&#xff0c;尤其在系统基建基础好的公司。好的数据仓库需要提前规划和好的运营&#xff0c;才能支持企业的发展&#xff0c;为企业提供数据分析基础。 二、目标 提高数据仓库存储…...

系列六、Consul

一、Consul 1.1、概述 Consul是一套开源的分布式服务发现和配置管理系统&#xff0c;由HashiCorp公司用Go语言开发。他提供了微服务系统中的服务治理、配置中心、控制总线等功能。这些功能中的每一个功能都可以单独使用&#xff0c;也可以一起使用以构建全方位的服务网格&…...

Java集合/泛型篇----第一篇

系列文章目录 文章目录 系列文章目录前言一、ArrayList和linkedList的区别二、HashMap和HashTable的区别三、Collection包结构,与Collections的区别四、泛型常用特点前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站…...

集合使用注意事项

集合使用注意事项总结 集合判空 判断所有集合内部的元素是否为空&#xff0c;使用 isEmpty() 方法&#xff0c;而不是 size()0 的方式 这是因为 isEmpty() 方法的可读性更好&#xff0c;并且时间复杂度为 O(1)。 集合转 Map 在使用 java.util.stream.Collectors 类的 toMap()…...

什么是 JavaScript 中的 WeakMap

在 JavaScript 中&#xff0c;WeakMap 是一种特殊的 Map 数据结构&#xff0c;它允许将对象作为键&#xff0c;而且键值对是弱引用的关系。 与 Map 不同的是&#xff0c;WeakMap 的键只能是对象&#xff0c;不能是其他类型的值。同时&#xff0c;当键对象没有任何引用时&#…...

nodejs+vue+ElementUi农产品团购销售系统zto2c

目标是为了完成小区团购平台的设计和实现&#xff0c;在疫情当下的环境&#xff0c;方便小区业主购入生活所需&#xff0c;减小居民的生活压力 采用B/S模式架构系统&#xff0c;开发简单&#xff0c;只需要连接网络即可登录本系统&#xff0c;不需要安装任何客户端。开发工具采…...

nacos入门篇001-安装与启动

1、下载zip包 我这里下载的是版本2.2.0 Nacos 快速开始 2、修改配置文件 2.1集群模式修改成单例模式 vi startup.sh 2.2 修改数据库配置信息 3、初始化数据库 3.1 创建db名称&#xff1a;db_nacos 3.2 执行mysql-schema.sql 3.3 执行完截图&#xff1a; 4、运行脚本启动 …...

WordPress主题大前端DUX v8.3源码下载

DUX主题8.3版本更新内容&#xff1a; 新增&#xff1a;Cloudflare Turnstile 免费验证功能 新增&#xff1a;子菜单页面模版&#xff0c;支持多级页面 新增&#xff1a;手机端文章内表格自动出现横向滚动条&#xff0c;可集体或单独设置滚动宽度 新增&#xff1a;标签云页面模版…...

RabbitMQ之快速入门、上手

前言 学习一样新技术、新框架&#xff0c;最重要的是学习其思想、原理。即原理性思维。 如果是因为工作原因&#xff0c;需要快速上手RabbitMQ&#xff0c;本篇或许适合你。 核心概念 Connection&#xff1a;publisher&#xff0f;consumer 和 broker 之间的 TCP 连接Channel…...