중화사전망 - 자전 검색 - 고가용성 및 일관성
고가용성 및 일관성
그런 다음 이 섹션에서는 MongoDB 가 어떻게 고가용성을 실현할 수 있는지, 그리고 이러한 기능이 고가용성을 실현할 수 있는 정도를 설명합니다.
고가용성이 언급되면 다음과 같은 질문을 하게 될 것입니다.
그런 다음, 이 질문들을 가지고, 우리가 계속 읽고, 읽은 후에, 모든 사람들이 이 문제들을 이해해야 한다. (존 F. 케네디, 공부명언)
MongoDB 고가용성은 기본적으로 여러 복제본에 저장된 데이터의 복사본인 복제 클러스터를 기반으로 시스템이 일시 중지될 때 데이터가 손실되지 않도록 합니다.
복제본 세트는 최소 3 개의 노드로 구성됩니다.
위의 노드 유형에서 볼 수 있듯이 3 노드 복제 클러스터는 PSS 또는 PSA 구조일 수 있습니다.
PSA 구조의 장점은 비용 절감이지만, Primary 가 끊은 후 majority 특성에 의존하는 일부 write 함수에 문제가 발생할 수 있다는 단점이 있어 일반적으로 사용하지 않는 것이 좋습니다.
데이터 일관성을 위해 클러스터를 복제하는 핵심 설계는 다음과 같습니다.
위의 네 가지 사항을 바탕으로 MongoDB 는 고가용성이라는 결론을 내릴 수 있습니다.
MongoDB 가 종료되고 재시작되면 checkpoint 를 통해 마지막 60 초 이전의 데이터를 신속하게 복구할 수 있습니다.
MongoDB 의 마지막 체크포인트에서 다운타임까지의 데이터는 로그 재생을 통해 복구할 수 있습니다.
로그 로그는 100 밀리초에 한 번 새로 고쳐지기 때문에 최대 100 밀리초의 데이터가 손실됩니다.
(이는 WriteConcern 의 매개변수를 통해 제어할 수 있지만 성능에 영향을 주어 안정성 요구 사항이 매우 까다로운 시나리오에 적합합니다. ) 을 참조하십시오
대부분의 쓰기가 데이터 쓰기를 위해 시작되면 운영 서버가 다운되더라도 최대100ms 의 데이터가 손실됩니다 (위와 동일).
분산 시스템이 직면해야 하는 문제 중 하나는 데이터의 일관성과 고가용성이며, 매우 유명한 이론은 CAP 이론입니다.
CAP 이론의 핵심 결론은 분산 시스템이 일관성, 가용성 및 조닝 (zoning) 허용치 중 최대 두 가지만을 충족시킬 수 있다는 것입니다.
인터넷에는 CAP 이론에 대한 많은 토론이 있는데, 여기서는 군말을 하지 않는다.
CAP 이론은 분산 시스템이 직면해야 하는 문제를 제기하지만, 이 문제 때문에 분산 시스템을 사용하지 않을 수는 없습니다.
따라서 기본 이론 (기본 사용 가능, 부드러운 상태, 최종적으로 일관된 최종 일관성) 이 제시되었습니다.
기본 이론은 일관성과 가용성 사이의 균형이다. 현재 대부분의 분산 시스템은 BASE 이론을 기반으로 설계되었으며, 물론 MongoDB 도 이 이론을 따른다.
가용성 및 파티션 내결함성을 보장하기 위해 MongoDB 는 복제본 세트를 사용합니다. 이 모델에서 해결해야 할 문제 중 하나는 시스템이 부팅되고 마스터 노드가 비정상일 때 적절한 마스터 노드를 신속하게 선택하는 방법입니다.
다음은 몇 가지 잠재적 인 문제입니다.
MongoDB 의 선거 알고리즘은 Raft 프로토콜 개선을 기반으로 분산 클러스터의 노드에 세 가지 상태를 제공합니다.
Leader: 전체 클러스터의 쓰기를 담당하는 마스터 노드입니다.
후보 노드: 후보 노드, 마스터 노드가 전화를 끊은 후 선거에 참여하는 노드입니다. 그것은 선거 기간에만 존재하고 일시적인 상태이다.
Follower: 노드에서 수동으로 마스터 노드에서 업데이트된 데이터를 가져옵니다.
노드의 상태 변경은 일반적으로 하나의 leader 와 여러 flowers 만 있다는 것입니다. 지도자가 전화를 끊으면 꽃 속의 일부 노드가 선거에 출마할 후보가 된다.
한 후보가 선거에서 이길 때, 그는 새로운 지도자가 되고, 다른 후보들은' 꽃의 주' 로 돌아간다.
구체적인 상태 머신은 다음과 같습니다.
Raft 프로토콜에는 선거 단계와 정상 단계에 각각 사용되는 두 가지 핵심 RPC 프로토콜이 있습니다.
투표 요청: 선거 단계에서 후보자는 다른 노드에 요청을 보내 자신을 위해 투표하도록 요청합니다.
추가 항목: 정상 단계에서 leader 노드는 데이터 업데이트가 있음을 알리는 요청을 follower 노드에 전송하고 모든 follower 에 하트비트 메커니즘으로 상태를 선언합니다.
만약 follower 가 일정 기간 동안 요청을 받지 못한다면, 그것은 새로운 선거 투표를 시작할 것이다.
Raft 협정은 선거 단계의 투표 규칙을 규정하고 있다.
한 노드는 선거 주기 (election period, 즉 $ Term) 내에서 하나의 후보 노드에 대해서만 투표할 수 있으며 선착순 원칙을 채택합니다.
후보 노드의 oplog 가 앞서거나 자신과 같은 경우에만 찬성표를 던집니다.
완전한 선거 과정에는 다음이 포함됩니다.
이것은 MongoDB 의 선거 메커니즘이며, 아직 대답하지 않은 질문이 하나 있다. 바로 마지막이다. 선택한 초선이 가장 적합한 초선인지 어떻게 확인할 수 있습니까?
이전 프로토콜에서 볼 때 논리 버그가 있기 때문입니다. follower 에서 candidate 로의 변환은 무작위적이고 평행하며 선착순 투표 메커니즘으로 인해 보조 우선 노드를 Primary 로 선택할 수 있기 때문입니다.
Raft 프로토콜에 대한 이 문제에 대해 몇 가지 자료를 검색하고 결론을 내렸습니다.
Raft 프로토콜은 선택한 마스터 노드가 최적이라고 보장할 수 없습니다.
MongoDB 는 선거 성공과 새로운 초선이 왕위에 오르기 전에 catchup 작업을 추가하여 이 문제를 해결했다.
즉, 노드가 투표에서 이긴 후 먼저 다른 노드가 oplog 를 업데이트했는지 확인하고, 그렇지 않은 경우 직접 즉위하고, 있는 경우 즉위 전에 데이터를 동기화합니다.
MongoDB 의 마스터-슬레이브 동기화 메커니즘은 데이터 일관성과 신뢰성을 보장하는 중요한 메커니즘입니다. 동기화는 MySQL 의 binlog 와 유사한 oplog 를 기반으로 하지만 몇 가지 차이점이 있습니다. 이름이 로그이지만 작업 로그는 파일이 아니라 컬렉션입니다.
또한 oplog 의 병렬 쓰기로 인해 꼬리 무질서와 취약점이 있습니다. 특히 oplog 의 데이터 순서는 실제 데이터 순서와 일치하지 않을 수 있으며 시간 불연속적인 문제가 있을 수 있습니다.
이 문제를 해결하기 위해 MongoDB 는 무질서하고 공허한 문제뿐만 아니라 분산 시스템의 트랜잭션 일관성 문제도 해결하는 하이브리드 논리 클럭 (HLC) 을 채택했습니다.
실제로 마스터-슬레이브 동기화의 본질은 마스터 노드가 클라이언트 요청을 수신하고 oplog 에 업데이트 작업을 기록한 다음 동기화 소스에서 oplog 를 가져와 로컬로 재생하여 데이터 동기화를 수행하는 것입니다.
동기화 소스는 노드가 작업 로그를 추출한 소스 노드입니다. 이 노드는 마스터 노드가 아닐 수도 있지만 체인 복제 모드의 모든 노드가 될 수 있습니다.
노드 동기화 소스 선택은 다음과 같이 매우 복잡한 프로세스입니다.
동기화 소스를 선택할 때 몇 가지 특수한 경우가 있습니다.
노드에 동기화 소스를 지정할 수 있습니다.
체인 복제가 종료되면 모든 보조 노드의 동기화 소스가 마스터 노드입니다.
동기화 소스에서 잘못 추출하면 짧은 시간 내에 블랙리스트에 포함됩니다.
전체 인출 및 재생의 논리는 매우 복잡하기 때문에 내 자신의 이해에 따라 해석을 단순화합니다. 더 자세한 정보를 원하시면 MongoDB 복제 기술의 내막을 참조하실 수 있습니다.
이 노드에는 작업 로그를 가져오는 특수 스레드가 있으며, 소진된 커서를 통해 동기화 소스에서 작업 로그를 가져옵니다. 당겨지면 재생되지 않고 한 곳에 던져집니다.
의 차단 대기열에 있습니다.
그런 다음 차단 대기열에서 작업 로그를 가져와 실행하는 몇 가지 특정 실행 스레드가 있습니다.
가져오는 동안 동일한 컬렉션의 작업 로그는 가능한 연속 삽입 명령을 병합하는 동일한 스레드에서 가져오고 실행됩니다.
전체 재생의 실행 과정은 대체로 다음과 같다. 먼저 잠그고, 우리의 oplog 를 쓰고, oplog(WAL 메커니즘) 를 닦고, 마지막으로 너의 최신 opTime 을 업데이트한다.
MongoDB 무 지향성 지식지도
/s/bhxpnlotuoqyji 61eorcfa