高级连接(Advanced Connection)
以下指南包含MongoDB配置的特定类型的信息。
简单的连接到独立服务器的示例,请参考。 要连接到启用身份验证选项的服务器,请参考。1、连接到一个副本集(Replica Set)
连接到一个副本集与连接到独立的MongoDB服务器类似。只需要使用?replicaSet=副本集名
指定URI
的副本集名字选项。
#include#include intmain (int argc, char *argv[]){ mongoc_client_t *client; /* 初始化libmongoc's */ mongoc_init (); /* 创建 MongoDB Client连接到副本集 */ client = mongoc_client_new ("mongodb://host01:27017,host02:27017,host03:27017/?replicaSet=myreplset"); /* Do some work */ /* TODO */ /* 清理 */ mongoc_client_destroy (client); mongoc_cleanup (); return 0;}
MongoDB连接字符串
URI
中可以指定多个主机名(hostname
),使用,
分割种子列表
(seed list)中的指定的主机。
更多信息
2、连接到分片集群(Sharded Cluster)
连接到分片集群,需要指定client
要连接的mongos节点
。mongodb c dirver
中会自动检查已连接到的mongo
分片服务器。
mongos
实例之间尝试故障转移。 连接到分片服务器时,指定
replicaSet
参数是无效的。
#include#include intmain (int argc, char *argv[]){ mongoc_client_t *client; /* 初始化libmongoc's */ mongoc_init (); /* 创建MongoDB Client连接到分片集群 */ client = mongoc_client_new ("mongodb://myshard01:27017/"); /* Do something with client ... */ /* 释放client */ mongoc_client_destroy (client); mongoc_cleanup (); return 0;}
更多信息
关于集群,分布式集群等内容,可以参考
3、连接到IPv6地址
mongodb c dirver
将自动解析IPv6
地址到主机名(hostname
)。在URI
中指定IPv6
地址时,需要使用[]
进行包裹。
mongoc_uri_t *uri = mongoc_uri_new ("mongodb://[::1]:27017");
4、连接到Unix Domain Socket(Unix域套接字)
在类Unix系统中,mongodb c dirver
可以直接连接到使用Unix域套接字
的MongoDB
服务器。只需要传入这个socket
的路径,但必须使用.sock
后缀。
mongoc_uri_t *uri = mongoc_uri_new ("mongodb:///tmp/mysocket.sock");
直接连接到
Unix域套接字
不是常见做法。
5、通过SSL连接到服务器
以下是配置TLS/SSL
连接的说明。
基本配置
运行本地服务器(端口27017)示例
$ mongod --port 27017 --sslMode requireSSL --sslPEMKeyFile server.pem --sslCAFile ca.pem
添加/?ssl=true
到客户端URI
尾部
mongoc_client_t *client = NULL;client = mongoc_client_new ("mongodb://localhost:27017/?ssl=true");
指定客户端证书
默认情况下,MongoDB要求指定客户端证书,除非在提供--sslAllowConnectionsWithoutCertificates
情况下。mongodb c dirver
可以使用mongoc_ssl_opt_t
为客户端配置证书。
/* 获取默认的ssl选项 */const mongoc_ssl_opt_t *ssl_default = mongoc_ssl_opt_get_default ();/* 使用的ssl选项结构体 */mongoc_ssl_opts_t ssl_opts = { 0 };/* 可以选择从用户自定义的目录或文件拷贝;否则使用默认值. */memcpy (&ssl_opts, ssl_default, sizeof ssl_opts); // 使用默认值//ssl_opts.pem_file = "client.pem"; // 使用自定义pem文件/* 为客户端设置ssl选项 */mongoc_client_set_ssl_opts (client, &ssl_opts);
通过pem_file
提供的客户端证书必须由--sslCAFile
列出的服务器信任的证书颁发机构之一颁发。或者由服务器上的本地证书存储中的 CA 颁发,在使用默认值时。
PEM armored
文件(PEM装甲文件)和CA证书
。或CA证书列表包含使用ca_file
选项在,或CA的c_rehash
目录结构。当没有提供ca_file
或ca_dir
,mongodb c dirver
将使用本机平台证书存储区提供的CA。 6、其他连接选项
其他的连接选项的MongoDB URI
可以看