MongoDB의 복제 세트가 문제가 복제 세트에서 때때로 발생, 자동 허용 일부 노드의 기능이 중단 있으며, 선거 관련 프로세스가 자동으로 완료 기본 노드에서 전환되는 트리거합니다. 각 복제 세트 구성원은 백그라운드에서 하트 비트 스레드 실행해야하며 상태 검출 프로세스를 트리거 두 경우 모두, 모든 노드의 설정 복사합니다 :
- 복제 설정 부재 심장 박동 검출 결과의 변화와 같은 노드가 다운되거나 새로운 노드;
- 상태 검출 프로세스 4S 이상 수행되지 않는다. 상태 검출 공정에서 일반적 단계를 포함한다 :
(1)이 프로세스에서,이 경우, 선거 과정에 있는지 여부를 검출한다.
(2) 백업 마스터 노드의 목록을 유지, 목록에있는 모든 노드는 자체가 감지 각 노드를 마스터 노드로 선출 될 가능성이 글로벌 조건이 충족됩니다
. 설정된 복제가 대부분 여부를 온라인으로 볼 수 있습니다.
B. 자신의 우선 순위는 0보다 크다.
다. 그 자체가 중재자가 아닙니다.
라. opTime 최신 노드보다 더 그들의 10 초에 뒤 떨어지지.
전자. 최신 정보에 따라 클러스터 프로그램에 의해 저장됩니다.
모든 조건이 충족되는 경우, 기본 백업 노드의 목록에 자신을 추가 할 것이다, 그렇지 않으면, 목록에서 자신을 제거하는 것입니다.
检测以下条件,若都满足,将主节点降为从节点(如果要降级的主节点是自身,直接调用降级方法,如果不为自身,调用replSetStepDown命令将复制集主节点降级为从节点:
a. 集群中主节点存在。
b. "主节点的备用列表”中存在比当前的主节点priority更高的节点。
c. "主节点的备用列表”中priority最高的节点,其opTime要比其他所有节点最新的opTime落后10s以内。
d. 检测自身是否为主,若为主,且自身无法看见复制集的Majority在线,将自身降级为从。
e. 如果看不见集群中有主节点存在,检测自身是否在”主节点的备用列表”,若不在,打印log并退出此流程。
f. 若自身在”主节点的备用列表”中,开始判断自身可否向复制集中发送选举自身为主节点的通知,判断过程包含:
1> 自身是否可以看见复制集中的Majority在线。
2>自身是否在”主节点的备用列表”。
조건이 충족되면, 플래그가 true "자체가 선거 과정에있다"로 설정하고 "선거 자체 마스터 노드"접근 방식을 입력합니다.
이 방법은 다음과 같은 조건을 만족하는지 확인합니다
. 스레드는이 스레드는 잠금을 얻었다.
B.이 노드는 구성 또는 0으로 구성 가능한 옵션 slaveDelay slaveDelay되지 않습니다.
다.이 노드는 중재하도록 구성되지 않는다.
: 만난 경우, 다음 조건이 트리거되는 경우, 상기 발신 환경 검출은, 추천 "마스터 노드 나 선출하여"보내지
실행 steppedDown +는 내부 설정된 시간 정지 한 시점 (1> 현재 시간이 냉동주기 steppedDown 끝 미만인 그것은) 60을 요구한다.
2> 자신의 opTime하지 최신 모든 노드.
3> 새로운 종료이 과정을보다 노드 opTime 경우.
, 만약 판사가 계속 후에 이러한 노드, 약간의 시간에 대한 임의 수면의 모든 일에 대한 자신의 대부분의 다른 최근의 새로운 노드, 같은.
가. 자신의 온라인 설정 복제에서 5 분 내에 라인과 모든 노드에서.
다른 문제가 없다면이 과정에서 자신의 투표가가, 30 대에 투표 실시로, 전체 프로세스를 종료 여부를 결정하기 위해 실시 될 때 나., 표를 얻으려고.
우리는 마침내 투표를 보낼 수 있습니다 감지 한 후이 모든 복잡한 복제 세트에 "마스터 노드로 저를 선출".
절반 이하 자신의 마스터 노드와 동일한 투표 수를 변경하지 않는 경우 절반 이상, 자신의 주인을 제공하는 경우 전송 한 후는, 모든 노드에서 표를받을 수 있습니다.
투표 후, 설정을 false로 플래그 "그 자체가 선거 과정에있다".
모든 결정은 모든 조건이 충족 조건 누락되는 것을 방지하고 있는지 확인해야한다 전에 우리는 관계를 결정하기 위해 더 복잡한 로직과 관련이있을 수 있습니다 위의 결정 로직의 일부는 판단을 반복, 볼 수 있지만 최종 결과에 영향을주지 않습니다.
노드 세트를 복사 할 때이 정보를 투표 다른 노드에 의해 전송 된 "마스터 노드로 저를 선출했습니다"다음 심판이있을 것입니다
. 저장된 구성 버전이 너무 낮은 경우 복제가 투표를하지 않는, 자신을 설정합니다.
B. 구성 버전을 저장하는 복제 개시 요청 세트 노드가 너무 낮 으면, 로그인.
원래 노드가 투표 여기서 c. 설정은 반대, 투표 자체를 복제하지 않습니다.
D. 중앙 집중식 복제 마스터 노드는 투표를 존재한다.
노드보다 노드 우선 순위의 존재 선거에 참여할 수 있습니다 때,에 대한 투표를 요청 기반.
투표 자체의 수를 획득하여 모든 조건이 (그것은 또한, 더 투표에 참석하지 않는 경우 자신의 30 대, 투표에 참여 여부를 결정합니다) 경우, 투표 수는 캐스팅.
그것에 대해 말할 필요가있다, 그것은 최종만큼 야당 노드가있는 한, 대부분의 경우 10,000 표, 그 잘라 반대하는 것, 노드의 요청은 마스터가 될 수 없습니다.
실제로 두 지점에 요약되어 매우 복잡 사용되는 선거 과정 :
5 초에 대한 일반적인 필요성이 주요 선거였다.
새로운 선출 마스터 노드는 즉시 중지하는 경우, 당신은 적어도 30 시간에 다시 선거 차를해야합니다.