자체 관리형 샤드 클러스터 배포
개요
이 튜토리얼에는 mongos
, config 서버 복제본 세트 및 2개의 샤드 복제본 세트로 구성된 새로운 샤딩된 클러스터 생성이 포함됩니다.
고려 사항
연결성
샤딩된 클러스터의 각 멤버는 클러스터의 다른 모든 멤버에 연결할 수 있어야 합니다. 여기에는 모든 샤드와 config 서버가 포함됩니다. 모든 인터페이스와 방화벽을 포함한 네트워크 및 보안 시스템이 이러한 연결을 허용하는지 확인하세요.
호스트 이름 및 구성
중요
변경된 IP 주소로 인해 구성이 업데이트되는 것을 방지하려면 IP 주소 대신 DNS 호스트 이름을 사용하세요. 특히 복제본 세트 구성원 또는 샤딩된 클러스터 구성원을 구성할 때 IP 주소 대신 DNS 호스트 이름을 사용하는 것이 중요합니다.
IP 주소 대신 호스트 이름을 사용하여 스플릿 네트워크 호라이즌 전반에 걸쳐 클러스터를 구성하세요. MongoDB 5.0부터 IP 주소로만 구성된 노드는 스타트업 유효성 검사에 실패하며 시작되지 않습니다.
로컬 호스트 배포
호스트 식별자의 호스트 이름 부분으로 localhost
또는 해당 IP 주소를 사용하는 경우, 클러스터의 다른 모든 MongoDB 컴포넌트에 대한 호스트 설정으로 해당 식별자를 반드시 사용해야 합니다.
예를 들어 sh.addShard()
메서드는 타겟 샤드의 호스트 이름에 대해 host
매개 변수를 받습니다. host
를 localhost
로 설정한 경우, 클러스터 내의 모든 다른 샤드들에 대해서도 localhost
를 호스트로 사용해야 합니다.
보안
이 튜토리얼에는 자체 관리형 내부/멤버십 인증 또는 자체 관리형 배포서버의 역할 기반 액세스 제어를 구성하는 데 필요한 단계는 포함되어 있지 않습니다.
프로덕션 환경에서는 샤딩된 클러스터가 내부 인증 및 클라이언트 액세스를 위해 최소 x.509 보안을 사용해야 합니다.
절차
config 서버 복제본 세트 만들기
다음 단계는 config 서버 복제본 세트를 배포하는 단계입니다.
프로덕션 배포의 경우, 최소 세 멤버를 갖는 config 서버 복제 세트를 배포하세요. 테스트를 위해서 단일 멤버 복제본 세트를 생성할 수 있습니다.
참고
config 서버 복제본 세트는 샤드 복제본 세트와 동일한 이름을 사용하면 안 됩니다.
이 튜토리얼에서 config 서버 복제본 세트 멤버은 다음 호스트와 연결됩니다.
config 서버 복제본 집합 멤버 | 호스트 이름 |
---|---|
회원 0 | cfg1.example.net |
회원 1 | cfg2.example.net |
멤버 2 | cfg3.example.net |
config 서버 복제본 세트의 각 멤버를 시작합니다.
각 mongod
를 시작할 때 구성 파일 또는 명령줄을 통해 mongod
설정을 지정합니다.
구성 파일을 사용하는 경우 다음을 설정합니다.
sharding: clusterRole: configsvr replication: replSetName: <replica set name> net: bindIp: localhost,<hostname(s)|ip address(es)>
sharding.clusterRole
~configsvr
,replication.replSetName
config 서버 복제본 세트의 이름net.bindIp
원격 클라이언트(config 서버 복제본 세트의 다른 멤버와 샤딩된 클러스터의 다른 멤버 포함)가 인스턴스에 연결하는 데 사용할 수 있는 호스트 이름/IP 주소 또는 쉼표로 구분된 호스트 이름 또는 IP 주소 목록 선택 옵션경고
로컬 호스트가 아닌 에 바인딩하기 전에(예: 공개적으로 액세스할 수 있는) IP 주소 인 경우 무단 액세스 로부터 클러스터 를 보호했는지 확인합니다. 보안 권장 사항의 전체 목록은 자체 관리 배포서버를 위한 보안 체크리스트를 참조하세요. 최소한 인증 을 활성화 하고 네트워크 인프라를 강화하는 것을 고려하세요.
배포서버에 적합한 추가 설정, 예를 들어
storage.dbPath
및net.port
. 구성 파일에 대한 자세한 내용은 구성 옵션을 참조하세요.
설정 파일 경로로 --config
옵션을 사용하여 mongod
를 시작합니다.
mongod --config <path-to-config-file>
명령줄 옵션을 사용하는 경우 --configsvr
, --replSet
, --bind_ip
및 배포에 적합한 기타 옵션으로 mongod
를 시작합니다. 예시:
경고
로컬 호스트가 아닌 에 바인딩하기 전에(예: 공개적으로 액세스할 수 있는) IP 주소 인 경우 무단 액세스 로부터 클러스터 를 보호했는지 확인합니다. 보안 권장 사항의 전체 목록은 자체 관리 배포서버를 위한 보안 체크리스트를 참조하세요. 최소한 인증 을 활성화 하고 네트워크 인프라를 강화하는 것을 고려하세요.
mongod --configsvr --replSet <replica set name> --dbpath <path> --bind_ip localhost,<hostname(s)|ip address(es)>
시작 매개변수에 대한 자세한 내용은 mongod
참조 페이지를 참조하세요.
config 서버 중 하나에 연결합니다.
mongosh
를 config 서버 멤버 중 하나에 연결합니다.
mongosh --host <hostname> --port <port>
복제본 세트를 시작합니다.
mongosh
에서 rs.initiate()
메서드를 실행합니다.
rs.initiate()
는 선택 사항으로 복제본 세트 구성 문서를 가져올 수 있습니다. 복제본 세트 구성 문서에 다음을 포함합니다.
_id
는replication.replSetName
또는--replSet
옵션에 지정된 복제본 세트 이름으로 설정됩니다.config 서버 복제본 세트에 대해
configsvr
필드가true
로 설정.복제본 세트의 각 멤버에 대한 문서가 있는
members
배열.
중요
복제본 세트에 대해 단 mongod
rs.initiate()
하나의 인스턴스에서만 를 실행합니다.
rs.initiate( { _id: "myReplSet", configsvr: true, members: [ { _id : 0, host : "cfg1.example.net:27019" }, { _id : 1, host : "cfg2.example.net:27019" }, { _id : 2, host : "cfg3.example.net:27019" } ] } )
복제본 세트 구성 문서에 대한 자세한 내용은 자체 관리형 복제본 세트 구성 을 참조하세요.
참고
rs.initiate()
명령이 완료되는 데 몇 초 정도 걸릴 수 있습니다. 이 절차에서 config 서버 복제본 세트(CSRS)를 사용하려면 초기화가 완료될 때까지 기다려야 합니다. CSRS가 초기화되지 않은 경우 CSRS 멤버에 대해 작업을 수행하려고 할 때 NotYetInitialized
오류가 표시됩니다.
config 서버 복제본 세트(CSRS)가 시작되고 작동되면 샤드 복제본 세트 생성을 진행합니다.
샤드 복제본 세트 생성
프로덕션 배포에서는 멤버가 세 개 이상 포함된 복제본 세트를 사용하세요. 테스트를 위해서는 단일 멤버 복제본 세트를 생성할 수 있습니다.
참고
샤드 복제본 세트는 config 서버 복제본 세트와 동일한 이름을 사용해서는 안 됩니다.
각 샤드에 대해 다음 단계를 사용하여 샤드 복제본 세트를 생성합니다.
샤드 복제본 세트의 각 멤버를 시작합니다.
각 mongod
를 시작할 때 구성 파일 또는 명령줄을 통해 mongod
설정을 지정합니다.
구성 파일을 사용하는 경우 다음을 설정합니다.
sharding: clusterRole: shardsvr replication: replSetName: <replSetName> net: bindIp: localhost,<ip address>
replication.replSetName
복제본 세트의 이름sharding.clusterRole
옵션을shardsvr
로 설정net.bindIp
원격 클라이언트(config 서버 복제본 세트의 다른 멤버와 샤딩된 클러스터의 다른 멤버 포함)가 인스턴스에 연결하는 데 사용할 수 있는 ip 또는 쉼표로 구분된 ip 목록 선택 옵션경고
로컬 호스트가 아닌 에 바인딩하기 전에(예: 공개적으로 액세스할 수 있는) IP 주소 인 경우 무단 액세스 로부터 클러스터 를 보호했는지 확인합니다. 보안 권장 사항의 전체 목록은 자체 관리 배포서버를 위한 보안 체크리스트를 참조하세요. 최소한 인증 을 활성화 하고 네트워크 인프라를 강화하는 것을 고려하세요.
배포서버에 적합한 추가 설정, 예를 들어
storage.dbPath
및net.port
. 구성 파일에 대한 자세한 내용은 구성 옵션을 참조하세요.
설정 파일 경로로 --config
옵션을 사용하여 mongod
를 시작합니다.
mongod --config <path-to-config-file>
샤드 복제본 세트의 멤버 중 하나에 연결합니다.
mongosh
를 복제본 세트 멤버 중 하나에 연결합니다.
mongosh --host <hostname> --port <port>
복제본 세트를 시작합니다.
mongosh
에서 rs.initiate()
메서드를 실행합니다.
rs.initiate()
는 선택 사항으로 복제본 세트 구성 문서를 가져올 수 있습니다. 복제본 세트 구성 문서에 다음을 포함합니다.
_id
필드는replication.replSetName
또는--replSet
옵션에 지정된 복제본 세트 이름으로 설정됩니다.복제본 세트의 각 멤버에 대한 문서가 있는
members
배열.
다음 예시에서는 멤버가 3개인 새 복제본 세트를 시작합니다.
중요
복제본 세트에 대해 단 mongod
rs.initiate()
하나의 인스턴스에서만 를 실행합니다.
rs.initiate( { _id : "myReplSet", members: [ { _id : 0, host : "s1-mongo1.example.net:27018" }, { _id : 1, host : "s1-mongo2.example.net:27018" }, { _id : 2, host : "s1-mongo3.example.net:27018" } ] } )
샤드 클러스터에 대해 mongos
시작
config 서버를 지정하기 위해 구성 파일이나 명령줄 매개변수를 사용하여mongos
를 시작합니다.
구성 파일을 사용하는 경우 sharding.configDB
를 config 서버 복제본 세트 이름으로 설정하고 복제본 세트의 멤버를 하나 이상 <replSetName>/<host:port>
형식으로 설정합니다.
경고
로컬 호스트가 아닌 에 바인딩하기 전에(예: 공개적으로 액세스할 수 있는) IP 주소 인 경우 무단 액세스 로부터 클러스터 를 보호했는지 확인합니다. 보안 권장 사항의 전체 목록은 자체 관리 배포서버를 위한 보안 체크리스트를 참조하세요. 최소한 인증 을 활성화 하고 네트워크 인프라를 강화하는 것을 고려하세요.
sharding: configDB: <configReplSetName>/cfg1.example.net:27019,cfg2.example.net:27019 net: bindIp: localhost,<hostname(s)|ip address(es)>
--config
옵션과 구성 파일 경로를 지정하여 mongos
를 시작합니다.
mongos --config <path-to-config>
구성 파일에 대한 자세한 내용은 구성 옵션을 참조하세요.
명령줄 매개 변수를 사용하는 경우 mongos
를 시작하고 --configdb
, --bind_ip
및 배포서버 서버에 적합한 기타 옵션을 지정합니다. 예를 예시 다음과 같습니다.
경고
로컬 호스트가 아닌 에 바인딩하기 전에(예: 공개적으로 액세스할 수 있는) IP 주소 인 경우 무단 액세스 로부터 클러스터 를 보호했는지 확인합니다. 보안 권장 사항의 전체 목록은 자체 관리 배포서버를 위한 보안 체크리스트를 참조하세요. 최소한 인증 을 활성화 하고 네트워크 인프라를 강화하는 것을 고려하세요.
mongos --configdb <configReplSetName>/cfg1.example.net:27019,cfg2.example.net:27019,cfg3.example.net:27019 --bind_ip localhost,<hostname(s)|ip address(es)>
배포서버에 적합한 다른 옵션을 포함할 수 있습니다.
이때 샤딩된 클러스터는 mongos
및 config 서버로 구성됩니다. 이제 mongosh
.를 사용하여 샤딩된 클러스터에 연결할 수 있습니다.
샤딩된 클러스터에 연결
mongos
에 mongosh
를 연결합니다. mongos
가 실행 중인 host
및 port
를 지정합니다.
mongosh --host <hostname> --port <port>
클러스터에 샤드 추가
mongos
에 연결된 mongosh
세션에서 sh.addShard()
메서드를 사용하여 각 샤드를 클러스터에 추가합니다.
다음 작업은 클러스터에 단일 샤드 복제본 세트를 추가합니다.
sh.addShard( "<replSetName>/s1-mongo1.example.net:27018,s1-mongo2.example.net:27018,s1-mongo3.example.net:27018")
클러스터에 원하는 모든 샤드가 포함될 때까지 이 단계를 반복합니다.
데이터베이스에 샤딩 활성화
collection을 샤딩하려면 먼저 collection의 데이터베이스에 대해 샤딩을 활성화해야 합니다. 데이터베이스에 대해 샤딩을 활성화해도 데이터를 재배포하지는 않지만 해당 데이터베이스의 collection을 샤딩할 수 있습니다.
mongosh
에 mongos
sh.enableSharding()
연결된 세션에서 메서드를 사용하여 대상 데이터베이스에서 샤딩을 활성화합니다. 데이터베이스에서 샤딩을 활성화하면 데이터베이스 내에서 컬렉션을 샤딩할 수 있습니다.
sh.enableSharding("<database>")
데이터베이스에 대해 샤딩을 활성화하면 MongoDB는 해당 데이터베이스의 모든 데이터를 저장하는 해당 데이터베이스에 프라이머리 샤드 를 할당합니다.
Collection 샤드
중요
컬렉션 을 샤드 하려면 먼저 컬렉션 이 있는 데이터베이스 에 대해 샤딩 을 활성화 해야 합니다.
컬렉션을 샤딩하려면 mongosh
를 mongos
에 연결하고 sh.shardCollection()
메서드를 사용합니다.
참고
샤딩 및 인덱스
컬렉션에 이미 데이터가 포함되어 있는 경우, 컬렉션을 샤딩하기 전에 샤드 키를 지원하는 인덱스를 생성해야 합니다. 컬렉션이 비어 있으면 MongoDB는 sh.shardCollection()
의 일부로 인덱스를 생성합니다.
MongoDB는 컬렉션을 샤딩하는 두 가지 전략을 제공합니다.
샤드 키 관련 고려 사항
샤드 키 선택은 샤딩의 효율성뿐만 아니라 구역과 같은 특정 샤딩 기능을 활용하는 능력에 영향을 미칩니다. 효과적인 샤드 키를 선택하는 방법을 알아보려면 샤드 키 선택을 참조하세요.
mongosh
는 convertShardKeyToHashed()
메서드를 제공합니다. 이 메서드는 해시된 인덱스와 동일한 해시 함수를 사용하며 키의 해시된 값을 확인하는 데 사용할 수 있습니다.