이 글은 Redis의 센트리 모드에 대해 소개하겠습니다. 도움이 되셨으면 좋겠습니다!
Redis 마스터-슬레이브 모드. 마스터 노드가 실패하면 슬레이브 노드가 마스터 노드로 업그레이드될 수 있습니다. 동시에 마스터 노드 주소를 업데이트하라는 알림을 받아야 합니다. . 따라서 Redis는 이 문제를 해결하기 위해 Redis Sentinel
Redis Sentinel
哨兵机制 来解决这个问题。【相关推荐:Redis视频教程】
psync
。此时如果同步不成功,则会进行全量同步,主库执行全量备份的同时,可能会造成毫秒或秒级的 卡顿
一般来说,每个 <code>Sentinel 节点会不断的 对其他 <code>Sentinel 节点和 Redis
节点发送 PING
,通过是否回复来确认是否在线
down-after-milliseconds
毫秒内,Sentinel
没有收到目标节点的有效回复,则会判定该节点为主观下线。Sentinel
节点会通过 sentinel is-master-down-by-addr
命令,向其它 <code>Sentinel 节点询问对该节点的状态判断。如果超过 <quorum></quorum>
个数的节点判定主节点不可达,则该 <code>SentinelSentinel 메커니즘psync
를 시작합니다. 이때 동기화가 실패하면 전체 동기화가 수행되지만, 기본 데이터베이스가 전체 백업을 수행하는 동안 밀리초 또는 2단계 지연이 발생할 수 있습니다🎜🎜🎜를 지속적으로 모니터링합니다. Redis
노드는 PING
을 보내고 응답으로 온라인 여부를 확인합니다. 🎜 <code>Sentinel
이 밀리초 후 밀리초 내에 대상 노드로부터 유효한 응답을 받지 못하면 해당 노드가 주관적으로 오프라인 상태라고 판단합니다. 🎜sentinel is-master-down-by-addr
를 전달합니다. > 이 노드의 상태 판단을 위해 다른 <code>Sentinel 노드를 쿼리하는 명령입니다. <quorum></quorum>
개 이상의 노드가 기본 노드에 연결할 수 없다고 판단하면 <code>Sentinel 노드는 기본 노드가 객관적으로 오프라인이라고 판단합니다. 🎜🎜🎜🎜2. 작동 원리🎜🎜🎜🎜🎜1회/초
의 빈도로 다른 <code>Sentinel 노드와 Redis
마스터-슬레이브 노드에 전송합니다. > PING
명령. Sentinel
以 1次/s
频率,向其他 <code>Sentinel 节点、Redis
主从节点发送 PING
指令。PING
命令超过 down-after-milliseconds
,这个实例被 <code>Sentinel 标记为 主观下线。1次/s
确认此主服务器是否进入主观下线状态<quorum></quorum>
个数的节点判定主节点不可达,则该 <code>Sentinel 节点会判断主节点为 客观下线。Sentinel
向下线服务器的所欲服务器发送 INFO
命令,会从10次/s
改为 1次/s
。Sentinel
节点之间协商主节点状态,如果主节点处于 SDOWN
状态,则投票自动选出新的 主节点。将剩余的 从节点 指向 新的主节点 进行 数据复制。PING
命令返回 有效回复 时,主服务器 的 主观下线状态 就会被移除。Redis 采用主从复制的模式,一旦主节点挂掉,从节点正在同步的数据可能会丢失,延迟越大,丢失的越多。
Redis 提供了两个配置项来限制主库的请求处理,分别是 min-slaves-to-write
和 min-slaves-max-lag
。
这两个配置项组合后的要求是,主库连接的从库中至少有 N 个从库,和主库进行数据复制时的 ACK 消息延迟不能超过 T 秒,否则,主库就不会再接收客户端的请求了。
所以,Sentine 无法保证消息完全不丢失,但是也能尽量保证消息少丢失。
Sentinel
인스턴스가 PING
명령에 대한 마지막 유효한 응답으로부터 다운 후 밀리초
이상 경과한 경우 이 인스턴스는 <code>Sentinel Strong>주관적인 오프라인.
초당 1회/ code> 메인 서버가 주관적 오프라인 상태에 진입했는지 확인
<quorum></quorum>
개 이상의 노드가 메인 노드에 접근할 수 없다고 판단하면 <code>Sentinel 노드는 마스터 노드가 객관적으로 오프라인인지 확인합니다.
INFO
명령을 보내며 이는 가 됩니다. >10회/초
가 1회/초
로 변경되었습니다. Sentinel
노드는 마스터 노드 상태를 협상합니다. 마스터 노드가 SDOWN
상태인 경우 투표를 통해 자동으로 새로운 마스터 노드를 선택합니다. 강하다 >. 데이터 복제를 위해 나머지 슬레이브 노드를 새 마스터 노드로 지정합니다. 메인 서버의 오프라인 전환에 동의할 <code>Sentinel이 충분하지 않은 경우 메인 서버객관적인 오프라인 상태 /strong>이 제거됩니다. 메인 서버가 <code>Sentinel의 PING
명령에 대해 유효한 응답을 반환하면 메인 서버 >의 주관적인 오프라인 상태가 제거됩니다.
min-slaves-to-write
및 min-slaves-max-lag
를 제공합니다. 🎜🎜🎜min-slaves-to-write: 이 구성 항목은 마스터 라이브러리가 데이터를 동기화할 수 있는 최소 슬레이브 라이브러리 수를 설정합니다. 🎜min-slaves-max-lag: 이 구성 항목은 최소 수를 설정합니다. 마스터 라이브러리와 슬레이브 라이브러리 간의 슬레이브 라이브러리 수입니다. 데이터 복제를 수행할 때 슬레이브 라이브러리가 마스터 라이브러리에 ACK 메시지를 보내는 최대 지연(초)입니다. 🎜이 두 구성 항목을 결합한 후 요구 사항은 마스터 라이브러리에 연결된 슬레이브 라이브러리가 N개 이상이고 마스터 라이브러리로 데이터를 복제할 때 ACK 메시지 지연이 T를 초과할 수 없다는 것입니다. 그렇지 않으면 기본 라이브러리가 더 이상 클라이언트 요청을 수신하지 않습니다. 🎜🎜따라서 Sentine은 메시지가 전혀 손실되지 않을 것이라고 보장할 수는 없지만 메시지가 가능한 한 적게 손실되도록 노력할 수도 있습니다. 🎜Sentinel
은 고가용성 문제는 해결하지만, 마스터 노드의 단일 노드 확장 문제는 해결하지 못합니다. 🎜🎜더 많은 프로그래밍 관련 지식을 보려면 🎜프로그래밍 소개🎜를 방문하세요! ! 🎜위 내용은 한 기사에서 Redis의 감시 모드에 대해 알아보세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!