자체 관리 복제본 세트 배포
개요
세 멤버로 구성된 복제본 세트는 대부분의 네트워크 파티션 및 기타 시스템 장애를 견딜 수 있는 충분한 중복성을 제공합니다. 이러한 세트는 많은 분산된 읽기 작업을 위한 충분한 용량을 제공하기도 합니다. 복제본 세트에는 항상 홀수의 멤버가 있어야 합니다. 이를 통해 투표를 순조롭게 진행할 수 있습니다. 복제본 세트 설계에 관한 더 자세한 내용은 복제 개요에서 확인하세요.
이 페이지에서는 자체 관리형 배포를 위해 복제본 세트를 배포하는 방법을 다룹니다.
MongoDB Atlas에서 호스팅되는 배포용 복제본 세트를 배포하는 방법에 대한 자세한 내용은 클러스터 만들기를 참조하세요.
요구 사항:
프로덕션 배포의 경우 mongod
인스턴스를 별도의 머신에서 호스팅하여 멤버 간에 최대한 거리를 두어야 합니다. 프로덕션 배포에 가상 머신을 사용하는 경우, 각 mongod
인스턴스는 중복 전원 회로 및 중복 네트워크 경로를 통해 서비스되는 별도의 호스트 서버에 배치해야 합니다.
복제본 세트를 배포하려면 먼저 복제본 세트의 일부가 될 각 시스템에 MongoDB를 설치해야 합니다. MongoDB를 아직 설치하지 않은 경우 설치 튜토리얼을 참조하세요.
복제본 세트 배포 시 고려 사항
아키텍처
프로덕션 환경에서는 복제본 세트의 각 멤버를 자체 머신에 배포합니다. 가능하다면 MongoDB가 기본 포트 27017
에서 수신 대기하는지 확인합니다.
자세한 내용은 복제 세트 배포 아키텍처를참조하세요.
호스트 이름
중요
변경된 IP 주소로 인해 구성이 업데이트되는 것을 방지하려면 IP 주소 대신 DNS 호스트 이름을 사용하세요. 특히 복제본 세트 구성원 또는 샤딩된 클러스터 구성원을 구성할 때 IP 주소 대신 DNS 호스트 이름을 사용하는 것이 중요합니다.
IP 주소 대신 호스트 이름을 사용하여 스플릿 네트워크 호라이즌 전반에 걸쳐 클러스터를 구성하세요. MongoDB 5.0부터 IP 주소로만 구성된 노드는 스타트업 유효성 검사에 실패하며 시작되지 않습니다.
IP 바인딩
--bind_ip
2} 옵션을 사용하여 MongoDB가 구성된 주소의 애플리케이션에서 연결을 수신 대기하도록 합니다.
경고
인스턴스를 공개적으로 접근 가능한 IP 주소에 바인딩하기 전에 무단 접근으로부터 클러스터를 보호해야 합니다. 보안 권장 사항의 전체 목록은 자체 관리 배포서버에 대한 보안 검사 목록을 참조하세요. 최소한 인증을 활성화하고 네트워크 인프라를 강화하는 것을 고려합니다.
2} 및mongod
MongoDB mongos
바이너리는 기본적으로 로컬 호스트에 바인딩됩니다. 바이너리에 대해 net.ipv6
구성 파일 설정 또는 --ipv6
명령줄 옵션이 설정되어 있으면 바이너리가 로컬 호스트 IPv6 주소에 추가적으로 바인딩됩니다.
기본적으로 로컬 호스트에 바인딩된 mongod
및 mongos
는 동일한 컴퓨터에서 실행 중인 클라이언트의 연결만 허용합니다. 이 바인딩 동작에는 mongosh
및 복제본 집합 또는 샤딩된 클러스터의 다른 멤버가 포함됩니다. 원격 클라이언트는 로컬 호스트에만 바인딩된 바이너리에는 연결할 수 없습니다.
기본 바인딩을 재정의하고 다른 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
연결성
네트워크 트래픽이 세트의 모든 구성원과 네트워크의 모든 클라이언트 간에 안전하게 전달될 수 있는지 확인하십시오.
다음 사항을 고려하세요:
가상 사설망을 설정합니다. 네트워크 토폴로지가 LAN을 통해 단일 사이트 내의 구성원 간 모든 트래픽을 라우팅하는지 확인하십시오.
알 수 없는 클라이언트에서 복제본 세트로의 연결을 방지하도록 액세스 제어를 구성합니다.
수신 및 발신 패킷이 기본 MongoDB 포트에서만 허용되고 배포 내에서만 허용되도록 네트워킹 및 방화벽 규칙을 구성합니다. IP 바인딩 고려 사항을 참조하세요.
복제본 세트의 각 구성원이 확인 가능한 DNS 또는 호스트 이름을 통해 액세스할 수 있는지 확인합니다. DNS 이름을 적절하게 구성하거나 시스템의 /etc/hosts
파일을 설정하여 이 구성을 반영해야 합니다.
각 멤버는 다른 모든 멤버와 연결할 수 있어야 합니다. 연결을 확인하는 방법에 대한 지침은 모든 구성원 간의 연결 테스트를 참조하십시오.
구성
MongoDB를 배포하기 전에 MongoDB가 데이터 파일을 저장하는 디렉터리를 만드세요.
5} 또는 관련 위치에 mongod
저장된 구성 파일에서 구성을 지정합니다./etc/mongod.conf
구성 옵션에 대한 자세한 내용은 자체 관리 구성 파일 옵션을 참조하세요.
터미널에서 복제본 세트 배포
이 튜토리얼에서는 액세스 제어를 비활성화한 상태로 실행 중인 3개의 기존 mongod
인스턴스에서 3명의 멤버로 구성된 복제본 세트를 생성하는 방법을 설명합니다.
액세스 제어가 활성화된 복제본 세트를 배포하려면 키 파일 인증을 사용하여 자체 관리형 복제본 세트 배포를 참조하세요. 단일 MongoDB 인스턴스에서 복제본 세트를 배포하려면 독립형 자체 관리 mongod를 복제본 세트로 변환을 참조하세요. 복제본 세트 배포에 대한 자세한 내용은 복제 및 복제본 세트 배포 아키텍처 문서를 참조하세요.
적절한 옵션을 사용하여 복제 세트의 각 구성원을 시작하십시오.
각 멤버에 대해 다음 설정을 사용하여 mongod
인스턴스를 시작합니다.
복제본 세트 이름에
replication.replSetName
옵션을 설정합니다. 애플리케이션이 2개 이상의 복제본 세트에 연결된 경우 각 세트의 이름이 달라야 합니다.net.bindIp
2} 옵션을 호스트 이름/IP 또는 쉼표로 구분된 호스트 이름/IP 목록으로 설정합니다.다른 설정은 배포에 맞게 적절하게 설정합니다.
이 자습서에서는 세 개의 mongod
인스턴스가 다음 호스트와 연결됩니다.
복제본 세트 멤버 | 호스트 이름 |
---|---|
회원 0 |
|
회원 1 |
|
멤버 2 |
|
다음 예에서는 --replSet
및 --bind_ip
명령줄 옵션을 통해 복제본 세트 이름과 IP 바인딩을 지정합니다.
경고
인스턴스를 공개적으로 접근 가능한 IP 주소에 바인딩하기 전에 무단 접근으로부터 클러스터를 보호해야 합니다. 보안 권장 사항의 전체 목록은 자체 관리 배포서버에 대한 보안 검사 목록을 참조하세요. 최소한 인증을 활성화하고 네트워크 인프라를 강화하는 것을 고려합니다.
mongod --replSet "rs0" --bind_ip localhost,<hostname(s)|ip address(es)>
0}의 <hostname(s)|ip address(es)>
경우 원격 클라이언트(복제본 집합의 다른 구성원 포함)가 인스턴스에 연결하는 데 사용할 수 있는 인스턴스의 호스트 mongod
이름 및/또는 IP 주소를 지정합니다.
또는 구성 파일에서 replica set name
ip addresses
와 를 지정할 수도 있습니다.
replication: replSetName: "rs0" net: bindIp: localhost,<hostname(s)|ip address(es)>
구성 파일로 mongod
을 시작하려면 --config
옵션으로 구성 파일의 경로를 지정합니다.
mongod --config <path-to-config>
프로덕션 배포에서는 이 프로세스를 관리하도록 초기화 스크립트를 구성할 수 있습니다. 초기화 스크립트는 이 문서의 범위를 벗어납니다.
복제본 세트를 시작합니다.
mongosh
에서 복제본 세트 멤버 0에 대해 rs.initiate()
를 실행합니다.
중요
rs.initiate()
를 복제본 세트의 단일 mongod
인스턴스에서만 실행합니다.
중요
변경된 IP 주소로 인해 구성이 업데이트되는 것을 방지하려면 IP 주소 대신 DNS 호스트 이름을 사용하세요. 특히 복제본 세트 구성원 또는 샤딩된 클러스터 구성원을 구성할 때 IP 주소 대신 DNS 호스트 이름을 사용하는 것이 중요합니다.
IP 주소 대신 호스트 이름을 사용하여 스플릿 네트워크 호라이즌 전반에 걸쳐 클러스터를 구성하세요. MongoDB 5.0부터 IP 주소로만 구성된 노드는 스타트업 유효성 검사에 실패하며 시작되지 않습니다.
rs.initiate( { _id : "rs0", members: [ { _id: 0, host: "mongodb0.example.net:27017" }, { _id: 1, host: "mongodb1.example.net:27017" }, { _id: 2, host: "mongodb2.example.net:27017" } ] })
MongoDB는 기본 복제본 세트 구성을 사용하여 복제본 세트를 시작합니다.
복제본 세트 구성을 확인합니다.
rs.conf()
2}를 사용하여 복제본 세트 구성 객체를 표시합니다.
rs.conf()
복제본 세트 구성 객체는 다음과 유사합니다.
{ "_id" : "rs0", "version" : 1, "protocolVersion" : NumberLong(1), "members" : [ { "_id" : 0, "host" : "mongodb0.example.net:27017", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : { }, "secondaryDelaySecs" : NumberLong(0), "votes" : 1 }, { "_id" : 1, "host" : "mongodb1.example.net:27017", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : { }, "secondaryDelaySecs" : NumberLong(0), "votes" : 1 }, { "_id" : 2, "host" : "mongodb2.example.net:27017", "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("585ab9df685f726db2c6a840") } }
복제본 세트에 기본값이 있는지 확인합니다.
rs.status()
사용하여 복제본 세트에서 주 복제본을 식별합니다.