假设有这样一个场景,有一个MongoDB的副本集,由于故障导致只剩下两个节点可用,而这两个节点目前都是slave
节点。其他的故障节点也无法再重新启动,即无法重新加入到副本集中。
Q:这种情况下是否因为这个副本集就无法使用了?
PHP中文网2017-04-24 09:13:00
대부분의 노드가 다운되고 서로 연결할 수 있는 나머지 노드 수가 절반을 초과하지 않는 경우 설명서를 참조하여 복제본 세트를 재구성할 수 있습니다.
- http://docs.mongodb.org/manual/tutorial/reconfigure-replica-set-with-unavailable-members/
문서에는 두 가지 방법이 언급되어 있습니다.
迷茫2017-04-24 09:13:00
이는 레플리카 세트의 총 노드 수에 따라 다릅니다. 레플리카 세트에서 서로 연결할 수 있는 노드 수가 총 노드 수의 절반보다 클 경우 새로운 기본 노드를 선택할 수 있습니다. , 복제 세트는 정상적으로 작동할 수 있습니다. 상호 연결된 노드 수가 요약 지점의 절반 이하이면 모든 노드가 보조 노드가 됩니다. 이때 복제 세트는 읽기 전용이 되며, 모든 쓰기 작업이 실패합니다.
이 현상이 발생하는 이유는 mongodb 복제본 세트가 여러 개의 기본 노드를 허용하지 않기 때문입니다. 연결 가능한 노드 수가 전체 노드 수의 절반 이하일 때, 기본 노드가 여전히 가능하다면. 선택하면 여러 개의 기본 노드가 나타나 전체 복제본 세트에 데이터 혼란이 발생할 수 있으며, 실패한 노드가 복원되면 모든 노드가 보조 노드가 될 수 있습니다.
일반 노드가 기본 노드를 선택하기에 충분하지 않은 경우 문제를 해결하는 방법에는 여러 가지가 있습니다.
으아악