샤드에 구성원 추가
이 페이지의 내용
샤딩된 클러스터 의 기존 샤드 에 멤버를 추가할 수 있습니다. 복제본 세트 에 멤버를 추가하려는 것과 같은 이유로 샤드 에 멤버를 추가해야 할 수도 있습니다. 예를 예시 , 멤버 수를 늘리면 페일오버 이벤트 시 프라이머리 를 대체할 추가 후보가 제공됩니다. 멤버를 추가하면 데이터 중복성과 복제본 세트 가용성도 향상됩니다.
자세한 내용은 복제 세트 배포 아키텍처를 참조하세요.
이 작업에 관한 정보
MongoDB 5.0 이전에는 데이터가 일관될 때까지 새로 추가된 보조 서버가 읽기 작업을 수행하거나 기본 서버가 될 수 없더라도 여전히 투표 멤버로 간주됩니다. 5.0 이전 버전의 MongoDB를 실행 중이고 votes
및 priority
설정이 0보다 큰 보조를 추가하는 경우, 투표권이 있는 멤버의 대부분이 온라인 상태이지만 기본이 없는 경우가 발생할 수 있습니다. 선출됩니다. 이러한 상황을 방지하려면 처음에 priority :0
및 votes :0
을(를) 사용하여 새 세컨더리를 추가하는 것이 좋습니다. 그런 다음 rs.status()
를 실행하여 멤버가 SECONDARY
상태로 전환되었는지 확인합니다. 마지막으로 rs.reconfig()
를 사용하여 우선순위와 투표를 업데이트합니다.
시작하기 전에
샤드 복제본 세트 에 멤버를 추가하려면 다음이 필요합니다.
활성 샤딩된 클러스터 복제본 세트.
새 멤버를 위한 새 호스트 서버 새 호스트 서버는 샤딩된 데이터 세트를 지원할 수 있어야 하며 네트워크를 통해 활성 복제본 세트에 액세스할 수 있어야 합니다.
MongoDB 8.0 부터는 directShardOperations
역할 을 사용하여 샤드 에 대해 직접 명령을 실행해야 하는 유지 관리 작업을 수행할 수 있습니다.
경고
directShardOperations
역할 을 사용하여 명령을 실행하면 클러스터 가 올바르게 작동하지 않고 데이터가 손상될 수 있습니다. directShardOperations
역할 은 유지 관리 목적으로만 사용하거나 MongoDB 지원 의 지침 에 따라 사용하세요. 유지 관리 작업 수행이 완료되면 directShardOperations
역할 사용을 중지합니다.
단계
데이터 디렉토리 준비
다음 전략 중 하나를 사용하여 새 멤버의 데이터 디렉토리 를 준비합니다.
새 멤버가 기존 멤버의 데이터를 자동으로 동기화하도록 합니다. 이 프로세스는 시간이 걸리지만 관리자의 개입이 필요하지 않습니다.
새 구성원의 데이터 디렉터리에 데이터가 포함되어 있지 않은 지 확인합니다. 새 멤버는 기존 멤버에서 데이터를 복사합니다.
새 멤버가 복구 중인 상태인 경우, 해당 멤버는 종료 후 세컨더리 멤버가 되어야만 MongoDB가 복제 프로세스의 일환으로 모든 데이터를 복사할 수 있습니다.
기존 멤버에서 데이터 디렉토리 를 수동으로 복사합니다. 새 멤버는 세컨더리 멤버가 되며 복제본 세트 의 현재 상태 를 따라잡게 됩니다. 데이터를 복사하면 새 멤버가 다른 복제본 세트 멤버와 동기화 되는 데 걸리는 시간이 단축될 수 있습니다.
데이터 디렉터리를 새 멤버에 복사할 수 있는지 확인하고 Oplog에서 허용하는 창 내에서 복제를 시작합니다. 그렇지 않으면 새 인스턴스가 초기 동기화를 수행해야 하며, 이 경우 자체 관리 복제 세트 멤버 재동기화에 설명된 대로 데이터가 완전히 재동기화됩니다.
oplog 와 관련된 복제본 세트 멤버의 현재 상태 를 확인하려면
rs.printReplicationInfo()
를 사용합니다.
복제 배포 패턴에 대한 배경 지식은 복제 세트 배포 아키텍처 문서를 참조하세요.
새 mongod
인스턴스시작
데이터 디렉토리 와 복제본 세트 이름을 지정합니다. 다음 예시 에서는 /srv/mongodb/db0
데이터 디렉토리 와 rs0
복제본 세트 를 지정합니다.
mongod --dbpath /srv/mongodb/db0 --replSet rs0 --bind_ip localhost,<ip address of the mongod host>
경고
인스턴스를 공개적으로 접근 가능한 IP 주소에 바인딩하기 전에 무단 접근으로부터 클러스터를 보호해야 합니다. 보안 권장 사항의 전체 목록은 자체 관리 배포서버에 대한 보안 검사 목록을 참조하세요. 최소한 인증을 활성화하고 네트워크 인프라를 강화하는 것을 고려합니다.
구성 옵션에 대한 자세한 내용은 mongod
매뉴얼 페이지를 참조하십시오.
복제본 세트의 프라이머리에 연결
프라이머리에 연결되어 있는 동안에만 멤버를 추가할 수 있습니다. 프라이머리에 연결하려면 mongosh
를 사용합니다. host
및 port
값을 배포서버와 관련된 값으로 바꿉니다.
mongosh --host mongodb0.example.com --port 28015
어느 멤버가 프라이머리인지 모르는 경우, 복제본 세트의 어느 멤버에든 로그인하여 db.hello()
명령을 실행합니다.
를 사용하여 복제본 세트 에 새 멤버를 rs.add()
추가합니다.
member configuration document
를 메서드에 전달합니다. 예를 예시 mongodb3.example.net
호스팅하다 에 멤버를 추가하려면 다음 명령을 실행합니다.
rs.add( { host: "mongodb3.example.net:27017", priority: 0, votes: 0 } )
새 멤버가 상태 에 도달했는지 SECONDARY
확인합니다.
복제본 세트 멤버의 상태 를 확인하려면 rs.status()
를 실행 .
rs.status()
다음 단계
새로 추가된 멤버가 SECONDARY
상태로 전환되면 필요한 경우 rs.reconfig()
를 사용하여 새로 추가된 멤버의 priority
및 votes
를 업데이트합니다.
경고
rs.reconfig()
2} 셸 메서드는 현재 기본값이 강제로 물러나도록 하여 선거를 실시할 수 있습니다. 기본 연결이 종료되면mongod
모든 클라이언트 연결을 닫습니다. 일반적으로 10~20초 정도 소요되지만 예약된 유지 관리 기간 동안 이러한 변경을 수행해 보세요.유효성 검사 규칙은 MongoDB 버전마다 다를 수 있으므로 다른 MongoDB 버전의 멤버를 포함하는 복제본 세트를 다시 구성하지 마십시오.
예시
rs.conf()
이(가) members
배열 의 다섯 번째 요소로 mongodb3.example.net:27017
에 대한 구성 문서 를 반환하는 경우, 우선 순위 를 업데이트 하고 1
에 투표하려면 다음 작업 순서를 사용합니다.
var cfg = rs.conf(); cfg.members[4].priority = 1 cfg.members[4].votes = 1 rs.reconfig(cfg)