>  기사  >  데이터 베이스  >  한 기사에서 Redis의 감시 모드에 대해 알아보세요.

한 기사에서 Redis의 감시 모드에 대해 알아보세요.

青灯夜游
青灯夜游앞으로
2022-01-04 10:10:452229검색

이 글은 Redis의 센트리 모드에 대해 소개하겠습니다. 도움이 되셨으면 좋겠습니다!

한 기사에서 Redis의 감시 모드에 대해 알아보세요.

Redis 마스터-슬레이브 모드. 마스터 노드가 실패하면 슬레이브 노드가 마스터 노드로 업그레이드될 수 있습니다. 동시에 마스터 노드 주소를 업데이트하라는 알림을 받아야 합니다. . 따라서 Redis는 이 문제를 해결하기 위해 Redis Sentinel Redis Sentinel 哨兵机制 来解决这个问题。【相关推荐:Redis视频教程

主从复制的问题

한 기사에서 Redis의 감시 모드에 대해 알아보세요.

1. 主从复制的好处

  • 主节点发生故障,从节点会升级为主节点
  • 扩展主节点的读能力,分担主节点压力

2. 存在的问题

  • 从节点升级主节点的过程需要人工干预,同时要更改客户端Redis服务地址
  • 主节点写能力、存储能力受到单机限制
  • 性能的影响:Redis 复制中断 后从节点会发起 psync。此时如果同步不成功,则会进行全量同步,主库执行全量备份的同时,可能会造成毫秒或秒级的 卡顿

Sentinel 实现原理

1. 一些概念

主要功能

  • 监控 : 不断检查主从服务器是否正常运行
  • 通知 : 一旦某个节点发生故障,会通知其他节点
  • 自动故障转移 : 当主节点不能正常工作会自动进行故障转移,从其中一个从节点升级为主节点
  • 配置提供者 : 客户端不是配置单个节点,而是 <code>Sentinel 节点集合

主观下线和客观下线

一般来说,每个 <code>Sentinel 节点会不断的 对其他 <code>Sentinel 节点和 Redis 节点发送 PING,通过是否回复来确认是否在线

  • 主观下线 : 适用于所有主节点和从节点,如果在 down-after-milliseconds 毫秒内,Sentinel 没有收到目标节点的有效回复,则会判定该节点为主观下线。
  • 客观下线 : 只使用于主节点,如果主节点发生故障,Sentinel 节点会通过 sentinel is-master-down-by-addr 命令,向其它 <code>Sentinel 节点询问对该节点的状态判断。如果超过 <quorum></quorum> 个数的节点判定主节点不可达,则该 <code>SentinelSentinel 메커니즘
  • 을 제공합니다. [관련 권장사항: Redis 동영상 튜토리얼]

마스터-슬레이브 복제 문제

한 기사에서 Redis의 감시 모드에 대해 알아보세요.

1. 마스터-슬레이브 복제의 이점

  • 마스터 노드에 장애가 발생하면 슬레이브 노드는 마스터 노드로 업그레이드 한 기사에서 Redis의 감시 모드에 대해 알아보세요.
  • 마스터 노드의 읽기 용량 확장 및 마스터 노드의 부담 공유🎜

    🎜2. 기존 문제🎜🎜
    • 슬레이브 노드에서 마스터 노드를 업그레이드하는 과정은 수동 개입이 필요하며 클라이언트 Redis 서비스 주소도 동시에 변경되어야 합니다.🎜
    • 마스터 노드의 쓰기 용량과 저장 용량은 다음에 의해 제한됩니다. 단일 머신🎜
    • 성능에 미치는 영향: Redis 복제가 중단된 후 슬레이브 노드가 psync를 시작합니다. 이때 동기화가 실패하면 전체 동기화가 수행되지만, 기본 데이터베이스가 전체 백업을 수행하는 동안 밀리초 또는 2단계 지연이 발생할 수 있습니다🎜🎜🎜

      Sentinel 구현 원칙 h2>

      🎜1. 일부 개념🎜🎜

      🎜주요 기능🎜

      • 🎜 모니터링: 🎜 마스터 및 슬레이브 서버가 정상적으로 실행되고 있는지 지속적으로 확인하세요. 🎜
      • 🎜알림: 🎜 한 노드에 장애가 발생하면 다른 노드에 알림이 전달됩니다. 🎜
      • 🎜자동 장애 조치: 🎜 마스터 노드가 제대로 작동하지 않으면 자동으로 장애 조치, 슬레이브 노드 중 하나를 마스터 노드로 업그레이드🎜
      • 🎜구성 공급자:🎜 클라이언트는 단일 노드가 아닌 <code>Sentinel 노드🎜🎜

        🎜주관적 오프라인 및 목표 오프라인🎜

        🎜일반적으로 각 <code>Sentinel 노드는 다른 <code>Sentinel 노드와 를 지속적으로 모니터링합니다. Redis 노드는 PING을 보내고 응답으로 온라인 여부를 확인합니다. 🎜
        • 🎜주관적 오프라인: 🎜 <code>Sentinel이 밀리초 후 밀리초 내에 대상 노드로부터 유효한 응답을 받지 못하면 해당 노드가 주관적으로 오프라인 상태라고 판단합니다. 🎜
        • 🎜목표 오프라인: 🎜 마스터 노드에만 사용됩니다. 마스터 노드가 실패하면 <code>Sentinel 노드가 sentinel is-master-down-by-addr를 전달합니다. > 이 노드의 상태 판단을 위해 다른 <code>Sentinel 노드를 쿼리하는 명령입니다. <quorum></quorum>개 이상의 노드가 기본 노드에 연결할 수 없다고 판단하면 <code>Sentinel 노드는 기본 노드가 객관적으로 오프라인이라고 판단합니다. 🎜🎜🎜🎜2. 작동 원리🎜🎜🎜🎜🎜
          • 각 <code>Sentinel은 1회/초의 빈도로 다른 <code>Sentinel 노드와 Redis 마스터-슬레이브 노드에 전송합니다. > PING 명령.
          • Sentinel1次/s 频率,向其他 <code>Sentinel 节点、Redis 主从节点发送 PING 指令。
        • 如果一个实例,距离最后有效回复 PING 命令超过 down-after-milliseconds,这个实例被 <code>Sentinel 标记为 主观下线
        • 如果一个 主服务器 被标记为主观下线,那么正在监视这个主服务器的所有 <code>Sentinel 节点,以 1次/s 确认此主服务器是否进入主观下线状态
        • 如果超过 <quorum></quorum> 个数的节点判定主节点不可达,则该 <code>Sentinel 节点会判断主节点为 客观下线
        • 当主服务器被标记为客观下线时,Sentinel 向下线服务器的所欲服务器发送 INFO 命令,会从10次/s 改为 1次/s
        • Sentinel 节点之间协商主节点状态,如果主节点处于 SDOWN 状态,则投票自动选出新的 主节点。将剩余的 从节点 指向 新的主节点 进行 数据复制
        • 当没有足够数量的 <code>Sentinel 同意 主服务器 下线时, 主服务器客观下线状态 就会被移除。当 主服务器 重新向 <code>Sentinel 的 PING 命令返回 有效回复 时,主服务器主观下线状态 就会被移除。

        3. 消息丢失

        Redis 采用主从复制的模式,一旦主节点挂掉,从节点正在同步的数据可能会丢失,延迟越大,丢失的越多。

        Redis 提供了两个配置项来限制主库的请求处理,分别是 min-slaves-to-writemin-slaves-max-lag

        • min-slaves-to-write:这个配置项设置了主库能进行数据同步的最少从库数量;
        • min-slaves-max-lag:这个配置项设置了主从库间进行数据复制时,从库给主库发送 ACK 消息的最大延迟(以秒为单位)。

        这两个配置项组合后的要求是,主库连接的从库中至少有 N 个从库,和主库进行数据复制时的 ACK 消息延迟不能超过 T 秒,否则,主库就不会再接收客户端的请求了

        所以,Sentine 无法保证消息完全不丢失,但是也能尽量保证消息少丢失。

        小结

        Sentinel인스턴스가 PING 명령에 대한 마지막 유효한 응답으로부터 다운 후 밀리초 이상 경과한 경우 이 인스턴스는 <code>Sentinel Strong>주관적인 오프라인.

      • 메인 서버가 주관적으로 오프라인으로 표시되면 이 메인 서버의 모든 <code>Sentinel 노드가 초당 1회/ code> 메인 서버가 주관적 오프라인 상태에 진입했는지 확인

  • <quorum></quorum>개 이상의 노드가 메인 노드에 접근할 수 없다고 판단하면 <code>Sentinel 노드는 마스터 노드가 객관적으로 오프라인인지 확인합니다.

메인 서버가 객관적으로 오프라인으로 표시되면 <code>Sentinel은 오프라인 서버의 모든 서버에 INFO 명령을 보내며 이는 가 됩니다. >10회/초1회/초로 변경되었습니다. Sentinel 노드는 마스터 노드 상태를 협상합니다. 마스터 노드가 SDOWN 상태인 경우 투표를 통해 자동으로 새로운 마스터 노드를 선택합니다. 강하다 >. 데이터 복제를 위해 나머지 슬레이브 노드새 마스터 노드로 지정합니다. 메인 서버의 오프라인 전환에 동의할 <code>Sentinel이 충분하지 않은 경우 메인 서버객관적인 오프라인 상태 /strong>이 제거됩니다. 메인 서버가 <code>Sentinel의 PING 명령에 대해 유효한 응답을 반환하면 메인 서버 >의 주관적인 오프라인 상태가 제거됩니다.

3. 메시지 손실

🎜Redis는 마스터 노드가 정지되면 마스터-슬레이브 복제 모드를 채택합니다. 업하면 슬레이브 노드에서 동기화 중인 데이터가 손실될 수 있으며, 지연 시간이 길어질수록 손실되는 데이터도 늘어납니다. 🎜🎜Redis는 기본 라이브러리의 요청 처리를 제한하는 두 가지 구성 항목, 즉 min-slaves-to-writemin-slaves-max-lag를 제공합니다. 🎜🎜🎜min-slaves-to-write: 이 구성 항목은 마스터 라이브러리가 데이터를 동기화할 수 있는 최소 슬레이브 라이브러리 수를 설정합니다. 🎜min-slaves-max-lag: 이 구성 항목은 최소 수를 설정합니다. 마스터 라이브러리와 슬레이브 라이브러리 간의 슬레이브 라이브러리 수입니다. 데이터 복제를 수행할 때 슬레이브 라이브러리가 마스터 라이브러리에 ACK 메시지를 보내는 최대 지연(초)입니다. 🎜이 두 구성 항목을 결합한 후 요구 사항은 마스터 라이브러리에 연결된 슬레이브 라이브러리가 N개 이상이고 마스터 라이브러리로 데이터를 복제할 때 ACK 메시지 지연이 T를 초과할 수 없다는 것입니다. 그렇지 않으면 기본 라이브러리가 더 이상 클라이언트 요청을 수신하지 않습니다. 🎜🎜따라서 Sentine은 메시지가 전혀 손실되지 않을 것이라고 보장할 수는 없지만 메시지가 가능한 한 적게 손실되도록 노력할 수도 있습니다. 🎜

요약

🎜Sentinel은 고가용성 문제는 해결하지만, 마스터 노드의 단일 노드 확장 문제는 해결하지 못합니다. 🎜🎜더 많은 프로그래밍 관련 지식을 보려면 🎜프로그래밍 소개🎜를 방문하세요! ! 🎜

위 내용은 한 기사에서 Redis의 감시 모드에 대해 알아보세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 juejin.cn에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제