Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ /

자체 관리형 샤드 클러스터 배포

이 페이지의 내용

  • 개요
  • 고려 사항
  • 시작하기 전에
  • 절차

이 튜토리얼에는 mongos, config 서버 복제본 세트 및 2개의 샤드 복제본 세트로 구성된 새로운 샤딩된 클러스터 생성이 포함됩니다.

샤딩된 클러스터의 각 멤버는 클러스터의 다른 모든 멤버에 연결할 수 있어야 합니다. 여기에는 모든 샤드와 config 서버가 포함됩니다. 모든 인터페이스와 방화벽을 포함한 네트워크 및 보안 시스템이 이러한 연결을 허용하는지 확인하세요.

중요

변경된 IP 주소로 인해 구성이 업데이트되는 것을 방지하려면 IP 주소 대신 DNS 호스트 이름을 사용하세요. 특히 복제본 세트 구성원 또는 샤딩된 클러스터 구성원을 구성할 때 IP 주소 대신 DNS 호스트 이름을 사용하는 것이 중요합니다.

IP 주소 대신 호스트 이름을 사용하여 스플릿 네트워크 호라이즌 전반에 걸쳐 클러스터를 구성하세요. MongoDB 5.0부터 IP 주소로만 구성된 노드는 스타트업 유효성 검사에 실패하며 시작되지 않습니다.

호스트 식별자의 호스트 이름 부분으로 localhost 또는 해당 IP 주소를 사용하는 경우, 클러스터의 다른 모든 MongoDB 컴포넌트에 대한 호스트 설정으로 해당 식별자를 반드시 사용해야 합니다.

예를 들어 sh.addShard() 메서드는 타겟 샤드의 호스트 이름에 대해 host 매개 변수를 받습니다. hostlocalhost로 설정한 경우, 클러스터 내의 모든 다른 샤드들에 대해서도 localhost를 호스트로 사용해야 합니다.

이 튜토리얼에는 자체 관리형 내부/멤버십 인증 또는 자체 관리형 배포서버의 역할 기반 액세스 제어를 구성하는 데 필요한 단계는 포함되어 있지 않습니다.

프로덕션 환경에서는 샤딩된 클러스터가 내부 인증 및 클라이언트 액세스를 위해 최소 x.509 보안을 사용해야 합니다.

MongoDB 8.0 부터는 directShardOperations 역할 을 사용하여 샤드 에 대해 직접 명령을 실행해야 하는 유지 관리 작업을 수행할 수 있습니다.

경고

directShardOperations 역할 을 사용하여 명령을 실행하면 클러스터 가 올바르게 작동하지 않고 데이터가 손상될 수 있습니다. directShardOperations 역할 은 유지 관리 목적으로만 사용하거나 MongoDB 지원 의 지침 에 따라 사용하세요. 유지 관리 작업 수행이 완료되면 directShardOperations 역할 사용을 중지합니다.

다음 단계는 config 서버 복제본 세트를 배포하는 단계입니다.

프로덕션 배포의 경우, 최소 세 멤버를 갖는 config 서버 복제 세트를 배포하세요. 테스트를 위해서 단일 멤버 복제본 세트를 생성할 수 있습니다.

참고

config 서버 복제본 세트는 샤드 복제본 세트와 동일한 이름을 사용하면 안 됩니다.

이 튜토리얼에서 config 서버 복제본 세트 멤버은 다음 호스트와 연결됩니다.

config 서버 복제본 집합 멤버
호스트 이름

회원 0

cfg1.example.net

회원 1

cfg2.example.net

멤버 2

cfg3.example.net

1

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.dbPathnet.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 참조 페이지를 참조하세요.

2

mongosh를 config 서버 멤버 중 하나에 연결합니다.

mongosh --host <hostname> --port <port>
3

mongosh에서 rs.initiate() 메서드를 실행합니다.

rs.initiate()는 선택 사항으로 복제본 세트 구성 문서를 가져올 수 있습니다. 복제본 세트 구성 문서에 다음을 포함합니다.

  • _idreplication.replSetName 또는 --replSet 옵션에 지정된 복제본 세트 이름으로 설정됩니다.

  • config 서버 복제본 세트에 대해 configsvr 필드가 true로 설정.

  • 복제본 세트의 각 멤버에 대한 문서가 있는 members 배열.

중요

rs.initiate()를 복제본 세트의 단일 mongod 인스턴스에서만 실행합니다.

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" }
]
}
)

복제본 세트 구성 문서에 대한 자세한 내용은 자체 관리형 복제본 세트 구성 을 참조하세요.

config 서버 복제본 세트(CSRS)가 시작되고 작동되면 샤드 복제본 세트 생성을 진행합니다.

프로덕션 배포에서는 멤버가 세 개 이상 포함된 복제본 세트를 사용하세요. 테스트를 위해서는 단일 멤버 복제본 세트를 생성할 수 있습니다.

참고

샤드 복제본 세트는 config 서버 복제본 세트와 동일한 이름을 사용해서는 안 됩니다.

각 샤드에 대해 다음 단계를 사용하여 샤드 복제본 세트를 생성합니다.

1

mongod를 시작할 때 구성 파일 또는 명령줄을 통해 mongod 설정을 지정합니다.

구성 파일을 사용하는 경우 다음을 설정합니다.

sharding:
clusterRole: shardsvr
replication:
replSetName: <replSetName>
net:
bindIp: localhost,<ip address>

설정 파일 경로로 --config 옵션을 사용하여 mongod를 시작합니다.

mongod --config <path-to-config-file>

명령줄 옵션을 사용하는 경우 --replSet, --shardsvr, --bind_ip 옵션과 배포서버에 적합한 기타 옵션을 사용해 mongod을(를) 시작합니다. 예를 들면 다음과 같습니다.

mongod --shardsvr --replSet <replSetname> --dbpath <path> --bind_ip localhost,<hostname(s)|ip address(es)>

시작 매개변수에 대한 자세한 내용은 mongod 참조 페이지를 참조하세요.

2

mongosh를 복제본 세트 멤버 중 하나에 연결합니다.

mongosh --host <hostname> --port <port>
3

mongosh에서 rs.initiate() 메서드를 실행합니다.

rs.initiate()는 선택 사항으로 복제본 세트 구성 문서를 가져올 수 있습니다. 복제본 세트 구성 문서에 다음을 포함합니다.

  • _id 필드는 replication.replSetName 또는 --replSet 옵션에 지정된 복제본 세트 이름으로 설정됩니다.

  • 복제본 세트의 각 멤버에 대한 문서가 있는 members 배열.

다음 예시에서는 멤버가 3개인 새 복제본 세트를 시작합니다.

중요

rs.initiate()를 복제본 세트의 단일 mongod 인스턴스에서만 실행합니다.

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" }
]
}
)

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.를 사용하여 샤딩된 클러스터에 연결할 수 있습니다.

mongosmongosh를 연결합니다. mongos가 실행 중인 hostport를 지정합니다.

mongosh --host <hostname> --port <port>

mongoshmongos에 연결하고 나면 다음 절차를 계속 진행하여 클러스터에 샤드를 추가합니다.

mongos에 연결된 mongosh 세션에서 sh.addShard() 메서드를 사용하여 각 샤드를 클러스터에 추가합니다.

다음 작업은 클러스터에 단일 샤드 복제본 세트를 추가합니다.

sh.addShard( "<replSetName>/s1-mongo1.example.net:27018,s1-mongo2.example.net:27018,s1-mongo3.example.net:27018")

클러스터에 원하는 모든 샤드가 포함될 때까지 이 단계를 반복합니다.

컬렉션을 샤딩하려면 mongoshmongos에 연결하고 sh.shardCollection() 메서드를 사용합니다.

참고

샤딩 및 인덱스

컬렉션에 이미 데이터가 포함되어 있는 경우, 컬렉션을 샤딩하기 전에 샤드 키를 지원하는 인덱스를 생성해야 합니다. 컬렉션이 비어 있으면 MongoDB는 sh.shardCollection()의 일부로 인덱스를 생성합니다.

MongoDB는 컬렉션을 샤딩하는 두 가지 전략을 제공합니다.

  • 해시된 샤딩은 단일 필드의 해시된 인덱스 샤드 키로 사용하여 샤딩된 클러스터에서 데이터를 분할합니다.

    sh.shardCollection("<database>.<collection>", { <shard key field> : "hashed" } )
  • 범위 기반 샤딩은 샤드 키로 여러 필드를 사용할 수 있으며, 샤드 키 값에 의해 결정된 연속적인 범위로 데이터를 나눕니다.

    sh.shardCollection("<database>.<collection>", { <shard key field> : 1, ... } )

샤드 키 선택은 샤딩의 효율성뿐만 아니라 구역과 같은 특정 샤딩 기능을 활용하는 능력에 영향을 미칩니다. 효과적인 샤드 키를 선택하는 방법을 알아보려면 샤드 키 선택을 참조하세요.

mongoshconvertShardKeyToHashed() 메서드를 제공합니다. 이 메서드는 해시된 인덱스와 동일한 해시 함수를 사용하며 키의 해시된 값을 확인하는 데 사용할 수 있습니다.

다음도 참조하세요.

돌아가기

자체 관리형 샤드 클러스터 배포 및 관리