高級連接(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可以看這里
