❝redis 마스터-슬레이브 복제의 역할에는 "마스터-슬레이브 복제는 고가용성의 초석"이라는 말이 있습니다. 그렇다면 고가용성은 시스템이 복제할 수 없는 시간을 줄이는 것입니다. 6개의 나인을 기반으로 하는 제공은 고가용성을 달성하는 데 필수적입니다. 이 기사에서는 주로 센티넬 메커니즘을 소개하고, 인터뷰 가이드를 만들고, 이에 따라 기사 작성을 준비합니다. 이 로드맵에는 나중에 추가되지 않은 몇 가지 지식 포인트를 추가하겠습니다. 또한 댓글 영역에서 만나기를 기대합니다!❞
마스터노드 마스터는 보스로서 플레이를 이끌어주지 않으니까요. 네 명 중에서 보스를 선택하면 그와 함께 플레이하게 됩니다.
당신과 놀지 않는 상사가 돌아오면 그의 신원은 무효화되고 더 이상 당신의 상사가 될 수 없습니다. 그는 내가 선택한 보스하고만 플레이할 수 있습니다.
위의 대화 과정은 우리가 센티넬을 구성한다는 의미입니다. 우리가 함께 플레이하는 사람은 누구에게 데이터를 제공할 것인가? 일단 센티넬의 역할을 이해하면 계속할 것입니다.
"마지막으로 센티넬이 무엇인지 전문적인 용어로 설명해보겠습니다."
센티넬(Sentinel)은 영어 이름이 센티넬(Sentinel)로, 마스터-슬레이브 구조로 각 서버를 제어하는데 사용되는 분산 시스템입니다.모니터링, 마스터 노드가 실패하면 투표 메커니즘이 사용됩니다. 새 마스터 노드를 선택하고 모든 슬레이브 노드를 새 마스터 노드에 연결합니다. 监控
,当主节点出现故障后通过投票机制来挑选新的主节点,并且将所有的从节点连接到新的主节点上。
上文中我们谈到的对话过程就是哨兵的作用之一自动故障转移。
谈到作用肯定就是这个哨兵到底在工作中到底干了什么事情。我们先用比较干巴的概念描述一下,然后在下文的工作原理会一一谈到。
哨兵的三个作用监控、通知、自动转移故障
🎜<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.conf
我们来对sentinel.conf配置信息进行解读但是大多数都是注释,这里咔咔给大家提供一个命令来过滤这些无用信息 cat sentinel.conf | grep -v '#' | grep -v '^$'
명령 사용 cat sentinel.conf | grep -v '#' | grep -v '^$' > ./data/sentinel-26379.conf
把sentinel.conf过滤后的信息移到/usr/local/redis/conf
下然后打开sentinel-26379.conf
修改信息存放目录然后快速的复制俩个哨兵配置文件,端口为26380和26381。sed 's/26379/26381/g' sentinel-26379.conf > sentinel-26381.conf
마스터-슬레이브 복제가 정상적인 작동 상태인지 테스트하고 세 개의 Redis 서버를 시작하며 포트는 6379, 6380, 6381
6379、6380、6381
查看主节点信息,是有俩台从节点在连接着,端口分别为6380、6381。
这里有一个小小的点就是lag怎么一个是1一个是0呢!lag是延迟时间,我这里是本地测试所以会出现0的情况,使用云服务器是很少出现的。lag的值为0和1都属于正常。测试主节点添加一个hash值,hset kaka name kaka
여기서 작은 점은 시차 중 하나가 1이고 다른 하나가 0이라는 것입니다! lag는 지연 시간입니다. 로컬에서 테스트 중이라 0이 되는 상황이 발생합니다. 클라우드 서버를 사용할 때는 이런 일이 거의 발생하지 않습니다. 지연 값은 0과 1로 정상입니다. 해시 값을 추가하려면 hset kaka name kaka
테스트 후 마스터-슬레이브 구조가 정상적으로 실행되고 있습니다. Start a Sentinelredis-sentinel 26379-sentinel.conf
连接26379哨兵,主要是最后一行,监控的主节点名为mymaster,状态正常,从节点有俩个,哨兵数量为1个在来查看一下26379的哨兵配置信息,这个时候已经改动了在启动一个26380
的哨兵,redis-sentinel 26380-sentinel.conf
,这里注意一下最后一行多了一条信息,这个id就是我们26379
구성 파일에 새로 추가된 ID그러면 새로 추가된 26380 Sentinel의 ID이기도 한 Sentinel 26379의 클라이언트가 나옵니다이번에는 26379 Sentinel의 구성 파일을 확인하고 있는데, 처음으로 구성 확인 파일에 26380 Sentinel이 구성되어 있지 않습니다. 두 번째로 볼 때 26380 Sentinel을 구성한 후에 해당 정보가 추가되었습니다. 마지막으로 Sentinel 클라이언트 3을 시작해야 합니다. 포트 번호는 26381입니다. 시작 후 Sentinel 26380의 정보를 추가하면 Sentinel 26381에도 구성 정보와 서버 정보가 변경됩니다.
여기까지 Sentinel 구성이 끝났습니다. 다음으로 마스터 노드를 종료하겠습니다. 30초를 기다린 후 26379 Sentinel의 클라이언트로 이동하게 되므로 여기에 몇 가지 새로운 정보가 추가되었습니다. 이 모든 정보가 완료되었습니다. 분석해 보겠습니다.
여기서 먼저 몇 가지 정보를 알아야 합니다
6379의 Redis 서버를 다시 온라인에 올려놓으면 Sentinel 서버가 두 문장으로 응답한 것을 볼 수 있습니다. 한 문장은 6379를 오프라인에서 제거하는 것입니다. 마지막 문장은 6379를 새 마스터 노드에 다시 연결하는 것입니다. 이때 마스터 노드는 6380입니다. Redis 클라이언트에서 6380이라는 값을 설정하여 마스터-슬레이브 복제가 제대로 작동하는지 확인해보세요.
새 마스터 노드 6380에 목록 유형을 추가하세요.6379와 6381에서 이 값을 얻으세요. 그게 전부입니다! 감시 모드 구성이 완료되었습니다.
Sentinel을 구성한 후에는 작동 원리를 분석해야 합니다. Workflow를 알아야만 Sentinel을 더 잘 이해할 수 있습니다.
이 글에서 설명하는 원칙은 그리 딱딱하지 않습니다! 기술 문서를 스토리로 읽을 수 있습니다.
요컨대 센트리의 역할은 모니터링, 알림, 장애 조치입니다. 그러면 작동 원리도 이 세 가지 사항을 중심으로 진행됩니다.
Sentinel은 마스터와 슬레이브의 모든 노드에 명령을 보내 상태를 확인하고 해당 정보를 Sentinel 구독에 게시합니다.
sentinel is-master-down-by-address-port
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 is-master-down-by-address-port
각 보초는 후보자이자 유권자입니다. 각 보초는 하나의 투표권을 가지며, 봉투는 투표권을 나타냅니다. sentinel1과 sentinel4가 동시에 그룹에 선거 준비 지시를 보내면 sentinel2는 이때 지시를 먼저 받는 사람에게 투표하겠다고 합니다. sentinel1이 조기에 릴리스되면 sentinel2의 투표가 sentinel1에 적용됩니다. 투표는 한 센티넬의 투표가 전체 센티널 수의 절반이 될 때까지 이러한 규칙에 따라 시작됩니다. sentinel1의 투표 수가 총 Sentinel 수의 절반 이상에 도달한 후에 sentinel1이 선출된다고 가정합니다. 이때 다음 단계에 도달하게 됩니다. 위에서 Sentinel은 모든 슬레이브 노드를 돌아다니며 하나의 마스터 노드를 찾기 위해 sentinel1을 대표로 선택했습니다. 마스터 노드를 선택하는 데에는 무작위로 선택하는 것이 아니라 특정 규칙이 있습니다.
응답이 느린 사람은 종료됩니다. Sentinel은 모든 Redis에 정보를 보냅니다. 여기에서 데모 이후 오랫동안 원래 마스터 노드에서 연결이 끊어진 사람이 종료됩니다. 충분하지 않습니다. 새로운 슬레이브5가 추가되는 것은 의미가 없습니다! 위 3가지 사항으로 판단한 결과, 아직 salve4와slave5가 있으며, 우선순위 원칙에 따라 심사하게 됩니다.
새 마스터 노드를 선택한 후에는 모든 노드에 지침을 보내야 합니다.
이것이 센티넬에 대한 모든 지식 포인트입니다. 이 글에서 가장 중요한 것은 센티넬의 작동 원리입니다. 작동 원리를 간략하게 살펴보겠습니다.
첫 번째 모니터와 모든 센티널은 정보를 동기화합니다
센티널은 구독에 정보를 게시합니다
Failover
위 내용은 센티넬에 대한 카카의 이해입니다. 만약 실수가 있을 수 있다면 카카는 제 시간에 이를 수정해 줄 것입니다.
❝배움에 대한 끈기, 블로그에 대한 끈기, 공유에 대한 끈기는 카카가 경력 이후부터 지켜온 신념입니다. 거대한 인터넷에 올라온 카카의 글이 여러분에게 조금이나마 도움이 되기를 바랍니다. 다음 호에는 당신이 있습니다.
❞
추천: "Redis Tutorial"
위 내용은 Redis Sentinel Principal, 나는 오랫동안 당신을 참아 왔습니다!의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!