Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ / /

자체 관리 복제본 세트 멤버를 프라이머리로 강제 설정

이 페이지의 내용

  • 개요
  • 고려 사항
  • 절차

복제본 세트 멤버에 세트의 다른 멤버보다 높은 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"
}
]
}
  1. 프라이머리에 연결된 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.netm2.example.netm1.example.net과 동기화됩니다(일반적으로 10초 이내).

    • m1.example.net 은 더 이상 최고 우선 순위를 가지지 않는다고 판단하고 대부분의 경우 물러납니다. m3.example.net의 동기화가 훨씬 뒤처질 경우 m1.example.net물러나지 않습니다. 이 경우 m1.example.netm3.example.net이 optime 10초 이내로 기다린 다음 물러납니다. 이렇게 하면 프라이머리의 페일오버 없이 시간을 최소화할 수 있습니다.

    • 강등은 priority 설정을 기초로 m3.example.net가 프라이머리가 되는 투표를 강제로 실시합니다.

  2. 선택 사항으로 m3.example.netm1.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)를 제공합니다.

다음 멤버를 포함하는 복제본 세트를 고려합니다.

다음 절차를 통해 멤버를 프라이머리로 강제 지정합니다.

  1. mongosh에서 복제본 세트를 예상한대로 실행하려면 rs.status()를 실행합니다.

  2. mdb2.example.net에서 실행 중인 mongod 인스턴스에 연결된 mongosh 세션에서 mdb2.example.net을 120초 동안 프라이머리가 되려고 시도하지 않도록 동결합니다.

    rs.freeze(120)
  3. mdb0.example.net에서 실행 중인 mongod에 연결된 mongosh 세션에서 120초 동안 프라이머리 mongod가 될 자격이 없는 이 인스턴스를 단계적으로 다운시킵니다.

    rs.stepDown(120)

    mdb1.example.net 프라이머리가 됩니다.

    참고

    전환 중 짧은 시간 동안 세트에 프라이머리가 존재하지 않습니다.

자세한 내용은 replSetFreezereplSetStepDown 명령을 래핑하는 rs.freeze()rs.stepDown() 메서드를 고려합니다.

돌아가기

멤버 유지

이 페이지의 내용