Docs Menu
Docs Home
/ / /
C 드라이버
/ /

고급 연결

이 페이지의 내용

  • 복제본 세트에 연결
  • 샤딩된 클러스터에 연결
  • IPv6 주소에 연결
  • IPv4 및 IPv6로 연결
  • UNIX 도메인 소켓에 연결
  • TLS를 통해 서버 에 연결
  • MongoDB와 주고받는 데이터 압축
  • 추가 연결 옵션

다음 가이드에는 특정 유형의 MongoDB 구성에 대한 정보가 포함되어 있습니다.

간단한 독립형 서버 에 연결하는 예시 는 튜토리얼 을 참조하세요. 인증 옵션을 활성화한 상태에서 연결을 설정하려면 인증 페이지를 참조하세요. 데이터 압축을 사용한 연결의 예시 를 보려면 데이터 압축 페이지를 참조하세요.

복제본 세트 에 연결하는 것은 독립형 MongoDB 서버 에 연결하는 것과 비슷합니다. ?replicaSet=myreplset URI 옵션을 사용하여 복제본 세트 이름을 지정하기만 하면 됩니다.

#include <bson/bson.h>
#include <mongoc/mongoc.h>
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 매개 변수를 지정할 수 없습니다.

#include <bson/bson.h>
#include <mongoc/mongoc.h>
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;
}

MongoDB C 드라이버 는 호스팅하다 이름에서 IPv6 주소를 자동으로 확인합니다. 그러나 IPv6 주소 를 직접 지정하려면 주소 를 [] 로 래핑합니다.

mongoc_uri_t *uri = mongoc_uri_new ("mongodb://[::1]:27017");

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와 유사한 시스템에서 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/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 구성 을 참조하세요.

이 콘텐츠는 데이터 압축 페이지로 이전되었습니다.

연결 옵션의 전체 목록은 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)

돌아가기

일반적인 작업