Docs Menu
Docs Home
/ / /
C ドライバー
/ /

高度な接続

項目一覧

  • レプリカセットへの接続
  • シャーディングされたクラスターへの接続
  • IPv 6アドレスへの接続
  • IPv 4と IPv 6で接続
  • 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;
}

Tip

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 ドライバーは、ホスト名から IPv 6アドレスを自動的に解決します。 ただし、IPv 6アドレスを直接指定するには、アドレスを[]でラップします。

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

IPv4 と IPv6 DNS レコードの両方を持つホスト名に接続する場合、動作は RFC-6555 に従います。 。IPv 6アドレスへの接続が最初に試行されます。 If IPv6 fails, then a connection is attempted to the IPv4 address. IPv 6への接続試行が250ミリ秒以内に完了しない場合、IPv 4は並列で試行されます。 最初に接続に成功したものが、もう 1 つの接続をキャンセルします。 DNS 成功した結果は10分間キャッシュされます。

その結果、ホストに関連付けられている A(IPv 4 )と Aaa(IPv 6 )の DNS レコードの両方がある場合、IPv 4でのみリッスンしている mongod への接続試行は遅れる可能性があります。

遅延を回避するには、ホスト名を MongoDB 構成と一致するように構成します。 つまり、mongod が IPv 4のみをリッスンしている場合にのみ 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 の構成」を参照してください。

このコンテンツは [ Data Compression (データ圧縮) ] ページにリロケーションされました。

接続オプションの完全なリストは、 mongoc_uri_tDocs 、 。

特定のソケット/接続関連のオプションは構成できません。

オプション
説明
SO_KEEPALIVE
TCP Keep Alive
Enabled
TCP_KEEPIDLE
TCP がキープアライブ 検証の送信を開始するまでに接続がアイドル状態を維持する必要がある時間
120秒
TCP_KEEPINTVL
The time in seconds between TCP probes
10 seconds
TCP_KEEP
接続を切断する前に、確認応答なしで送信する調査の数
9 probes
TCP_NODELAY
Send packets as soon as possible or buffer small packets (Nagle algorithm)
Enabled (no buffering)

戻る

一般的なタスク