高級連接(Advanced Connection)
以下指南包含MongoDB配置的特定類型的信息。
簡單的連接到獨立服務器的示例,請參考MongoDB_C_Dirver使用教程。
要連接到啟用身份驗證選項的服務器,請參考身份驗證頁 Authentication page。
原文地址
1、連接到一個副本集(Replica Set)
連接到一個副本集與連接到獨立的MongoDB服務器類似。只需要使用?replicaSet=副本集名
指定URI
的副本集名字選項。
#include <bson.h>
#include <mongoc.h>
int
main (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)中的指定的主機。
更多信息
[Advanced Connections](#Advanced Connections)
2、連接到分片集群(Sharded Cluster)
連接到分片集群,需要指定client
要連接的mongos節點
。mongodb c dirver
中會自動檢查已連接到的mongo
分片服務器。
如果指定多個主機名,則種子列表(seed list)的創建將會在mongos
實例之間嘗試故障轉移。
連接到分片服務器時,指定
replicaSet
參數是無效的。
#include <bson.h>
#include <mongoc.h>
int
main (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;
}
更多信息
關於集群,分布式集群等內容,可以參考
http://www.cnblogs.com/aoldman/p/4191822.html
http://www.cnblogs.com/huangfox/p/3543351.html
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 頒發,在使用默認值時。
為了驗證一個指定的CA服務器的證書,需要提供PEM armored
文件(PEM裝甲文件)和CA證書
。或CA證書列表包含使用ca_file
選項在,或CA的c_rehash
目錄結構。當沒有提供ca_file
或ca_dir
,mongodb c dirver
將使用本機平台證書存儲區提供的CA。
6、其他連接選項
其他的連接選項的MongoDB URI
可以看這里