Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/

프라이머리가 없는 복제본 세트 문제 해결

복제본 세트는 일반적으로 선거 기간에 프라이머리 존재하지 않는 상태 로 전환될 수 있습니다. 그러나 장기간 프라이머리 존재하지 않으면 복제본 세트 쓰기를 허용할 수 없습니다.

이 페이지에는 장기간 프라이머리 없는 복제본 세트를 해결하기 위한 일반적인 문제와 해결 방법이 포함되어 있습니다. 다음 섹션을 진행한 후에도 추가 지원 필요한 경우 기술 지원팀 문의 .

또는 메서드를 실행 하여 배포서버 replSetGetStatus 프라이머리 rs.status() 없는지 확인합니다. 다음 예시 프라이머리 없는 복제본 세트 rs.status() 에 대한 메서드의 출력을 보여줍니다.

rs.status().members
[
{
_id: 0,
name: 'localhost:27018',
health: 1,
state: 2,
stateStr: 'SECONDARY',
...
configVersion: 2,
configTerm: 6,
self: true,
lastHeartbeatMessage: ''
},
{
_id: 1,
name: 'localhost:27019',
health: 1,
state: 2,
stateStr: 'SECONDARY',
...
configVersion: 2,
configTerm: 6
},
{
_id: 2,
name: 'localhost:27020',
health: 1,
state: 2,
stateStr: 'SECONDARY',
...
configVersion: 2,
configTerm: 6
}
]

참고

경우에 따라 rs.status() 출력에 일부 멤버의stateStr 값이 UNKNOWN 또는 로 DOWN 표시될 수 있습니다.

배포의 로그 메시지에서"c" 구성 요소() 값이 인 항목이 있는지 확인합니다. 여기에서 필드 ELECTION 에 다음 메시지와 함께 투표를 시작하려고 시도했지만 반복적으로 실패하는 것을 볼 수 있습니다."msg"

메시지
설명

" 투표 시간 초과 기간에 PRIMARY가 발생하지 않았으므로 투표 시작"

프라이머리 머리가 물러날 때 다른 멤버가 기록합니다.

"우리는 불충분한 투표를 받았습니다"

대다수의 노드가 투표 요청 에 응답하지 않았음을 나타냅니다. 멤버가 다운되었거나 네트워크 파티션 발생했을 수 있습니다.

" 설정하다 의 과반수를 볼 수 없으며, 프라이 프라이머리 포기합니다 "

멤버가 다운되었거나 네트워크 파티션 발생했을 수 있습니다.

다음 섹션에서는 복제본 세트 에서 새 프라이머리 선택하는 데 문제가 있을 수 있는 일반적인 문제와 해결 방법에 대해 설명합니다. 지원 문의 하기 전에 다음 문제로 인해 배포서버 프라이머리 에서 프라이머리를 선택할 수 없는지 확인하세요.

배포서버 에 네트워크 파티션 발생하면 노드가 서로 통신할 수 없어 프라이머리 선택할 수 없습니다.

배포서버 가 네트워크 파티션 의 영향을 받는지 확인하려면 다른 replSetGetStatus 노드에서 또는 메서드를 실행 . 각 노드 의 출력을 기반으로 파티션의 양쪽에 어떤 노드가 있는지 식별합니다.rs.status()

파티션 후 연결을 복원 하려면 다음을 수행합니다.

  • 방화벽 구성에서 구성원 간의 통신을 차단 규칙이 있는지 확인합니다.

  • DNS 호스트 이름을 확인합니다.

  • IP 액세스 목록에 IP 주소 추가했는지 확인합니다.

대부분의 노드가 서로 연결되면 MongoDB 자동으로 프라이머리 선택하고 정상적으로 쓰기를 재개합니다.

메인 데이터 센터 에 투표권이 있는 멤버 정족수와 프라이머리 될 자격이 있는 멤버가 모두 포함되어 있는지 확인합니다. 복제본 세트의 프라이머리 다운되어 세컨더리 중 어느 것도 프라이머리 로 선출되지 않은 경우, 나머지 노드가 모두 우선 0 순위 노드가 아닌지 확인합니다.

각 멤버의 우선 순위 값을 확인하려면 replSetGetConfig 명령 또는 메서드를 rs.conf() 실행 .

// Returns an array of documents corresponding with each member in your replica set
rs.conf().members
[
...
{
_id: 1,
host: localhost:27019,
arbiterOnly: false,
buildIndexes: true,
hidden: false,
priority: 0,
tags: {},
secondaryDelaySecs: Long('0'),
votes: 1
},
...
]

우선 순위 로 인해 프라이머리 될 수 있는 세컨더리가 없는 경우 members[n].priority 하나 이상의 세컨더리의 값을 업데이트 . 자세한 지침은 자체 관리형 복제본 세트 멤버의 우선 순위 조정을 참조하세요.

배포서버 쓰기 작업이 많은 워크로드, 너무 많은 인덱스 또는 상당한 디스크 공간을 차지하는 유지 관리 프로세스가 있는 경우 노드가 과부하되어 충돌이 발생할 수 있습니다.

디스크 공간을 확보하려면 다음을 고려하세요.

  • 사용하지 않는 컬렉션 또는 데이터베이스 삭제.

  • 중복되거나 사용하지 않는 인덱스를 제거합니다.

  • 유지 관리 기간 예약된 경우 을(를) 사용하여 배경 압축 활성화하는 것이 autoCompact 좋습니다.

    경고

    유지 관리 기간 과 같이 트래픽이 적은 기간에만 를 실행합니다. 트래픽이 많은 데이터베이스에서 배경 압축 백업 수행과 같은 운영 autoCompact 작업을 잠재적으로 지연하거나 방지할 수 있습니다. 배경 압축 활성화하기 전에 성능에 영향 및 기타 고려 사항에 대해 자세히 학습 자동 압축 동작을 참조하세요.

디스크 사용량을 모니터 하려면 다음을 수행합니다.

여러 투표 멤버가 다운되어 복제본 세트 과반수를 잃는 경우 rs.status() 출력은 모든 멤버가 SECONDARY 또는 RECOVERING 상태 에 있음을 표시할 수 있습니다. 다음 시나리오는 과반수를 잃을 수 있습니다.

예시 들어, 유지 관리를 위해 동시에 두 멤버를 중단하는 세 멤버 복제본 세트 가정해 보겠습니다. 이 시나리오에서는 복제본 세트 과반수를 잃게 되며 세 번째 멤버가 백업될 때까지 새 프라이머리 선택할 수 없습니다.

이 시나리오를 방지하려면 세컨더리 멤버부터 시작하여 프라이머리 멤버로 롤링 유지 관리를 순차적으로 수행해야 합니다. 이렇게 하면 프라이머리 항상 사용할 수 있습니다. 복제본 세트 유지 관리에 대한 지침 자체 관리형 복제본 세트 멤버에 대한 유지 관리 수행을 참조하세요.

예시 들어 두 개의 데이터 보유 멤버와 하나의 숨겨진 비투표 노드 배포서버 가정해 보겠습니다. 한 데이터 보유 멤버가 실패하면 나머지 멤버는 과반수를 구성할 수 없습니다.

쓰기 고려 (write concern) 사용하는 프라이머리-세컨더리-중재자(PSA) 토폴로지 에서 유지 관리를 위해 세컨더리 다운되면 쓰기가 중단됩니다. 프라이머리 두 명의 데이터 보유 투표 멤버 중 "majority" 하나만 사용할 수 있기 때문에 과반수 승인을 얻을 수 없습니다. 쓰기 (write) 작업에 wtimeout을 설정하다 하지 않으면 쓰기가 무기한 차단 . 이를 완화하려면 다음을 수행합니다.

  • 유지 관리 기간 동안 쓰기 (write) 작업을 제한하여 지연된 쓰기의 양을 제한합니다.

  • "majority" 쓰기 쓰기 고려 (write concern) 사용하는 쓰기 (write) 작업에서 wtimeout 매개 변수를 설정하여 쓰기가 무기한 차단되는 것을 방지합니다.

PSA 토폴로지의 성능 문제를 완화하는 방법에 대한 자세한 내용은 자체 관리형 PSA 복제본 세트로 성능 문제 완화를 참조하세요.

프라이머리-세컨더리-세컨더리-세컨더리 중재자(PSSSA) 토폴로지 에서 과반수 투표 멤버를 단일 데이터 센터 또는 재해 복구(DR) 사이트 에 배치하면 과반수가 손실될 위험이 있습니다. 해당 리전 완전히 다운되면 나머지 멤버는 과반수를 구성할 수 없으며 프라이머리 선출할 수 없습니다. 단일 리전 장애 후에도 과반수 이상이 계속 사용 가능하도록 투표 멤버를 여러 리전에 분산합니다. 지침 은 데이터 센터 인식을 참조하세요.

배포서버 복원되고 새 프라이머리 선택되면 rs.status() 출력에는 멤버 중 하나가 PRIMARY 상태 에 있음이 표시됩니다.

문제를 해결할 수 없는 경우 다음 진단 정보를 가지고 기술 지원에 문의 .

  • 관련 로그 메시지

  • rs.config() 출력

  • rs.status() 출력

돌아가기

빈번한 선거

이 페이지의 내용