高度な接続
項目一覧
次のガイドには、特定のタイプの 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; }
Tip
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; }
IPv 6アドレスへの接続
MongoDB C ドライバーは、ホスト名から IPv 6アドレスを自動的に解決します。 ただし、IPv 6アドレスを直接指定するには、アドレスを[]
でラップします。
mongoc_uri_t *uri = mongoc_uri_new ("mongodb://[::1]:27017");
IPv 4と IPv 6で接続
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 ドメイン ソケットへの接続
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との間でのデータの圧縮
このコンテンツは [ 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) |