>데이터 베이스 >Redis >Redis Sentinel Principal, 나는 오랫동안 당신을 참아 왔습니다!

Redis Sentinel Principal, 나는 오랫동안 당신을 참아 왔습니다!

咔咔
咔咔원래의
2020-08-28 17:22:161842검색

redis 마스터-슬레이브 복제의 역할에는 "마스터-슬레이브 복제는 고가용성의 초석"이라는 말이 있습니다. 그렇다면 고가용성은 시스템이 복제할 수 없는 시간을 줄이는 것입니다. 6개의 나인을 기반으로 하는 제공은 고가용성을 달성하는 데 필수적입니다. 이 기사에서는 주로 센티넬 메커니즘을 소개하고, 인터뷰 가이드를 만들고, 이에 따라 기사 작성을 준비합니다. 이 로드맵에는 나중에 추가되지 않은 몇 가지 지식 포인트를 추가하겠습니다. 또한 댓글 영역에서 만나기를 기대합니다!

Redis Sentinel Principal, 나는 오랫동안 당신을 참아 왔습니다!
여기에 그림 설명 삽입

이 글에서는 주로 다음과 같은 측면에서 Sentinel을 소개합니다

  • Sentinel 소개
  • 구성
  • Sentinel 작업 원칙

이 기사의 구현 환경

  • centos7.3 redis4.0
  • redis 작업 디렉토리 /usr/local/redis
  • 가상 머신

1. 센티넬이란 무엇인가요? 마스터-슬레이브 복제를 구성할 때 몇 마디만 말씀드리자면 마스터 노드가 다운되는 상황이 발생합니다. 마스터노드가 다운되면 복제는 존재의미가 없지요.. 데이터가 왕인 시대에 데이터가 없으면 고가용성은 없습니다. 큰 형님이 이 문제를 도와주겠다고 했어요.

마스터노드 마스터는 보스로서 플레이를 이끌어주지 않으니까요. 네 명 중에서 보스를 선택하면 그와 함께 플레이하게 됩니다.

당신과 놀지 않는 상사가 돌아오면 그의 신원은 무효화되고 더 이상 당신의 상사가 될 수 없습니다. 그는 내가 선택한 보스하고만 플레이할 수 있습니다.

위의 대화 과정은 우리가 센티넬을 구성한다는 의미입니다. 우리가 함께 플레이하는 사람은 누구에게 데이터를 제공할 것인가? 일단 센티넬의 역할을 이해하면 계속할 것입니다.

"마지막으로 센티넬이 무엇인지 전문적인 용어로 설명해보겠습니다."

센티넬(Sentinel)은 영어 이름이 센티넬(Sentinel)로, 마스터-슬레이브 구조로 각 서버를 제어하는데 사용되는 분산 시스템입니다.모니터링, 마스터 노드가 실패하면 투표 메커니즘이 사용됩니다. 새 마스터 노드를 선택하고 모든 슬레이브 노드를 새 마스터 노드에 연결합니다. 监控,当主节点出现故障后通过投票机制来挑选新的主节点,并且将所有的从节点连接到新的主节点上。

二、哨兵的作用

上文中我们谈到的对话过程就是哨兵的作用之一自动故障转移。

谈到作用肯定就是这个哨兵到底在工作中到底干了什么事情。我们先用比较干巴的概念描述一下,然后在下文的工作原理会一一谈到。

哨兵的三个作用监控、通知、自动转移故障

2. 보초의 역할

위에서 이야기한 대화 과정은 Sentinel의 기능 중 하나인 자동 장애 조치(Automatic Failover)입니다. 🎜🎜기능에 있어서는 이 파수꾼이 직장에서 하는 일과 정확히 일치해야 합니다. 먼저 비교적 건전한 개념으로 설명하고, 아래에서는 작동원리를 하나씩 이야기해보겠습니다. 🎜🎜 sentry의 세 가지 기능🎜<ul data-tool="mdnice编辑器" style="margin-top: 8px; margin-bottom: 8px; padding-left: 25px; font-size: 15px; color: #595959; list-style-type: circle;"> <li><section style="margin-top: 5px; margin-bottom: 5px; line-height: 26px; font-size: 14px;">모니터링<ul style="margin-top: 8px; margin-bottom: 8px; padding-left: 25px; font-size: 15px; list-style-type: square;"> <li><section style="margin-top: 5px; margin-bottom: 5px; line-height: 26px; font-size: 14px;">누구를 모니터링해야 하나요? 마스터-슬레이브 구조를 지원하려면 하나는 마스터 노드이고 다른 하나는 슬레이브 노드이므로 이 두 노드를 모니터링해야 합니다. </section></li> <li><section style="margin-top: 5px; margin-bottom: 5px; line-height: 26px; font-size: 14px;">마스터 노드와 슬레이브 노드가 정상적으로 실행되고 있는지 모니터링</section></li> <li><section style="margin-top: 5px; margin-bottom: 5px; line-height: 26px; font-size: 14px;">마스터 노드가 살아 있는지 여부와 마스터 노드와 슬레이브 노드의 실행 상태를 감지</section></li> </ul></section></li> <li><section style="margin-top: 5px; margin-bottom: 5px; line-height: 26px; font-size: 14px;">Notify<ul style="margin-top: 8px; margin-bottom: 8px; padding-left: 25px; font-size: 15px; list-style-type: square;"><li><section style="margin-top: 5px; margin-bottom: 5px; line-height: 26px; font-size: 14px;"> Sentinel이 서버에 문제가 있는 경우 다른 Sentinel에게 알림을 보냅니다. Sentinel은 WeChat 그룹과 동일하며 이 그룹에 게시됩니다. </section></li></ul></section></li> <li><section style="margin-top: 5px; margin-bottom: 5px; line-height: 26px; font-size: 14px;">자동 장애 조치<ul style="margin-top: 8px; margin-bottom: 8px; padding-left: 25px; font-size: 15px; list-style-type: square;"><li><section style="margin-top: 5px; margin-bottom: 5px; line-height: 26px; font-size: 14px;">마스터 노드의 다운이 감지되면 다운된 마스터 노드에 연결된 모든 슬레이브 노드의 연결을 끊고 슬레이브 노드 중 하나를 마스터 노드로 선택한 후 다른 노드를 교체합니다. 슬레이브 노드 노드는 이 최신 마스터 노드에 연결됩니다. 그리고 클라이언트에게 최신 서버 주소를 알려주세요. </section></li></ul></section></li> </ul> <p data-tool="mdnice编辑器" style="padding-top: 8px; padding-bottom: 8px; line-height: 26px; margin-top: 10px; margin-bottom: 10px; font-size: 14px; word-spacing: 2px;">여기서 한 가지 주의할 점은 Sentinel도 Redis 서버이지만 외부 세계에 어떠한 서비스도 제공하지 않는다는 점입니다. </p> <p data-tool="mdnice编辑器" style="padding-top: 8px; padding-bottom: 8px; line-height: 26px; margin-top: 10px; margin-bottom: 10px; font-size: 14px; word-spacing: 2px;">센티넬을 홀수로 구성하세요. 그렇다면 Sentinel 서버 수를 홀수로 구성하는 이유는 무엇입니까? 이 질문을 통해 아래에서 원하는 답변을 찾을 수 있습니다. </p> <h1 data-tool="mdnice编辑器" style="margin-top: 30px; margin-bottom: 15px; padding: 0px; color: black; font-size: 25px;"> <span class="prefix" style="color: rgb(64, 184, 250); display: none;"></span><span class="content" style="display: inline-block; color: rgb(64, 184, 250);"> 2. 센티넬 구성 방법 </span><span class="suffix" style="display: inline-block; color: rgb(64, 184, 250);"></span> </h1> <h2 data-tool="mdnice编辑器" style="margin-top: 30px; margin-bottom: 15px; padding: 0px; color: black; font-size: 22px; border-bottom: 4px solid rgb(64, 184, 250);"> <span class="prefix" style="display: flex; width: 20px; height: 20px; background-size: 20px 20px; background-image: url(https://my-wechat.mdnice.com/fullstack-1.png); margin-bottom: -22px;"></span><span class="content" style="display: flex; color: #40B8FA; font-size: 20px; margin-left: 25px;"> 1. 준비 </span><span class="suffix" style="display: flex; box-sizing: border-box; width: 200px; height: 10px; border-top-left-radius: 20px; background: RGBA(64, 184, 250, .5); color: rgb(255, 255, 255); font-size: 16px; letter-spacing: 0.544px; justify-content: flex-end; float: right; margin-top: -10px; box-sizing: border-box !important; overflow-wrap: break-word !important;"></span> </h2> <p data-tool="mdnice编辑器" style="padding-top: 8px; padding-bottom: 8px; line-height: 26px; margin-top: 10px; margin-bottom: 10px; font-size: 14px; word-spacing: 2px;">이 장에서는 센티넬 구성을 시작하고 사전 작업을 준비합니다. 아래 사진은 카카의 준비 모습입니다. 클라이언트 8개, 센티넬 3개, 마스터 노드 1개, 슬레이브 노드 2개, 마스터 노드 클라이언트 1개, 슬레이브 노드 클라이언트 1개를 시작합니다. <img src="https://img-blog.csdnimg.cn/2020060222590276.png" alt="Redis Sentinel Principal, 나는 오랫동안 당신을 참아 왔습니다!" style="max-width:90%"></p> <h2 data-tool="mdnice编辑器" style="margin-top: 30px; margin-bottom: 15px; padding: 0px; color: black; font-size: 22px; border-bottom: 4px solid rgb(64, 184, 250);"> <span class="prefix" style="display: flex; width: 20px; height: 20px; background-size: 20px 20px; background-image: url(https://my-wechat.mdnice.com/fullstack-1.png); margin-bottom: -22px;"></span><span class="content" style="display: flex; color: #40B8FA; font-size: 20px; margin-left: 25px;">2.Sentinel.conf 구성 해석</span><span class="suffix" style="display: flex; box-sizing: border-box; width: 200px; height: 10px; border-top-left-radius: 20px; background: RGBA(64, 184, 250, .5); color: rgb(255, 255, 255); font-size: 16px; letter-spacing: 0.544px; justify-content: flex-end; float: right; margin-top: -10px; box-sizing: border-box !important; overflow-wrap: break-word !important;"></span> </h2> <p data-tool="mdnice编辑器" style="padding-top: 8px; padding-bottom: 8px; line-height: 26px; margin-top: 10px; margin-bottom: 10px; font-size: 14px; word-spacing: 2px;">sentinel에서 사용하는 구성 파일은<code style="overflow-wrap: break-word; margin: 0px 2px; font-family: " operator mono consolas monaco menlo monospace word-break: break-all color: rgb background: rgba padding: border-radius: height: line-height:>sentinel.confRedis Sentinel Principal, 나는 오랫동안 당신을 참아 왔습니다!我们来对sentinel.conf配置信息进行解读Redis Sentinel Principal, 나는 오랫동안 당신을 참아 왔습니다!但是大多数都是注释,这里咔咔给大家提供一个命令来过滤这些无用信息 cat sentinel.conf | grep -v '#' | grep -v '^$'Redis Sentinel Principal, 나는 오랫동안 당신을 참아 왔습니다!

  • port 26379: 외부 서비스 포트 번호
  • dir /tmp: 센티넬 작업 정보 저장
  • sentinel monitor mymaster 127.0.0.1 6379 2: 모니터링 대상이 누구인지, 이름은 사용자 정의 가능, 뒤의 2 또한 마스터 노드가 다운된 것으로 판단하는 센티널이 두 개 있는 경우 마스터 노드는 일반적으로 센티널 수의 절반에 1을 더한 값으로 설정됩니다.
  • sentinel down-after-milliseconds mymaster 30000: 센티널이 응답 없이 마스터 노드에 연결하는 데 시간이 얼마나 걸리나요? 이는 다운되었음을 의미합니다. 다음 30000은 밀리초, 즉 30초입니다.
  • sentinel parallel-syncs mymaster 1: 이 구성 항목은 장애 조치 중에 새 마스터 노드와 동기화할 수 있는 최대 슬레이브 노드 수를 나타냅니다. 값이 작을수록 장애 조치를 완료하는 데 시간이 오래 걸립니다. 값이 클수록 데이터 동기화로 인해 사용할 수 없는 슬레이브 노드가 늘어납니다.
  • sentinel 장애 조치 시간 초과 mymaster 180000: 동기화 프로세스 중에 완료하는 데 걸리는 시간이 유효한 것으로 간주됩니다. 시스템 기본값은 3분입니다.

3. 구성 시작

명령 사용 cat sentinel.conf | grep -v '#' | grep -v '^$' > ./data/sentinel-26379.conf把sentinel.conf过滤后的信息移到/usr/local/redis/confRedis Sentinel Principal, 나는 오랫동안 당신을 참아 왔습니다!然后打开sentinel-26379.conf修改信息存放目录Redis Sentinel Principal, 나는 오랫동안 당신을 참아 왔습니다!然后快速的复制俩个哨兵配置文件,端口为26380和26381。sed 's/26379/26381/g' sentinel-26379.conf > sentinel-26381.conf

Redis Sentinel Principal, 나는 오랫동안 당신을 참아 왔습니다!
여기에 그림 설명 삽입

마스터-슬레이브 복제가 정상적인 작동 상태인지 테스트하고 세 개의 Redis 서버를 시작하며 포트는 6379, 6380, 6381마스터 노드 정보를 보면 슬레이브 노드가 2개 연결되어 있고 포트는 각각 6380과 6381입니다. 6379、6380、6381Redis Sentinel Principal, 나는 오랫동안 당신을 참아 왔습니다!查看主节点信息,是有俩台从节点在连接着,端口分别为6380、6381。

这里有一个小小的点就是lag怎么一个是1一个是0呢!lag是延迟时间,我这里是本地测试所以会出现0的情况,使用云服务器是很少出现的。lag的值为0和1都属于正常。Redis Sentinel Principal, 나는 오랫동안 당신을 참아 왔습니다!测试主节点添加一个hash值,hset kaka name kakaRedis Sentinel Principal, 나는 오랫동안 당신을 참아 왔습니다!여기서 작은 점은 시차 중 하나가 1이고 다른 하나가 0이라는 것입니다! lag는 지연 시간입니다. 로컬에서 테스트 중이라 0이 되는 상황이 발생합니다. 클라우드 서버를 사용할 때는 이런 일이 거의 발생하지 않습니다. 지연 값은 0과 1로 정상입니다. 여기에 이미지 설명 삽입해시 값을 추가하려면 hset kaka name kaka

slave1과slave2에서 각각 kaka 값을 가져오고 마스터-슬레이브 복제 여부를 감지합니다. 정상적으로 실행 중입니다. 🎜

테스트 후 마스터-슬레이브 구조가 정상적으로 실행되고 있습니다. Redis Sentinel Principal, 나는 오랫동안 당신을 참아 왔습니다!Redis Sentinel Principal, 나는 오랫동안 당신을 참아 왔습니다!Start a Sentinelredis-sentinel 26379-sentinel.confRedis Sentinel Principal, 나는 오랫동안 당신을 참아 왔습니다!连接26379哨兵,主要是最后一行,监控的主节点名为mymaster,状态正常,从节点有俩个,哨兵数量为1个Redis Sentinel Principal, 나는 오랫동안 당신을 참아 왔습니다!在来查看一下26379的哨兵配置信息,这个时候已经改动了Redis Sentinel Principal, 나는 오랫동안 당신을 참아 왔습니다!在启动一个26380的哨兵,redis-sentinel 26380-sentinel.conf,这里注意一下最后一行多了一条信息,这个id就是我们26379구성 파일에 새로 추가된 IDRedis Sentinel Principal, 나는 오랫동안 당신을 참아 왔습니다!그러면 새로 추가된 26380 Sentinel의 ID이기도 한 Sentinel 26379의 클라이언트가 나옵니다Redis Sentinel Principal, 나는 오랫동안 당신을 참아 왔습니다!이번에는 26379 Sentinel의 구성 파일을 확인하고 있는데, 처음으로 구성 확인 파일에 26380 Sentinel이 구성되어 있지 않습니다. 두 번째로 볼 때 26380 Sentinel을 구성한 후에 해당 정보가 추가되었습니다. Redis Sentinel Principal, 나는 오랫동안 당신을 참아 왔습니다!마지막으로 Sentinel 클라이언트 3을 시작해야 합니다. 포트 번호는 26381입니다. 시작 후 Sentinel 26380의 정보를 추가하면 Sentinel 26381에도 구성 정보와 서버 정보가 변경됩니다.

여기까지 Sentinel 구성이 끝났습니다. 다음으로 마스터 노드를 종료하겠습니다. Redis Sentinel Principal, 나는 오랫동안 당신을 참아 왔습니다!30초를 기다린 후 26379 Sentinel의 클라이언트로 이동하게 되므로 여기에 몇 가지 새로운 정보가 추가되었습니다. 이 모든 정보가 완료되었습니다. 분석해 보겠습니다.

Redis Sentinel Principal, 나는 오랫동안 당신을 참아 왔습니다!여기서 먼저 몇 가지 정보를 알아야 합니다

  • +sdown: 이 정보는 마스터 노드가 다운되었다고 생각하는 세 명의 파수꾼 중 하나를 나타냅니다.
  • +odown: 이 정보는 다른 하나를 나타냅니다. Sentinel 두 대가 마스터 노드에 연결했는데 마스터 노드가 실제로 다운된 것을 발견하고
  • 투표를 시작했습니다. 여기서 Kaka는 redis4.0을 사용하는데 이 정보는 버전마다 약간 다릅니다
  • + switch-master mymaster 127.0.0.1 6379 127.0.0.1 6380: 여기까지는 센티넬이 시작한 투표의 결과가 나오고 포트 6380을 사용하는 Redis가 마스터 노드
  • +슬레이브 슬레이브 127.0.0.1로 선택됩니다. 6381 127.0.0.1 6381 @ mymaster 127.0 .0.1 6380: 여기서는 포트 6381과 6379와 새 마스터 노드 6380
  • +sdown 슬레이브 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 1을 연결합니다. 27.0.0.1 6380 : 마지막 문장은 포트 6379가 아직 온라인이 아니어서 오프라인으로 쫓겨났다는 것입니다

6379의 Redis 서버를 다시 온라인에 올려놓으면 Sentinel 서버가 두 문장으로 응답한 것을 볼 수 있습니다. 한 문장은 6379를 오프라인에서 제거하는 것입니다. 마지막 문장은 6379를 새 마스터 노드에 다시 연결하는 것입니다. Redis Sentinel Principal, 나는 오랫동안 당신을 참아 왔습니다!Redis Sentinel Principal, 나는 오랫동안 당신을 참아 왔습니다!이때 마스터 노드는 6380입니다. Redis 클라이언트에서 6380이라는 값을 설정하여 마스터-슬레이브 복제가 제대로 작동하는지 확인해보세요.

새 마스터 노드 6380에 목록 유형을 추가하세요.Redis Sentinel Principal, 나는 오랫동안 당신을 참아 왔습니다!6379와 6381에서 이 값을 얻으세요. 그게 전부입니다! 감시 모드 구성이 완료되었습니다. Redis Sentinel Principal, 나는 오랫동안 당신을 참아 왔습니다!Redis Sentinel Principal, 나는 오랫동안 당신을 참아 왔습니다!

3. Sentinel의 작동 원리

Sentinel을 구성한 후에는 작동 원리를 분석해야 합니다. Workflow를 알아야만 Sentinel을 더 잘 이해할 수 있습니다.

이 글에서 설명하는 원칙은 그리 딱딱하지 않습니다! 기술 문서를 스토리로 읽을 수 있습니다.

요컨대 센트리의 역할은 모니터링, 알림, 장애 조치입니다. 그러면 작동 원리도 이 세 가지 사항을 중심으로 진행됩니다.

1. 모니터링 워크플로우

Redis Sentinel Principal, 나는 오랫동안 당신을 참아 왔습니다!
여기에 그림 설명 삽입
  1. 센티넬은 info 명령을 보내고 모든 센티넬 상태, 마스터 노드 및 슬레이브 노드 정보를 저장합니다
  2. 마스터 노드는 redis 인스턴스의 정보를 기록하게 됩니다. 마스터 노드가 기록한 정보는 센티넬이 기록한 정보와 실제로는 약간의 차이가 있습니다.
  3. Sentinel도 마스터 노드에서 얻은 슬레이브 노드 정보를 기반으로 해당 슬레이브 노드에 info 명령을 보냅니다
  4. Sentinel 2가 오면 마스터 노드도 변경하여 info 명령을 보내고 cmd를 생성합니다. 연결
  5. 이때 Sentinel 2도 Sentinel 1과 동일한 정보를 저장하지만, Sentinel 2개의 정보만 저장됩니다.
  6. 이때 각 센티널의 정보가 일관되도록 게시와 구독이 설정됩니다. 센티널 간 정보의 장기적인 대칭성을 보장하기 위해 센티넬은 서로에게 ping 명령도 보냅니다.
  7. 다른 Sentinel 3가 오면 동일한 작업을 수행하고 마스터 노드와 슬레이브 노드에 정보를 보냅니다. 그리고 Sentinel 1 및 Sentinel 2와 연결을 설정합니다.

2. 알림 워크플로

Sentinel은 마스터와 슬레이브의 모든 노드에 명령을 보내 상태를 확인하고 해당 정보를 Sentinel 구독에 게시합니다. Redis Sentinel Principal, 나는 오랫동안 당신을 참아 왔습니다!

3. 장애 조치 원칙(이 기사의 초점)

Redis Sentinel Principal, 나는 오랫동안 당신을 참아 왔습니다!
여기에 그림 설명 삽입
  • 센티널이 보고할 때까지 계속해서 게시 센티넬: hello to the 마스터 노드를 보냅니다. sdown. 이 단어는 여러분에게 조금 친숙해 보일 수도 있습니다. 그렇죠. 위에서 마스터 노드 연결을 끊은 후 Sentinel 서버에서 보고한 정보입니다. Sentinel이 마스터 노드 다운을 보고한 후에도 아직 완료되지 않은 상태이므로 마스터 노드가 다운되었음을 나타내는 메시지를 인트라넷에 게시합니다. 전송된 명령은
  • sentinel is-master-down-by-address-port
  • 其余的哨兵接收到指令后,主节点挂了吗?让我去看看到底挂没挂。发送的信息也是hello。其余的哨兵也会发送他们收到的信息并且发送指令sentinel is-master-down-by-address-port到自己的内网,确认一下第一个发送sentinel is-master-down-by-address-port的哨兵说你说的对,这个家伙确实挂了。当所有人都认为主节点挂了后就会修改其状态为odown。当一个哨兵认为主节点挂了标记的是sdown,当半数哨兵都认为挂了其标记的状态是odown🎜나머지 센트리가 지시를 받은 후 마스터 노드가 전화를 끊었나요? 가서 정지되는지 확인하겠습니다. 보낸 메시지도 hello입니다. 나머지 보초도 자신이 받은 메시지를 보내고 sentinel is-master-down-by-address-port자신의 인트라넷으로 이동하여 전송된 첫 번째 항목을 확인하세요sentinel is-master-down-by-address-port의 Sentinel이 당신 말이 맞다고 말했습니다. 이 사람은 정말 다운되었습니다. . 모두가 마스터 노드가 다운되었다고 생각하면 상태가 o아래. 센티넬은 마스터 노드가 플래그 지정되었다고 간주합니다. color: rgb(53, 148, 247); background: rgba(59, 170, 250, 0.1); border-radius: 2px ; height: 21px; line-height: 22px;" >sdown, 보초 중 절반이 자신의 표시 상태가 odown. 이것이 센티넬이 홀수로 구성되는 이유입니다.
  • 한 센티넬이 메인 노드가 다운됐다고 생각하는 것을 주관적 오프라인이라 하고, 센티넬 중 절반이 메인 노드가 다운됐다고 생각하는 것을 게스트 공식 오프라인이라고 합니다.
  • 마스터노드 게스트 오피서가 오프라인으로 간주되면 Sentinel은 다음 단계로 진행합니다
  • 이때 Sentinel이 문제를 감지했으므로 어떤 Sentinel이 새로운 책임자를 선출할지를 담당합니다. 메인 노드는 장산이 갈 수 없고, 왕우도 갈 수 있습니다. 그러면 모든 파수꾼 중에서 리더를 선택해야 합니다.

    이번엔! 다섯 명의 파수꾼이 함께 회의를 할 것입니다. 모든 파수꾼은 인트라넷에 있을 것입니다. 그런 다음 그들이 할 일은 다섯 명의 파수꾼이 동시에 명령을 보내고 자신의 선거 시간을 전달하는 것입니다. sentinel is-master-down-by-address-port각 보초는 후보자이자 유권자입니다. 각 보초는 하나의 투표권을 가지며, 봉투는 투표권을 나타냅니다. Redis Sentinel Principal, 나는 오랫동안 당신을 참아 왔습니다!sentinel1과 sentinel4가 동시에 그룹에 선거 준비 지시를 보내면 sentinel2는 이때 지시를 먼저 받는 사람에게 투표하겠다고 합니다. sentinel1이 조기에 릴리스되면 sentinel2의 투표가 sentinel1에 적용됩니다. Redis Sentinel Principal, 나는 오랫동안 당신을 참아 왔습니다!투표는 한 센티넬의 투표가 전체 센티널 수의 절반이 될 때까지 이러한 규칙에 따라 시작됩니다. sentinel1의 투표 수가 총 Sentinel 수의 절반 이상에 도달한 후에 sentinel1이 선출된다고 가정합니다. 이때 다음 단계에 도달하게 됩니다. Redis Sentinel Principal, 나는 오랫동안 당신을 참아 왔습니다!위에서 Sentinel은 모든 슬레이브 노드를 돌아다니며 하나의 마스터 노드를 찾기 위해 sentinel1을 대표로 선택했습니다. 마스터 노드를 선택하는 데에는 무작위로 선택하는 것이 아니라 특정 규칙이 있습니다. Redis Sentinel Principal, 나는 오랫동안 당신을 참아 왔습니다!

    온라인이 아닌 사람들을 먼저 제거하세요

    Redis Sentinel Principal, 나는 오랫동안 당신을 참아 왔습니다!응답이 느린 사람은 종료됩니다. Sentinel은 모든 Redis에 정보를 보냅니다. Redis Sentinel Principal, 나는 오랫동안 당신을 참아 왔습니다!여기에서 데모 이후 오랫동안 원래 마스터 노드에서 연결이 끊어진 사람이 종료됩니다. 충분하지 않습니다. 새로운 슬레이브5가 추가되는 것은 의미가 없습니다! Redis Sentinel Principal, 나는 오랫동안 당신을 참아 왔습니다!위 3가지 사항으로 판단한 결과, 아직 salve4와slave5가 있으며, 우선순위 원칙에 따라 심사하게 됩니다.

    • 우선순위가 동일하면 다른 판단이 이루어집니다.
    • 슬레이브4의 오프셋이 90이고 슬레이브5의 오프셋이 90인 경우. 100이면 센티넬은 슬레이브4의 네트워크에 문제가 있다고 생각하게 될 것입니다! 그러면 Slave5가 새 마스터 노드로 선택됩니다. 슬레이브4와 슬레이브5의 오프셋이 동일하면 어떻게 되나요? 마지막 판단이 하나 남았습니다
    • 마지막 단계는 직장 내 서열인 룬디드를 판단하는 것입니다. 즉, 룬디드의 생성 시간과 가장 빠른 시간을 기준으로 판단합니다. 1위를 차지하게 됩니다.

    Redis Sentinel Principal, 나는 오랫동안 당신을 참아 왔습니다!새 마스터 노드를 선택한 후에는 모든 노드에 지침을 보내야 합니다. Redis Sentinel Principal, 나는 오랫동안 당신을 참아 왔습니다!

    4. 요약

    이것이 센티넬에 대한 모든 지식 포인트입니다. 이 글에서 가장 중요한 것은 센티넬의 작동 원리입니다. 작동 원리를 간략하게 살펴보겠습니다.

    • 첫 번째 모니터와 모든 센티널은 정보를 동기화합니다

    • 센티널은 구독에 정보를 게시합니다

    • Failover

      • Sentinel은 마스터 노드가 오프라인 상태임을 발견했습니다
      • Sentinel은 담당자에 대한 투표를 시작했습니다
      • 담당자는 새로운 마스터 노드를 선출합니다
      • 새 마스터 노드는 원래 마스터 노드의 연결을 끊습니다. , 다른 슬레이브 노드가 연결됩니다. 새로운 마스터 노드는 원래 마스터 노드가 온라인 상태가 된 후 슬레이브 노드로 연결됩니다.

    위 내용은 센티넬에 대한 카카의 이해입니다. 만약 실수가 있을 수 있다면 카카는 제 시간에 이를 수정해 줄 것입니다.

    배움에 대한 끈기, 블로그에 대한 끈기, 공유에 대한 끈기는 카카가 경력 이후부터 지켜온 신념입니다. 거대한 인터넷에 올라온 카카의 글이 여러분에게 조금이나마 도움이 되기를 바랍니다. 다음 호에는 당신이 있습니다.

    추천: "Redis Tutorial"

    위 내용은 Redis Sentinel Principal, 나는 오랫동안 당신을 참아 왔습니다!의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.