2017-12-25 4 views
-1

MongoDB를 복제와 함께 사용하고 싶습니다. 나는 2 개 차 노드와 한 중재자로 VM을 생성 :중재인이있는 AZURE의 Mongodb Replicet

  • 1 차
  • 2 차
  • 1 아비터

나는이 시스템이 어떻게 작동하는지 이해하려고 노력 중이 야, 그래서 나는이

1) 정보에 따르면 "복제본 집합에 짝수 개의 구성원이있는 경우 중재자를 추가하십시오."중재자를 추가했습니다. 하지만 제대로했는지 확실하지 않습니다. 이 짝수는 보조 또는 전체 회원 모두에게 적용됩니까?

2)이 중재자는 무엇을하고 있습니까? 사실 그 직업을 이해하지 못합니다.

3) 외부에서 연결하기 위해 각 VM마다 공용 IP 주소를 만들었습니다.

MongoDB를 : // 사용자 이름 : 암호 @의 vm0 : 27017, VM1 : 27017, VM2 : 27017/DBNAME replicaSet = XXX & readPreference = primaryPreferred

나는 성공적으로 연결 문자열을 사용, 내 응용 프로그램에서 연결

이 연결 문자열에 중재자를 추가하지 않았지만 추가해야합니까?

4) 기본 시스템을 종료하면 보조 시스템 중 하나가 성공적으로 기본 시스템이됩니다. 이 경우 문제가 없습니다. 하지만 두 번째 기본 시스템을 종료하면 응용 프로그램에서 오류가 발생합니다. 두 번째 보조 노드가 기본 노드가되지 않습니다. 왜 이런 일이 발생합니까?

5) 모든 VM이 작동하지만 arbiter를 종료하면 응용 프로그램이 다시 오류를 발생시키고 db에 연결할 수 없습니다. 나는 중재자 기계에 무언가 잘못 될 경우를 생각하고 있고 유지 보수 또는 다른 문제로 인해 장래에 종료 될 수 있기 때문에 이것을 시도하고있다.

아마 중재자의 역할을 이해하지 못했을 수 있습니다. 나는 이것이 잘못된 것이라고 생각하지만 왜 보조 기계를 중재자로 변환하지 않는가? 그리고 왜 내가 중재자를 종료 할 때 전체 시스템이 작동하지 않습니까?

감사합니다.

+0

이것은 프로그래밍 관련 질문이 아니라 MongoDB 문서 관련 질문입니다. 그리고 실제로 Azure (또는 bitnami)와는 아무 관계도 없습니다. 그에 따라 태그를 삭제했습니다. –

답변

1

1) 기본 및 보조 2 개가 1 개인 경우 복제본 집합에 3 명의 구성원이 있습니다. 따라서 중재자를 추가해서는 안됩니다. 이미 홀수 개의 노드가 있습니다.

2) 중재자는 데이터를 보유하지 않고 1 차로 선출 될 수없는 노드입니다. 현재 주 서버가 다운되면 새로운 주 서버를 선출하는 데에만 사용됩니다.

예를 들어, 1 초 및 1 초가 있다고 가정 해보십시오. 복제 세트에는 2 명의 구성원이 있습니다. 기본 서버가 다운되면 복제본 세트가 새로운 기본 서버를 선출하기 위해 투표를 시도합니다. 노드가 선출되기 위해서는 투표 수의 절반 이상을 얻어야합니다. 그러나 2 차 표결 자체가 2 표 중 1 표만 얻습니다. 그것은 이고 반값 이하는이므로 선출되지 않습니다. 따라서 복제 세트는 새 기본을 선출 할 수 없으며 전체 복제 세트가 다운됩니다.

이 문제를 해결하려면 복제본 집합에 조정자를 추가 할 수 있습니다. 데이터를 보유 할 필요가 없기 때문에 대개 작은 기계입니다. 선거의 경우 새로운 예비 후보로 선발 된 중등 직업에 대한 투표는 단지 ​​하나의 직업을 가지고 있습니다.

그러나 이미 데이터 보유 노드가 3 개이므로 중재자를 추가하고 싶지는 않을 것입니다. You can read more about arbiters here.

3) 연결 문자열에 중재자를 추가 할 수는 있지만 일반적으로 필요하지는 않습니다. 데이터 보유 노드를 추가하는 것은 괜찮습니다. 그것은 사람들이 보통하는 일입니다.

4) 복제 세트에 4 명의 구성원이 있습니다. 당신은 그들 중 2 명을 쓰러 뜨 렸습니다. 그것은 단지 2 표가 남았음을 의미합니다. 최종 중등 교육은 투표의 50 % 이상을 차지하지 못하므로 초등이 선출되지 않습니다.

일반적으로 두 노드를 테스트하는 것은 과도합니다. 세 명의 구성원 복제본이 필요할 것입니다. 각 구성원은 다른 사용 가능 영역 (Azure의 Availability Set)에 있어야합니다. 두 노드가 다운되면 복제 세트를 사용할 수 없습니다. 그러나 모든 노드가 서로 다른 가용성 영역에있는 경우 동시에 두 노드가 다운되는 것은 거의 없습니다. 따라서 하나 이상의 노드가 다운되는 것에 대해 너무 걱정하지 마십시오. 이것이 진짜 관심사라면 (대부분의 응용 프로그램에서는 그렇지 않습니다), 5 개의 구성원 복제본을 만들고 싶습니다.

5) 이상합니다. 복제 세트가 잘못 구성되었을 수 있습니다. 내가 말했듯이, 당신은 중재자가 필요하지 않습니다. 따라서 중재자없이 다시 설정하고 작동하는지 확인할 수 있습니다. 문제가 계속되는 경우 새 질문을 엽니 다. 귀하의 질문에 rs.status() 실행 결과를 포함시켜야합니다.

+0

답변 해 주셔서 감사합니다. 다섯 번째 질문에 대해서는 1 차 1 차 및 1 차 중재자에 대해 기계를 수정합니다. 이제 더 이상 오류가 발생하지 않습니다. 하지만 그 후에 중재인과 기본 컴퓨터를 종료하면 시스템이 기본 서버로 보조 서버를 선택하지 않고 응용 프로그램에서 서버 오류가 발생합니다. 미래에 어떤 일이 중재자 기계에 일어날 까봐 두렵습니다. 그 자체로 오류가 발생하고 내가이 오류를 볼 수 없으면 어떻게 될까요? –

+0

3 노드 중 2 노드가 다운되면 복제 세트가 다운됩니다. 새로운 주표를 선출 할 수있는 투표 수는 50 %를 넘지 않습니다. 하나의 노드 (기본, 보조 또는 조정자)가 다운되면 복제 세트가 정상적으로 작동합니다. 복제 세트의 기본 원칙이기 때문에 이유가 확실하지 않은 경우 설명서 (https://docs.mongodb.com/manual/replication/)를 읽으십시오. – tfogo