자체 관리형 PSA 복제본 세트로 성능 문제 완화
개요
프라이머리-세컨더리-중재자(PSA) 아키텍처를 가진 3 노드 복제본 세트 또는 3 노드 PSA 샤드가 있는 샤딩된 클러스터에서 작동이 중단되거나 지연되는 데이터 보유 노드는 성능 문제를 일으킬 수 있습니다.
하나의 데이터 보유 노드 가 다운되면 다른 노드 가 프라이머리 가 됩니다. w:1
를 사용한 쓰기는 이 상태 에서 계속 성공하지만 쓰기 고려 "majority"
가 있는 쓰기 고려 (write concern) 는 성공할 수 없고 커밋 점 이 지연되기 시작합니다. PSA 복제본 세트 에 지연된 세컨더리 가 포함되어 있고 복제본 세트 에서 변경 사항을 과반수 커밋 하는 데 두 개의 노드가 필요한 경우 커밋 점 도 지연됩니다.
커밋 지점이 지연되면 두 가지가 클러스터 성능에 영향을 줄 수 있습니다.
스토리지 엔진은 커밋 시점 이후에 발생하는 모든 변경 사항을 디스크에 보관하여 지속형 기록을 유지합니다. 이러한 쓰기로 인한 추가 I/O는 시간이 지남에 따라 증가하는 경향이 있습니다. 이는 쓰기 성능에 큰 영향을 미치고 캐시 압력을 증가시킬 수 있습니다.
MongoDB는
majority commit point
가 삭제되는 것을 방지하기 위해 oplog를 구성된 크기 제한보다 늘릴 수 있습니다.
캐시 압박과 쓰기 트래픽 증가를 줄이려면 사용할 수 없거나 지연되는 노드에 대해 votes: 0
및 priority: 0
을 설정합니다. "majority"로 발행된 쓰기 작업의 경우, 과반수 커밋을 수행하는 데 필요한 노드 수를 결정할 때 투표하는 멤버만 고려됩니다. 노드 구성을 votes: 0
으로 설정하면 쓰기 고려 "majority"
가 있는 쓰기를 커밋하는 데 필요한 노드 수가 2개에서 1개로 줄어들고 이러한 쓰기가 성공할 수 있습니다.
세컨더리가 따라잡히면 rs.reconfigForPSASet()
메서드를 사용하여 votes
를 1
로 다시 설정할 수 있습니다.
참고
이전 버전의 MongoDB에서는enableMajorityReadConcern
및 --enableMajorityReadConcern
을 구성하여 기본 읽기 고려 "majority"
를 비활성화할 수 있었는데, 이는 비슷한 효과를 가져왔습니다.
절차
3노드 PSA(프라이머리-세컨더리-중재자) 아키텍처를 사용하는 배포에서 캐시 압박을 줄이고 쓰기 트래픽을 늘리려면 사용할 수 없거나 지연 중인 세컨더리에 { votes: 0, priority: 0 }
을 설정하세요.
cfg = rs.conf(); cfg["members"][<array_index>]["votes"] = 0; cfg["members"][<array_index>]["priority"] = 0; rs.reconfig(cfg);
나중에 rs.reconfigForPSASet()
메서드를 사용해 세컨더리의 구성을 변경할 수 있습니다.