고급 연결
이 페이지의 내용
다음 가이드에는 특정 유형의 MongoDB 구성에 대한 정보가 포함되어 있습니다.
간단한 독립형 서버 에 연결하는 예시 는 튜토리얼 을 참조하세요. 인증 옵션을 활성화한 상태에서 연결을 설정하려면 인증 페이지를 참조하세요. 데이터 압축을 사용한 연결의 예시 를 보려면 데이터 압축 페이지를 참조하세요.
복제본 세트에 연결
복제본 세트 에 연결하는 것은 독립형 MongoDB 서버 에 연결하는 것과 비슷합니다. ?replicaSet=myreplset
URI 옵션을 사용하여 복제본 세트 이름을 지정하기만 하면 됩니다.
int main (int argc, char *argv[]) { mongoc_client_t *client; mongoc_init (); /* Create our MongoDB Client */ client = mongoc_client_new ( "mongodb://host01:27017,host02:27017,host03:27017/?replicaSet=myreplset"); /* Do some work */ /* TODO */ /* Clean up */ mongoc_client_destroy (client); mongoc_cleanup (); return 0; }
팁
MongoDB 연결 string URI에 여러 호스트 이름을 지정할 수 있으며, 시드 목록에서 호스트를 구분하는 것은 쉼표입니다.
운전자 가 모든 노드 에 연결할 수 있도록 복제본 세트 멤버의 시드 목록 을 사용하는 것이 좋습니다.
샤딩된 클러스터에 연결
샤딩된 클러스터 에 연결하려면 클라이언트 가 연결해야 하는 mongos
노드를 지정합니다. C 드라이버 는 mongos
샤딩 서버 에 연결되었음을 자동으로 감지합니다.
호스트 이름이 두 개 이상 지정된 경우 mongos
인스턴스 간에 페일오버 를 시도하기 위해 시드 목록 이 생성됩니다.
경고
mongos
샤딩 서버 에 연결할 때 replicaSet
매개 변수를 지정할 수 없습니다.
int main (int argc, char *argv[]) { mongoc_client_t *client; mongoc_init (); /* Create our MongoDB Client */ client = mongoc_client_new ("mongodb://myshard01:27017/"); /* Do something with client ... */ /* Free the client */ mongoc_client_destroy (client); mongoc_cleanup (); return 0; }
IPv6 주소에 연결
MongoDB C 드라이버 는 호스팅하다 이름에서 IPv6 주소를 자동으로 확인합니다. 그러나 IPv6 주소 를 직접 지정하려면 주소 를 []
로 래핑합니다.
mongoc_uri_t *uri = mongoc_uri_new ("mongodb://[::1]:27017");
IPv4 및 IPv6로 연결
IPv 및 IPv DNS 레코드가 모두 있는 호스트 이름에4 6 연결하는 경우 동작은 RFC-6555 를 따릅니다. . 먼저 IPv6 주소 에 대한 연결을 시도합니다. IPv6 이(가) 실패하면 IPv4 주소 로 연결이 시도됩니다. IPv6 에 대한 연결 시도가 250ms 이내에 완료되지 않으면 IPv4 가 병렬로 시도됩니다. 어느 쪽이든 먼저 연결에 성공하면 다른 쪽이 취소됩니다. 성공적인 DNS 결과는 10 분 동안 캐시됩니다.
따라서 호스트와 연결된 A(IPv4) 및 AAA(IPv6) DNS 레코드가 모두 있는 경우 IPv4 에서만 수신 대기 중인 mongod에 연결하려는 시도가 지연될 수 있습니다.
지연을 방지하려면 MongoDB 구성과 일치하도록 호스트 이름을 구성하세요. 즉, mongod 가 IPv4 에서만 수신 대기하는 경우에만 A 기록 를 생성합니다.
UNIX 도메인 소켓에 연결
UNIX와 유사한 시스템에서 C 드라이버 는 UNIX 도메인 소켓을 사용하여 MongoDB 서버 에 직접 연결할 수 있습니다. URL 로 인코딩된 경로를 소켓에 전달하며, 이 경로에는 접미사가 .sock
이어야 합니다 . 예를 예시 /tmp/mongodb-27017.sock
에서 도메인 소켓에 연결하려면 다음을 수행합니다.
mongoc_uri_t *uri = mongoc_uri_new ("mongodb://%2Ftmp%2Fmongodb-27017.sock");
다음과 같이 사용자 이름 과 비밀번호를 포함합니다.
mongoc_uri_t *uri = mongoc_uri_new ("mongodb://user:pass@%2Ftmp%2Fmongodb-27017.sock");
TLS를 통해 서버 에 연결
다음은 TLS/SSL 연결을 구성하기 위한 지침입니다.
서버 를 로컬로 실행 하려면( 예시: 포트 27017 에서):
$ mongod --port 27017 --tlsMode requireTLS --tlsCertificateKeyFile server.pem --tlsCAFile ca.pem
클라이언트 URI 끝에 /?tls=true
을(를) 추가합니다.
mongoc_client_t *client = NULL; client = mongoc_client_new ("mongodb://localhost:27017/?tls=true");
MongoDB는 --tlsAllowConnectionsWithoutCertificates
을 제공하지 않는 한 기본적으로 클라이언트 인증서를 요구합니다. C 드라이버는 URI 옵션 tlsCertificateKeyFile
을 사용하여 클라이언트 인증서를 제공하도록 구성할 수 있으며, 이 옵션은 상수 MONGOC_URI_TLSCERTIFICATEKEYFILE
를 통해 참조할 수 있습니다.
mongoc_client_t *client = NULL; mongoc_uri_t *uri = mongoc_uri_new ("mongodb://localhost:27017/?tls=true"); mongoc_uri_set_option_as_utf8 (uri, MONGOC_URI_TLSCERTIFICATEKEYFILE, "client.pem"); client = mongoc_client_new_from_uri (uri);
tlsCertificateKeyFile
에서 제공하는 클라이언트 인증서는 --tlsCAFile
에 나열된 서버 신뢰할 수 있는 인증 기관 중 하나에서 발급하거나 생략된 경우 서버 의 네이티브 인증서 저장 에 있는 CA에서 발급해야 합니다.
다양한 TLS 관련 옵션에 대한 자세한 내용은 TLS 구성 을 참조하세요.
MongoDB와 주고받는 데이터 압축
이 콘텐츠는 데이터 압축 페이지로 이전되었습니다.
추가 연결 옵션
연결 옵션의 전체 목록은 mongoc_uri_t Docs.
특정 소켓/연결 관련 옵션은 구성할 수 없습니다:
옵션 | 설명 | 값 |
---|---|---|
SO_KEEPALIVE | TCP Keep Alive | Enabled |
TCP_KEEPIDLE | TCP가 킵얼라이브 프로브를 보내기 전에 연결이 유휴 상태로 유지되어야 하는 시간 | 120 초 |
TCP_KEEPINTVL | The time in seconds between TCP probes | 10 seconds |
TCP_KEEPCNT | 연결을 삭제하기 전에 승인 없이 보낼 프로브 수 | 9 probes |
TCP_NODELAY | Send packets as soon as possible or buffer small packets (Nagle algorithm) | Enabled (no buffering) |