MongoDB_C_Driver使用教程(2)高級連接


高級連接(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_fileca_dirmongodb c dirver將使用本機平台證書存儲區提供的CA。

6、其他連接選項

其他的連接選項的MongoDB URI可以看這里


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM