zoukankan      html  css  js  c++  java
  • 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可以看这里

  • 相关阅读:
    leetcode33. Search in Rotated Sorted Array
    pycharm 设置sublime text3 monokai主题
    django class Meta
    leetcode30, Substring With Concatenation Of All Words
    Sublime text3修改tab键为缩进为四个空格,
    sublime text3 python打开图像的问题
    安装上imesupport输入法依然不跟随的解决办法,
    sublime text3 的插件冲突弃用问题,
    sublime text3 BracketHighlighter括号匹配的设置
    windows 下wget的使用
  • 原文地址:https://www.cnblogs.com/oloroso/p/5790491.html
Copyright © 2011-2022 走看看