자체 관리형 PSA 복제본 세트를 안전하게 수정하기
개요
1차-보조-중재자(PSA) 복제본 세트를 재구성하거나 PSA 아키텍처로 변경할 때는 다음과 같은 경우에 특히 주의해야 합니다.
기존 3명으로 구성된 PSA 아키텍처의 복제본 세트에서 세컨더리를 우선 순위가 0이 아닌 투표 및 데이터 보유 노드로 재구성하려고 합니다.
프라이머리 한 명과 중재자 한 명으로 구성된 기존 두 멤버 복제본 세트에 우선 순위가 0이 아닌 새로운 투표 데이터 보유 노드를 추가하려고 합니다.
경고
추가하려는 세컨더리 가 지연되고 결과 복제본 세트 가 PSA 구성인 경우, 첫 번째 구성 변경으로 인해 "majority"
변경 사항을 커밋 해야 하는 노드 수가 변경됩니다. 이 경우 세컨더리 가 이를 따라잡을 때까지 커밋 점 이 지연됩니다.
이 문서에서는 이러한 특정한 경우에 지정된 헬퍼 메서드 를 사용 하지 않고 복제본 세트를 rs.reconfigForPSASet()
재구성하는 절차를 간략하게 설명합니다.
절차
앞의 작업 중 하나를 수행하는 경우 다음 두 단계를 통해 복제본 세트를 재구성해야 합니다.
{ votes: 1, priority: 0 }
으로 세컨더리를 추가하거나 수정하려면 복제본 세트를 재구성합니다.추가되거나 수정된 세컨더리가 커밋된 모든 쓰기를 따라잡으면 우선 순위가 0이 아닌
{ votes: 1, priority: <num> }
이 되도록 세컨더리를 재구성합니다.
2단계 접근 방식은 새 세컨더리가 이전 프라이머리의 쓰기를 모두 커밋하기 전에 새 세컨더리로 페일오버하는 경우 커밋된 쓰기를 롤백할 가능성을 방지합니다.
rs.reconfigForPSASet()
메서드를 실행하려면 복제본 세트의 프라이머리 에 연결해야 합니다.
투표가 1이지만 우선 순위가 0인 세컨더리 추가 또는 수정
투표, 데이터 보유 노드를 추가하거나 변경할 때 커밋되지 않은 쓰기가 롤백되는 것을 방지하려면 먼저 { priority: 0 }
가 있는 노드를 추가해야 합니다.
mongosh
에서 복제본 세트 구성을 수정합니다. 기존 복제본 세트를 재구성하려면 먼저 rs.conf()
을 사용하여 현재 구성을 조회하고 필요에 따라 구성 문서를 수정한 다음 수정된 문서를 rs.reconfig()
에 전달합니다.
cfg = rs.conf(); cfg["members"] = [ { // existing member or members }, { "_id" : <num>, // The array position of the new member in the // ``members`` array. "host" : <host>, "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 0, "tags" : { <tags> }, "secondaryDelaySecs" : <num>, "votes" : 1 }, { // existing member or members } ] rs.reconfig(cfg);
우선 순위가 0이 아닌 우선 순위를 갖도록 세컨더리를 재구성합니다.
세컨더리가 따라잡으면 우선순위를 원하는 수로 설정합니다. 이 재구성이 성공하기 전에 보조 서버는 투표가 0일 때 커밋된 모든 쓰기를 복제해야 합니다. 이는 rs.reconfig()
명령을 실행할 때 자동으로 확인됩니다.
cfg = rs.conf(); cfg["members"] = [ { // existing member or members }, { "_id" : <num>, // The array position of the new member in the // ``members`` array. "host" : <host>, "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : <num>, "tags" : { <tags> }, "secondaryDelaySecs" : <num>, "votes" : 1 }, { // existing member or members } ] rs.reconfig(cfg);