자체 관리 복제본 세트 멤버를 프라이머리로 강제 설정
개요
복제본 세트 멤버에 세트의 다른 멤버보다 높은 members[n].priority
값을 지정하여 강제로 프라이머리 멤버가 되도록 할 수 있습니다.
선택 사항으로 특정 멤버의 members[n].priority
값을 0
으로 설정하여 프라이머리가 되지 못하게 강제할 수도 있습니다(즉, 해당 멤버는 프라이머리로 선출될 수 없습니다). 자세한 내용은 우선 순위가 0인 복제본 세트 멤버에서 확인하세요.
우선 순위에 관한 자세한 내용은 members[n].priority
에서 확인하세요.
고려 사항
복제본 세트를 재구성하거나 프라이머리를 선출하려면 복제본 세트에 구성된 멤버의 과반수가 세트에서 사용할 수 있어야 합니다. 자세한 내용은 복제본 세트 투표에서 확인하세요.
절차
참고
force
필드를 true
로 설정하지 않고 rs.stepDown()
또는 replSetStepDown
을 사용하여 프라이머리를 강등하는 경우, 강등된 프라이머리는 즉시 투표를 호출할 수 있는 적격 세컨더리를 지명합니다.
우선 순위를 높게 설정하여 멤버를 프라이머리로 강제 설정
이 절차에서는 현재 프라이머리가 m1.example.net
인 상태에서 m3.example.net
을 프라이머리로 만들려고 한다고 가정합니다. 또한 아래의 구성으로 멤버가 세 명인 복제본 세트가 있다고 가정합니다. 구성에 관한 자세한 내용은 복제본 세트 구성 사용에서 확인하세요.
이 절차에서는 다음 구성이 적용되어 있다고 가정합니다.
{ "_id" : "rs", "version" : 7, "members" : [ { "_id" : 0, "host" : "m1.example.net:27017" }, { "_id" : 1, "host" : "m2.example.net:27017" }, { "_id" : 2, "host" : "m3.example.net:27017" } ] }
프라이머리에 연결된
mongosh
세션에서 다음 작업 순서를 사용하여m3.example.net
을 프라이머리로 설정합니다.cfg = rs.conf() cfg.members[0].priority = 0.5 cfg.members[1].priority = 0.5 cfg.members[2].priority = 1 rs.reconfig(cfg) 마지막 문은 수정된 구성 문서로
rs.reconfig()
를 호출하여m3.example.net
이 다른mongod
인스턴스보다 높은members[n].priority
값을 갖도록 구성합니다.다음과 같은 일련의 이벤트가 발생합니다.
m3.example.net
과m2.example.net
이m1.example.net
과 동기화됩니다(일반적으로 10초 이내).m1.example.net
은 더 이상 최고 우선 순위를 가지지 않는다고 판단하고 대부분의 경우 물러납니다.m3.example.net
의 동기화가 훨씬 뒤처질 경우m1.example.net
은 물러나지 않습니다. 이 경우m1.example.net
은m3.example.net
이 optime 10초 이내로 기다린 다음 물러납니다. 이렇게 하면 프라이머리의 페일오버 없이 시간을 최소화할 수 있습니다.강등은
priority
설정을 기초로m3.example.net
가 프라이머리가 되는 투표를 강제로 실시합니다.
선택 사항으로
m3.example.net
이m1.example.net
의 optime보다 10초 이상 늦고, 10초 이내에 프라이머리를 지정할 필요가 없는 경우m1.example.net
이 다음을 강제로 강등할 수 있습니다.db.adminCommand({replSetStepDown: 86400, force: 1}) 이렇게 하면 프라이머리가 될 수 있는 다른 구성원이 없더라도
m1.example.net
은 86,400초(24시간) 동안 프라이머리가 되지 못합니다.m3.example.net
을 따라잡으면m1.example.net
이 프라이머리가 됩니다.나중에
m3.example.net
이 따라잡을 때까지m1.example.net
을 다시 프라이머리로 설정하려면m1.example.net
을 다시 투표하기 위해 다음 명령을 실행합니다.rs.freeze() rs.freeze()
는replSetFreeze
데이터베이스 명령을 감싸는 래퍼(wrapper)를 제공합니다.
데이터베이스 명령을 사용하여 멤버를 프라이머리로 강제 지정
다음 멤버를 포함하는 복제본 세트를 고려합니다.
다음 절차를 통해 멤버를 프라이머리로 강제 지정합니다.
mongosh
에서 복제본 세트를 예상한대로 실행하려면rs.status()
를 실행합니다.mdb2.example.net
에서 실행 중인mongod
인스턴스에 연결된mongosh
세션에서mdb2.example.net
을 120초 동안 프라이머리가 되려고 시도하지 않도록 동결합니다.rs.freeze(120) mdb0.example.net
에서 실행 중인mongod
에 연결된mongosh
세션에서 120초 동안 프라이머리mongod
가 될 자격이 없는 이 인스턴스를 단계적으로 다운시킵니다.rs.stepDown(120) mdb1.example.net
프라이머리가 됩니다.참고
전환 중 짧은 시간 동안 세트에 프라이머리가 존재하지 않습니다.
자세한 내용은 replSetFreeze
및 replSetStepDown
명령을 래핑하는 rs.freeze()
및 rs.stepDown()
메서드를 고려합니다.