以下指南包含特定类型的 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; }
连接到 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 。首先尝试连接到 IPv6 解决。如果 IPv6 失败,则尝试连接到 IPv4 解决。如果与 IPv 的连接尝试未在6 250毫秒内完成,则会并行尝试 IPv4 。无论哪个连接先成功,都会取消另一个连接。成功的DNS 结果会缓存10 分钟。
因此,如果同时存在与主机关联的 A (IPv 4 ) 和 AAAA (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
将/?tls=true
添加到客户端URI 的末尾。
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 或从 MongoDB 压缩数据
此内容已移至“数据压缩”页面。
其他连接选项
连接选项的完整列表可以在 mongoc_uri_t 文档中找到。
某些套接字/连接相关选项不可配置:
选项 | 说明 | 值 |
---|---|---|
SO_KEEPALIVE | TCP Keep Alive | Enabled |
TCP_KEEPIDLE | 在 TCP 开始发送 keepalive 探针之前,连接需要保持空闲状态多长时间 | 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) |