자체 관리형 Config 서버 교체
중요
다음 절차는 8.0 config 서버에 적용됩니다. MongoDB의 이전 버전에 대해서는 해당 버전의 MongoDB 매뉴얼을 참조하세요.
개요
config 서버 복제본 세트가 읽기 전용이 되면(즉, 프라이머리가 없는 경우) 샤딩된 클러스터는 청크 분할 및 마이그레이션과 같은 클러스터 메타데이터를 변경하는 작업을 지원할 수 없습니다. 청크를 분할하거나 마이그레이션할 수는 없지만 애플리케이션에서 샤딩된 클러스터에 데이터를 쓸 수 있습니다.
config 서버 중 하나를 사용할 수 없거나 작동할 수 없는 경우 가능한 한 빨리 수리하거나 교체합니다. 다음 절차에서는 config 서버 복제본 세트 의 멤버를 새 멤버로 바꿉니다.
이 튜토리얼은 MongoDB 8.0 에만 해당됩니다. 이전 버전의 MongoDB에 대해서는 해당 버전의 MongoDB 매뉴얼을 참조하세요.
고려 사항
config 서버에 사용할 경우 복제본 세트 구성에 다음과 같은 제한이 적용됩니다.
중재자가 없어야 합니다.
지연된 멤버가 없어야 합니다.
인덱스를 작성해야 합니다(예:
members[n].buildIndexes
설정이 false로 설정된 멤버가 없어야 합니다).
절차
교체 config 서버를 시작합니다.
--configsvr
, --replSet
, --bind_ip
옵션 및 배포서버에 적합한 기타 옵션을 지정하여 mongod
인스턴트를 시작합니다.
경고
인스턴스를 공개적으로 접근 가능한 IP 주소에 바인딩하기 전에 무단 접근으로부터 클러스터를 보호해야 합니다. 보안 권장 사항의 전체 목록은 자체 관리 배포서버에 대한 보안 검사 목록을 참조하세요. 최소한 인증을 활성화하고 네트워크 인프라를 강화하는 것을 고려합니다.
mongod --configsvr --replSet <replicaSetName> --bind_ip localhost,<hostname(s)|ip address(es)>
새 config 서버를 복제본 세트에 추가합니다.
mongosh
를 config 서버 복제본 세트의 프라이머리에 연결하고 rs.add()
를 사용하여 새 멤버를 추가합니다.
경고
MongoDB 5.0 이전에는 데이터가 일관될 때까지 새로 추가된 보조 서버가 읽기 작업을 수행하거나 기본 서버가 될 수 없더라도 여전히 투표 멤버로 간주됩니다. 5.0 이전 버전의 MongoDB를 실행 중이고 votes
및 priority
설정이 0보다 큰 보조를 추가하는 경우, 투표 회원의 과반수가 온라인 상태이지만 기본 회원을 선출할 수 없는 경우가 발생할 수 있습니다. 이러한 상황을 방지하려면 priority :0
및 votes :0
로 새 보조를 처음에 추가하는 것이 좋습니다. 그런 다음 rs.status()
를 실행하여 멤버가 SECONDARY
상태로 전환되었는지 확인합니다. 마지막으로 rs.reconfig()
를 사용하여 우선 순위와 투표를 업데이트하세요.
rs.add( { host: "<hostnameNew>:<portNew>", priority: 0, votes: 0 } )
초기 동기화 프로세스는 다시 시작하지 않고도 config 서버 복제본 세트의 한 노드에 있는 모든 데이터를 새 노드로 복사합니다.
mongos
인스턴스는 다시 시작하지 않고도 config 서버 복제본 세트 멤버의 변경 사항을 자동으로 인식합니다.
새로 추가된 설정 서버의 투표 및 우선순위 설정을 업데이트합니다.
새 멤버가
SECONDARY
상태에 도달했는지 확인합니다. 복제본 세트 멤버의 상태를 확인하려면rs.status()
를 실행합니다.rs.status() 복제본 세트를 재구성하여 새 멤버의 투표와 우선 순위를 업데이트합니다.
var cfg = rs.conf(); cfg.members[n].priority = 1; // Substitute the correct array index for the new member cfg.members[n].votes = 1; // Substitute the correct array index for the new member rs.reconfig(cfg) 여기서
n
는members
배열에 있는 새 노드의 배열 인덱스입니다.
경고
rs.reconfig()
2} 셸 메서드는 현재 기본값이 강제로 물러나도록 하여 선거를 실시할 수 있습니다. 기본 연결이 종료되면mongod
모든 클라이언트 연결을 닫습니다. 일반적으로 10~20초 정도 소요되지만 예약된 유지 관리 기간 동안 이러한 변경을 수행해 보세요.유효성 검사 규칙은 MongoDB 버전마다 다를 수 있으므로 다른 MongoDB 버전의 멤버를 포함하는 복제본 세트를 다시 구성하지 마십시오.
config 서버 복제본 세트에서 교체할 노드를 제거합니다.
교체 config 서버의 초기 동기화가 완료되면 프라이머리에 연결된 mongosh
세션에서 rs.remove()
를 사용하여 이전 멤버를 제거합니다.
rs.remove("<hostnameOld>:<portOld>")
mongos
인스턴스는 다시 시작하지 않고도 config 서버 복제본 세트 멤버의 변경 사항을 자동으로 인식합니다.
필요한 경우 구성 또는 DNS 항목을 업데이트 합니다.mongos
복제본 세트 config 서버의 경우 mongos
인스턴스는 --configdb
또는 sharding.configDB
설정에서 구성 서버 복제본 세트 이름과 복제본 세트 멤버 중 하나 이상을 지정합니다.
따라서 mongos
인스턴스가 --configdb
또는 sharding.configDB
설정에서 제거된 복제본 세트 멤버를 지정하지 않는 경우 추가 조치가 필요하지 않습니다.
그러나 mongos
인스턴스가 --configdb
또는 configDB
설정에서 제거된 멤버를 지정한 경우 다음 중 하나를 수행합니다.
다음에
mongos
를 다시 시작할 때 사용할 수 있도록 설정을 업데이트하거나이전 config 서버를 제공한 시스템을 가리키는 DNS 항목을 수정하면 동일한 호스트 이름이 새 config 서버를 가리키게 됩니다.