2011-09-23 1 views
1

내 서버 설정은 다음과 같습니다.DB를 다운시키지 않고 Mongo (Replica Set에서)를 올바르게 끄는 방법?

2 개의 서버. mongoDB에는 두 서버간에 복제 세트가 있습니다. 각각은 하나의 노드입니다.

그리고 나서 node.js 서버가 MongoDB에 연결됩니다.

보조 서버를 죽이면 어떻게됩니까? (서버 종료 중). MongoDB는 여전히 기본 상태이지만 Node.js 서버는 MongoDB와의 연결 문제가 있습니다. 서버를 다시 추가 했더니 작동하지 않았습니다. 나는 몽구스와 연결 - 몽고를 사용합니다.

그래서 어떻게 되었습니까? 몽고 노드를 제대로 종료하는 법?

답변

1

보조 노드를 종료 한 후에도 기본 노드가 여전히 기본 노드 인 경우 노드의 드라이버 문제입니다. 어쨌든 항상 짝수 개의 복제 노드가있는 중재자가 있어야합니다. "이유"는 mongodb의 문서에 잘 설명되어 있습니다.

node.js 문제인 경우 node-mongodb-native 버전을 사용하고 있습니까? 2 개월 전 복제본 문제가 있었지만 최신 버전으로 수정되었습니다. 마지막 복제본 문제는 9 월 9 일에 끝났습니다. 마지막으로 태그가 붙은 버전 (V0.9.6.18)을 사용해보십시오.

+0

나는 중재자를 설치했다고 생각한다. 내 몽구스, 노드와 몽고는 2-4 전복입니다. 업그레이드를 시도하고 작동하는지 확인하겠습니다. :) 감사. – murvinlai

+0

귀하의 경우 실제로 최신 상태로 유지되어야하는 유일한 것은 [node-mongodb-native 드라이버] (https://github.com/christkv/node-mongodb-native/tree/V0.9.6)입니다. 18), mongodb 몽구스와 노드는 꽤 최근에있는 한 실제로 중요하지 않습니다. –

+0

다른 노드가 다운되면 주 노드는 여전히 "기본 노드가되지 않습니다". 자동으로 자체 강등됩니다. 클라이언트가'slaveOk'를 true로 설정하면 여전히 읽을 수 있습니다. – dcrosta

5

노드가 2 개인 복제본이있는 경우 한 노드가 다운되면 다른 노드가 자신을 보조 노드로 강등합니다. slaveOk으로 연결하지 않으면 읽을 수 없으며 어떤 경우에도 쓰기를 할 수 없습니다.

이것은 MongoDB에 의해 부과 된 안전 대책입니다. 복제본 세트의 다수 (반 + 1을 의미)가 안전하게 주인공이 선출 될 수 있도록 서로를 볼 수 있어야합니다. 다수가 볼 수없는 경우 소수 민족의 노드는 "나머지 절반"이 기본 노드를 선출했는지 여부를 알 수 없습니다. 동시에 2 개의 1 차 원색을 갖는 것은 매우 나쁜 것입니다 (TM). 이는 충돌하는 업데이트로 이어질 수 있기 때문입니다.

두 개의 노드 만 실행하려는 상황에서는 한 노드가 다운되거나 복제본 집합에서 보이지 않게되는 경우 중재자를 실행하여 연결을 끊을 수도 있습니다. 중재자는 보통 mongod 프로세스이지만 어떤 데이터도 저장하지 않습니다. 본질적으로 선거에만 참여하고 그렇지 않은 경우 유휴 상태입니다. "정상적인"노드 2 개와 중재자 1 개가있는 복제 세트에서는 두 개의 데이터 보유 노드 중 하나가 다수를 잃지 않고 중단 될 수 있습니다.

자세한 내용은 the MongoDB documentation on replica setsthe documentation on artibers을 참조하십시오.

+0

내가 얻지 못하는 한 가지는 .. 보조 mongo가 아니라 기본. 투표 참여가 있어서는 안됩니다. 맞습니까? 왜 아직도 깨지십니까? :) – murvinlai

+0

복제본 집합의 각 구성원은 정기적 인 하트 비트 메시지로 다른 구성원을 모니터링합니다. 기본 구성원이 자신을 포함하여 복제본 집합의 대부분을 볼 수없는 경우 (주의 : 대다수 2 == 2이므로 하나가 정의에 따르면 다수가 없음), 충돌 시나리오를 피하기 위해 자동으로 보조 단계로 내려갑니다. – dcrosta