테스트 및 개발을 위한 자체 관리형 복제본 세트 배포
이 절차에서는 개발 또는 테스트 환경에 복제본 세트를 배포하는 방법을 설명합니다. 프로덕션 배포의 경우 자체 관리 복제본 세트 배포 튜토리얼을 참조하세요.
이 튜토리얼에서는 액세스 제어 mongod
가 비활성화된 상태에서 실행 중인 3개의 기존 인스턴스에서 3명의 멤버로 구성된 복제본 세트 를 생성하는 방법을 설명합니다.
액세스 제어가 활성화된 복제본 세트를 배포하려면 키 파일 인증을 사용하여 자체 관리형 복제본 세트 배포를 참조하세요. 단일 MongoDB 인스턴스에서 복제본 세트를 배포하려면 독립형 자체 관리 mongod를 복제본 세트로 변환을 참조하세요. 복제본 세트 배포에 대한 자세한 내용은 복제 및 복제본 세트 배포 아키텍처 문서를 참조하세요.
개요
멤버가 세 명인 복제본 세트는 대부분의 네트워크 파티션 및 기타 시스템 장애를 견딜 수 있는 충분한 중복성을 제공합니다. 이러한 세트는 많은 분산된 읽기 작업을 위한 충분한 용량을 제공하기도 합니다. 복제본 세트에는 항상 홀수의 멤버가 있어야 합니다. 이를 통해 투표를 순조롭게 진행할 수 있습니다. 복제본 세트 설계에 관한 더 자세한 내용은 복제 개요에서 확인하세요.
요구 사항:
테스트 및 개발 시스템의 경우 로컬 시스템 또는 가상 인스턴스 내에서 mongod
인스턴스를 실행할 수 있습니다.
복제본 세트를 배포하려면 먼저 복제본 세트의 일부가 될 각 시스템에 MongoDB를 설치해야 합니다. MongoDB를 아직 설치하지 않은 경우 설치 튜토리얼을 참조하세요.
각 멤버는 다른 모든 멤버와 연결할 수 있어야 합니다. 연결을 확인하는 방법에 대한 지침은 모든 구성원 간의 연결 테스트를 참조하십시오.
고려 사항
중요
변경된 IP 주소로 인해 구성이 업데이트되는 것을 방지하려면 IP 주소 대신 DNS 호스트 이름을 사용하세요. 특히 복제본 세트 구성원 또는 샤딩된 클러스터 구성원을 구성할 때 IP 주소 대신 DNS 호스트 이름을 사용하는 것이 중요합니다.
IP 주소 대신 호스트 이름을 사용하여 스플릿 네트워크 호라이즌 전반에 걸쳐 클러스터를 구성하세요. MongoDB 5.0부터 IP 주소로만 구성된 노드는 스타트업 유효성 검사에 실패하며 시작되지 않습니다.
IP 바인딩
경고
로컬 호스트가 아닌 에 바인딩하기 전에(예: 공개적으로 액세스할 수 있는) IP 주소 인 경우 무단 액세스 로부터 클러스터 를 보호했는지 확인합니다. 보안 권장 사항의 전체 목록은 자체 관리 배포서버를 위한 보안 체크리스트를 참조하세요. 최소한 인증 을 활성화 하고 네트워크 인프라를 강화하는 것을 고려하세요.
2} 및mongod
MongoDB mongos
바이너리는 기본적으로 로컬 호스트에 바인딩됩니다. 바이너리에 대해 net.ipv6
구성 파일 설정 또는 --ipv6
명령줄 옵션이 설정되어 있으면 바이너리가 로컬 호스트 IPv6 주소에 추가적으로 바인딩됩니다.
기본적으로 localhost에 바인딩된 mongod
및 mongos
는 동일한 컴퓨터에서 실행 중인 클라이언트의 연결만 허용합니다. 이 바인딩 동작에는 mongosh
와 복제본 세트 또는 샤딩된 클러스터의 다른 노드가 포함됩니다. 원격 클라이언트는 localhost에만 바인딩된 바이너리에는 연결할 수 없습니다.
기본 바인딩을 재정의하고 다른 IP 주소에 바인딩하려면 net.bindIp
구성 파일 설정 또는 --bind_ip
명령줄 옵션을 사용하여 호스트 이름 또는 IP 주소 목록을 지정합니다.
경고
MongDB 부터 5.0 시작, 분할 수평 DNS IP 주소로만 구성된 노드는 시작 유효성 검사에 실패하고 오류를 보고합니다. disableSplitHorizonIPCheck
를 참조하세요.
예를 들어 다음 mongod
인스턴스는 로컬 호스트와 IP 주소 198.51.100.1
와 연결된 호스트명 My-Example-Associated-Hostname
에 모두 바인딩됩니다.
mongod --bind_ip localhost,My-Example-Associated-Hostname
이 인스턴스에 연결하려면 원격 클라이언트가 호스트 이름 또는 관련 IP 주소 198.51.100.1
를 지정해야 합니다.
mongosh --host My-Example-Associated-Hostname mongosh --host 198.51.100.1
이 테스트 배포에서는 세 멤버가 동일한 머신에서 실행됩니다.
복제본 세트 이름 지정
중요
이 지침은 테스트 또는 개발 배포에만 사용해야 합니다.
이 절차의 예에서는 rs0
이라는 새 복제본 세트를 생성합니다.
애플리케이션이 2개 이상의 복제본 세트에 연결된 경우 각 세트의 이름이 달라야 합니다. 일부 드라이버는 복제본 세트 이름으로 복제본 세트 연결을 그룹화합니다.
절차
중요
변경된 IP 주소로 인해 구성이 업데이트되는 것을 방지하려면 IP 주소 대신 DNS 호스트 이름을 사용하세요. 특히 복제본 세트 구성원 또는 샤딩된 클러스터 구성원을 구성할 때 IP 주소 대신 DNS 호스트 이름을 사용하는 것이 중요합니다.
IP 주소 대신 호스트 이름을 사용하여 스플릿 네트워크 호라이즌 전반에 걸쳐 클러스터를 구성하세요. MongoDB 5.0부터 IP 주소로만 구성된 노드는 스타트업 유효성 검사에 실패하며 시작되지 않습니다.
다음과 유사한 명령을 실행하여 각 멤버에 필요한 데이터 디렉토리를 생성합니다.
mkdir -p /srv/mongodb/rs0-0 /srv/mongodb/rs0-1 /srv/mongodb/rs0-2 이렇게 하면 인스턴스의 데이터베이스 파일이 들어 있는 'rs0-0', 'rs0-1', 'rs0-2'라는 디렉토리가 생성됩니다.
다음 명령을 실행하여 자체 셸 창에서
mongod
인스턴스를 시작합니다.경고
로컬 호스트가 아닌 에 바인딩하기 전에(예: 공개적으로 액세스할 수 있는) IP 주소 인 경우 무단 액세스 로부터 클러스터 를 보호했는지 확인합니다. 보안 권장 사항의 전체 목록은 자체 관리 배포서버를 위한 보안 체크리스트를 참조하세요. 최소한 인증 을 활성화 하고 네트워크 인프라를 강화하는 것을 고려하세요.
첫 번째 멤버:
mongod --replSet rs0 --port 27017 --bind_ip localhost,<hostname(s)|ip address(es)> --dbpath /srv/mongodb/rs0-0 --oplogSize 128 두 번째 멤버:
mongod --replSet rs0 --port 27018 --bind_ip localhost,<hostname(s)|ip address(es)> --dbpath /srv/mongodb/rs0-1 --oplogSize 128 세 번째 멤버:
mongod --replSet rs0 --port 27019 --bind_ip localhost,<hostname(s)|ip address(es)> --dbpath /srv/mongodb/rs0-2 --oplogSize 128 이렇게 하면 각 인스턴스가
rs0
이라는 이름의 복제본 세트 멤버로 시작되며, 각각 고유한 포트에서 실행되고--dbpath
설정으로 데이터 디렉토리 경로를 지정합니다. 제안된 포트를 이미 사용하고 있는 경우 다른 포트를 선택하세요.인스턴스는 로컬 호스트와 호스트의 IP 주소 모두에 바인딩됩니다.
--oplogSize
설정은 각mongod
인스턴스가 사용하는 디스크 공간을 줄입니다. [1] 이는 머신의 과부하를 방지하므로 테스트 및 개발 배포에 이상적입니다. 이 구성 옵션과 다른 구성 옵션에 대한 자세한 내용은 자체 관리형 구성 파일 옵션을 참조하세요.mongosh
를 통해mongod
인스턴스 중 하나에 연결합니다. 포트 번호를 지정하여 어떤 인스턴스인지 표시해야 합니다. 단순성과 명확성을 위해 다음 명령과 같이 첫 번째 항목을 선택할 수 있습니다.mongosh --port 27017 mongosh
에서rs.initiate()
를 사용하여 복제본 세트를 시작합니다. 다음 예시와 같이mongosh
환경에서 복제본 세트 구성 객체를 생성할 수 있습니다.rsconf = { _id: "rs0", members: [ { _id: 0, host: "<hostname>:27017" }, { _id: 1, host: "<hostname>:27018" }, { _id: 2, host: "<hostname>:27019" } ] } <hostname>
을 시스템의 호스트 이름으로 바꾼 다음, 다음과 같이rsconf
파일을rs.initiate()
에 전달합니다.rs.initiate( rsconf ) 다음 명령을 실행하여 현재 복제본 구성을 표시합니다.
rs.conf() 복제본 세트 구성 객체는 다음과 유사합니다.
{ "_id" : "rs0", "version" : 1, "protocolVersion" : NumberLong(1), "members" : [ { "_id" : 0, "host" : "<hostname>:27017", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : { }, "secondaryDelaySecs" : NumberLong(0), "votes" : 1 }, { "_id" : 1, "host" : "<hostname>:27018", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : { }, "secondaryDelaySecs" : NumberLong(0), "votes" : 1 }, { "_id" : 2, "host" : "<hostname>:27019", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : { }, "secondaryDelaySecs" : NumberLong(0), "votes" : 1 } ], "settings" : { "chainingAllowed" : true, "heartbeatIntervalMillis" : 2000, "heartbeatTimeoutSecs" : 10, "electionTimeoutMillis" : 10000, "catchUpTimeoutMillis" : -1, "getLastErrorModes" : { }, "getLastErrorDefaults" : { "w" : 1, "wtimeout" : 0 }, "replicaSetId" : ObjectId("598f630adc9053c6ee6d5f38") } }
rs.status()
작업을 사용하여 언제든지 복제본 세트의 상태를 확인하세요.
팁
다음도 참조하세요.
자세한 내용은 다음 셸 함수에 대한 설명서에서 확인하세요.
자동 구성되는 기본 복제본 세트의 예로 간단한 설정 스크립트를 고려할 수도 있습니다.
MongoDB의 읽기 및 쓰기 시맨틱에 관한 자세한 설명은 복제본 세트 읽기 및 쓰기 시맨틱에서 확인하세요.
[1] | 2}가 삭제되는 것을 방지하기 위해 oplog가 구성된 크기 제한을 초과하여 커질 수 majority commit point 있습니다. |