0

mongodb 복제본에는 데이터 센터 D1에 Primary가 있고 데이터 센터 D2에 보조 노드가있는 인스턴스가 세 개 있습니다. 우리는 설치시 failover 옵션이 필요 없으며 https://docs.mongodb.com/manual/tutorial/configure-secondary-only-replica-set-member/에 설명 된대로 구성합니다.기본 노드와 연결되지 않은 경우 mongodb 보조 노드에서 읽기

동일한 데이터 센터 D2 내의 2 차 노드에서 실행되는 응용 프로그램 "A"는 mongoose를 사용하고 보조 노드에서 데이터를 읽도록 ("가장 가까운"또는 "보조"옵션을 사용하여) 지정했습니다.

1)은 기본 MongoDB의 노드 인 연결 구성에 지정하지 않고, 특정 보조 노드에서 읽기 "A"를 만드는 것이 가능하다 :

우리는 이러한 문제에 직면하고있다?

2) 데이터 센터 D1과 D2 사이의 연결이 끊어지면 mongoDB Primary 노드에 더 이상 접근 할 수 없거나 보이지 않으면 "A"애플리케이션을 보조 노드에서 읽는 것이 어떻게됩니까? 내가 아는 한 "A"조차도 보조에서 읽도록 설정 되었기 때문에 mongoDB는 실제 읽기 작업을 수행하기 전에 일차와 이차 사이에서 일종의 ping/arbitraging을 수행해야합니다.

3) Datacenter D2에 mongodb 복제 세트 기본 인스턴스에 대한 쓰기 작업을 독립 실행 형 인스턴스로 직접 수행하고 복제 세트의 일부로 수행하지 않을 수 있습니까?

버전 : MongoDB를 3.2.9, 몽구스 4.5.9

답변

1
  1. 예, D1과 D2와 네트워크 파티션으로 read preference with tags

  2. 은, 주 자동, 그 D2 노드 중 하나에 전달된다 저것은 1 차에 대하여 가장 "최신"인 것. "priority settings"을 사용하면이 선택 항목을 조정할 수 있습니다. 3 개 중 2 개 노드가 가동되는 한, 그 중 2 개는 기본 노드로 선정됩니다.

의 당신은 세 개의 노드가 상상하자

노드 :

  • D1.N0.priority = 3
  • D2.N1.priority = 2
  • D2.N2.priority은 = 1

지금만큼 D1이 도달하는 것에 D1.N0은 기본이다. D1과 D2 사이에 네트워크 파티션이있을 때, D2.N1은 기본이되고 D2.N2는 보조로 유지됩니다. 네트워크 파티션이 끝나면 D1.N0은 D2.N1 opLog를 읽어 누락 된 데이터를 "따라 잡을"것이고 다시 기본이되며 D2.N1은 보조가됩니다.

  1. 복제본 집합이있는 경우 항상 복제본 집합에 쓰고 직접 개별 노드에 쓰지 않아야합니다!