
# 通过Mongo Shell连接副本集实例（公网连接）
#### 操作场景
您可以为DDS实例绑定公网网关或弹性公网IP，通过公网方式访问DDS实例。
场景一：当应用部署在华为云弹性云服务器上，且该弹性云服务器与文档数据库实例处于**不同区域**时，建议通过弹性公网IP连接DDS实例。
图1不同区域ECS访问DDS   
![](https://support.huaweicloud.com/usermanual-dds/zh-cn_image_0000002353506961.png "点击放大")
场景二：应用部署在其他厂商的云服务器上时，建议通过弹性公网IP连接DDS实例。
图2其他云服务器访问DDS   
![](https://support.huaweicloud.com/usermanual-dds/zh-cn_image_0000002353666765.png "点击放大")
本章节以部署在弹性云服务器上的应用场景为例，介绍如何使用Mongo Shell通过弹性公网IP的方式连接副本集实例。
连接副本集实例的方式有SSL连接和非SSL连接两种，其中SSL连接通过了加密功能，具有更高的安全性。为了提升数据在网络传输过程中的安全性，建议采用SSL方式。
#### 前提条件
1. 创建并登录弹性云服务器，请参见[购买弹性云服务器](https://support.huaweicloud.com/usermanual-ecs/ecs_03_7002.html)和[登录弹性云服务器](https://support.huaweicloud.com/ecs_faq/ecs_faq_0632.html)。
2. 副本集实例[绑定公网网关](https://support.huaweicloud.com/usermanual-dds/dds_03_0371.html)或[绑定或解绑弹性公网IP](https://support.huaweicloud.com/usermanual-dds/dds_03_0335.html)，并[设置安全组规则](https://support.huaweicloud.com/usermanual-dds/dds_03_0336.html)，确保可以通过弹性云服务器访问副本集实例。
3. 在弹性云服务器上，安装MongoDB客户端。 安装MongoDB客户端，请参见[如何安装MongoDB客户端](https://support.huaweicloud.com/dds_faq/dds_faq_0018.html)。
   ![](https://support.huaweicloud.com/usermanual-dds/public_sys-resources/note_3.0-zh-cn.png)
   安装的MongoDB客户端版本需要和实例版本一致。
   
 
#### 操作步骤
- [SSL连接]
  ![](https://support.huaweicloud.com/usermanual-dds/public_sys-resources/notice_3.0-zh-cn.png)
  使用SSL方式连接，请务必开启SSL连接，否则会报错。关于如何开启SSL连接，请参见[开启和关闭SSL连接](https://support.huaweicloud.com/usermanual-dds/dds_03_0074.html)。
  1. [登录管理控制台](https://console.huaweicloud.com)。
  
  2. 单击管理控制台左上方的![](https://support.huaweicloud.com/usermanual-dds/zh-cn_image_0000002086402613.png)，选择区域和项目。
  
  3. 在页面左上角单击![](https://support.huaweicloud.com/usermanual-dds/zh-cn_image_0000002050165200.png)，选择"数据库 \> 文档数据库服务 DDS"，进入文档数据库服务信息页面。
  
  4. 在"实例管理"页面，单击实例名称。
  
  5. 在左侧导航树，单击"连接管理"。
  
  6. 在"基本信息"区域的"SSL"处，单击![](https://support.huaweicloud.com/usermanual-dds/zh-cn_image_0000002086324033.png)，下载根证书。
  
  7. 上传根证书至需要连接实例的弹性云服务器。 
     根据客户端使用的计算机系统类型，选择相应的上传方法。
     - Linux操作系统下，可参考如下命令：
       **scp** *\<IDENTITY_FILE\>* *\<REMOTE_USER\>* **@** *\<REMOTE_ADDRESS\>* **:** *\<REMOTE_DIR\>*
       ![](https://support.huaweicloud.com/usermanual-dds/public_sys-resources/note_3.0-zh-cn.png)
       - IDENTITY_FILE为存储根证书的文件目录，该文件目录权限为600。
       
       - REMOTE_USER为弹性云服务器的操作系统用户。
       
       - REMOTE_ADDRESS为弹性云服务器的主机地址。
       
       - REMOTE_DIR为将根证书上传到弹性云服务器的文件目录。
         
     
     - Windows操作系统下，请使用远程连接工具上传根证书。
     
     
     
     
  
  8. 在客户端工具mongo所在的目录下，连接数据库实例。 
     - **方式一：** **通过公网连接地址连接**
       命令格式：
       **./mongo** **"** *\<公网连接地址\>* **"** **--** **ssl --sslCAFile** *\<* *FILE_PATH* *\>* **--sslAllowInvalidHostnames**
       相关参数说明如下：
       - 公网连接地址：您可以在实例管理页面，单击目标实例名称，进入基本信息页面。在"连接管理 \> 公网连接"页签下获取公网连接地址。
         图3获取公网连接地址   
         ![](https://support.huaweicloud.com/usermanual-dds/zh-cn_image_0000002573419895.png "点击放大")
         
         获取到的公网连接地址格式如下，该连接地址采用固定的账号和数据库进行认证，即账号名**rwuser** 及认证数据库**admin**不可修改。
         **mongodb://rwuser:** *\<password\>* *@* *192.168.xx.xx:8635* **/test?authSource=admin**
         您需要关注公网连接地址中的如下参数信息：
         表1参数说明 
         | 参数名称                 | 说明                                                                                                                                                                                                                                           |
         |:---|:---|
         | rwuser               | 账号名，即数据库账号。                                                                                                                                                                                                                                  |
         | *\<password\>*       | 数据库账号对应的密码，需要替换为真实密码。 如果密码中包含特殊字符"@"、"!"、"$"、"%"和"+"需要分别替换为对应的十六进制的URL编码（ASCII码）"%40"、"%21"、"%24"、"%25"和"%2B"。 示例：密码为\*\*\*\*@%\*\*\*!$+，对应的URL编码为\*\*\*\*%40%25\*\*\*%21%24%2B。 |
         | *192.168.xx.xx:8635* | 待连接副本集实例的节点绑定的弹性IP地址及端口号。                                                                                                                                                                                                                    |
         | authSource=admin     | rwuser账号认证数据库必须为"admin"，即"authSource=admin"为固定格式不可改变。                                                                                                                                                                                        |
            
         
       
       - FILE_PATH：存放根证书的路径。
       
       - --sslAllowInvalidHostnames：为了保证副本集内部通讯不占用用户IP地址和带宽等资源，副本集证书使用内部管理IP地址生成。通过公网SSL连接副本集实例时，需要添加"**--sslAllowInvalidHostnames**"。
       
       
       连接命令示例：
       **./mongo** **"mongodb://rwuser:** *\<password\>* *@* *192.168.xx.xx:8635* **/test?authSource=admin"** **--ssl --sslCAFile** **/tmp/ca.crt** **--sslAllowInvalidHostnames**
       ![](https://support.huaweicloud.com/usermanual-dds/public_sys-resources/note_3.0-zh-cn.png)
       - 通过公网高可用地址连接实例时，需要在连接信息前后添加英文双引号。
       
       - 为了提升数据读写性能，避免在发生主备节点切换后，从客户端写入数据报错。推荐您参考"[如何连接副本集实例以实现读写分离和高可用](https://support.huaweicloud.com/bestpractice-dds/dds_0003.html)"章节通过高可用的方式连接实例。
         
     
     - **方式二：** **通过弹性公网IP地址连接实例**
       命令格式：
       **./mongo --host** \<*DB_HOST* \> **--port** \<*DB_PORT* \> **-u** \<*DB_USER* \> **-p** **--authenticationDatabase** **admin** **--ssl --sslCAFile** \<*FILE_PATH* \> **--sslAllowInvalidHostnames**
       相关参数说明如下：
       表2参数说明 
       | 参数名称                       | 说明                                                                                                                                                                                                                                                                                                                                                                                 |
       |:---|:---|
       | DB_HOST                    | - 待连接实例节点对应绑定的弹性公网IP。 您可以在实例管理页面，单击目标实例名称，进入基本信息页面。在"连接管理 \> 公网连接"页签下获取对应节点的弹性公网IP。 图4获取弹性公网IP ![](https://support.huaweicloud.com/usermanual-dds/zh-cn_image_0000002611743427.png "点击放大")     |
       | DB_PORT                    | 数据库端口，默认端口号为8635。 您可以单击目标实例名称，进入基本信息页面。在左侧导航树中单击连接管理，在公网连接页签，在"基本信息 \> 数据库端口"处获取实际端口号。 图5获取端口号 ![](https://support.huaweicloud.com/usermanual-dds/zh-cn_image_0000002611744995.png "点击放大")                                                                                                                             |
       | DB_USER                    | 数据库账号，默认为rwuser。                                                                                                                                                                                                                                                                                                                                                                   |
       | FILE_PATH                  | 存放根证书的路径。                                                                                                                                                                                                                                                                                                                                                                          |
       | --sslAllowInvalidHostnames | 为了保证副本集内部通讯不占用用户IP地址和带宽等资源，副本集证书使用内部管理IP地址生成。通过公网SSL连接副本集实例时，需要添加"**--sslAllowInvalidHostnames**"。                                                                                                                                                                                                                                                                                 |
          
       出现如下提示时，输入数据库账号对应的密码：
       ```
       Enter password:
       ```
       连接命令示例：
       **./mongo --host** *192.168.xx.xx* **--port 8635 -u rwuser -p --authenticationDatabase admin --ssl --sslCAFile /tmp/ca.crt** **--sslAllowInvalidHostnames**
       
     
     - **方式三：** **通过公网网关的弹性公网IP连接实例**
       命令格式：
       **./mongo --host** \<*DB_HOST* \> **--port** \<*DB_PORT* \> **-u** \<*DB_USER* \> **-p** **--authenticationDatabase** **admin** **--ssl --sslCAFile** \<*FILE_PATH* \> **--sslAllowInvalidHostnames**
       相关参数说明如下：
       表3参数说明 
       | 参数名称                       | 说明                                                                                                                                                                                                                                                  |
       |:---|:---|
       | DB_HOST                    | 待连接实例节点对应绑定的**公网网关的**弹性公网IP。 您可以在实例管理页面，单击目标实例名称，进入基本信息页面。在"连接管理 \> 公网连接"页签下获取对应节点的**公网网关的** 弹性公网IP。 图6获取公网网关的弹性公网IP ![](https://support.huaweicloud.com/usermanual-dds/zh-cn_image_0000002611743431.png "点击放大")  |
       | DB_PORT                    | 公网网关的端口号。 图7公网网关的端口号 ![](https://support.huaweicloud.com/usermanual-dds/zh-cn_image_0000002581423948.png "点击放大")                                                                                               |
       | DB_USER                    | 数据库账号，默认为rwuser。                                                                                                                                                                                                                                    |
       | FILE_PATH                  | 存放根证书的路径。                                                                                                                                                                                                                                           |
       | --sslAllowInvalidHostnames | 为了保证副本集内部通讯不占用用户IP地址和带宽等资源，副本集证书使用内部管理IP地址生成。通过公网SSL连接副本集实例时，需要添加"**--sslAllowInvalidHostnames**"。                                                                                                                                                  |
          
       出现如下提示时，输入数据库账号对应的密码：
       ```
       Enter password:
       ```
       连接命令示例：
       **./mongo --host** *192.168.xx.xx* **--port 8635 -u rwuser -p --authenticationDatabase admin --ssl --sslCAFile /tmp/ca.crt** **--sslAllowInvalidHostnames**
       
     
     
     
     
  
  9. 检查连接结果。出现如下信息，说明连接成功。 
     - 针对副本集主节点的连接结果：
       ```
       replica:PRIMARY>
       ```
       
     
     - 针对副本集备节点的连接结果：
       ```
       replica:SECONDARY>
       ```
       
     
     
     
     
   
- [非SSL连接]
  ![](https://support.huaweicloud.com/usermanual-dds/public_sys-resources/notice_3.0-zh-cn.png)
  使用非SSL连接，请务必关闭SSL连接，否则会出现报错。如何关闭SSL连接，请参见[开启和关闭SSL连接](https://support.huaweicloud.com/usermanual-dds/dds_03_0074.html)。
  1. 登录弹性云服务器。
  
  2. 连接文档数据库实例。 
     - **方式一：通过公网连接地址连接**
       命令格式：
       **./mongo "** *\<公网连接地址\>* **"**
       公网连接地址：您可以在实例管理页面，单击目标实例名称，进入基本信息页面。在"连接管理 \> 公网连接"页签下获取公网连接地址。
       图8获取公网连接地址   
       ![](https://support.huaweicloud.com/usermanual-dds/zh-cn_image_0000002573238811.png "点击放大")
       
       获取到的公网连接地址格式如下，该连接地址采用固定的账号和数据库进行认证，即账号名**rwuser** 及认证数据库**admin**不可修改。
       **mongodb://rwuser:** *\<password\>* *@* *192.168.xx.xx:8635* **/test?authSource=admin**
       您需要关注公网连接地址中的如下参数信息：
       表4参数说明 
       | 参数名称                 | 说明                                                                                                                                                                                                                                          |
       |:---|:---|
       | rwuser               | 账号名，即数据库账号。                                                                                                                                                                                                                                 |
       | *\<password\>*       | 数据库账号对应的密码，需要替换为真实密码。 如果密码中包含特殊字符"@"、"!"、"$"、"%"和"+"需要分别替换为对应的十六进制的URL编码（ASCII码）"%40"、"%21"、"%24"、"%25"和"%2B"。 示例：密码为\*\*\*\*@%\*\*\*!$+，对应的URL编码为\*\*\*\*%40%25\*\*\*%21%24%2B。 |
       | *192.168.xx.xx:8635* | 待连接副本集实例的节点绑定的弹性IP地址及端口号。                                                                                                                                                                                                                   |
       | authSource=admin     | rwuser账号认证数据库必须为"admin"，即"authSource=admin"为固定格式不可改变。                                                                                                                                                                                       |
          
       连接命令示例：
       **./mongo "** **mongodb://rwuser:** *\<password\>* *@* *192.168.xx.xx:8635* **/test?authSource=admin** **"**
       ![](https://support.huaweicloud.com/usermanual-dds/public_sys-resources/note_3.0-zh-cn.png)
       - 通过公网高可用地址连接实例时，需要在连接信息前后添加英文双引号。
       
       - 为了提升数据读写性能，避免在发生主备节点切换后，从客户端写入数据报错。推荐您参考"[如何连接副本集实例以实现读写分离和高可用](https://support.huaweicloud.com/bestpractice-dds/dds_0003.html)"章节通过高可用的方式连接实例。
         
     
     - **方式二：通过弹性公网IP地址连接**
       命令格式：
       **./mongo --host** \<*DB_HOST* \>**--port** \<*DB_PORT* \>**-u** \<*DB_USER* \>**-p** **--authenticationDatabase** **admin**
       相关参数说明如下：
       表5参数说明 
       | 参数名称    | 说明                                                                                                                                                                                                                                                        |
       |:---|:---|
       | DB_HOST | 待连接实例节点对应绑定的弹性公网IP。 您可以在实例管理页面，单击目标实例名称，进入基本信息页面。在"连接管理 \> 公网连接"页签下获取对应节点的弹性公网IP。 图9获取弹性公网IP ![](https://support.huaweicloud.com/usermanual-dds/zh-cn_image_0000002611743909.png "点击放大")  |
       | DB_PORT | 数据库端口，默认端口号为8635。 您可以单击目标实例名称，进入基本信息页面。在左侧导航树中单击连接管理，在公网连接页签，在"基本信息 \> 数据库端口"处获取实际端口号。 图10获取端口号 ![](https://support.huaweicloud.com/usermanual-dds/zh-cn_image_0000002581265124.png "点击放大")    |
       | DB_USER | 数据库账号，默认为rwuser。                                                                                                                                                                                                                                          |
          
       出现如下提示时，输入数据库账号对应的密码：
       ```
       Enter password:
       ```
       连接命令示例：
       **./mongo --host** *192.168.xx.xx* **--port 8635 -u rwuser -p --authenticationDatabase admin**
       
     
     - **方式三：通过公网网关的弹性公网IP连接**
       命令格式：
       **./mongo --host** \<*DB_HOST* \>**--port** \<*DB_PORT* \>**-u** \<*DB_USER* \>**-p** **--authenticationDatabase** **admin**
       相关参数说明如下：
       表6参数说明 
       | 参数名称    | 说明                                                                                                                                                                                                                                                                                                                                                  |
       |:---|:---|
       | DB_HOST | - 待连接实例节点对应绑定的**公网网关的** 弹性公网IP。 您可以在实例管理页面，单击目标实例名称，进入基本信息页面。在"连接管理 \> 公网连接"页签下获取对应节点的**公网网关的**弹性公网IP。 图11获取公网网关的弹性公网IP ![](https://support.huaweicloud.com/usermanual-dds/zh-cn_image_0000002611824877.png "点击放大")     |
       | DB_PORT | 公网网关的端口号。 图12公网网关的端口号 ![](https://support.huaweicloud.com/usermanual-dds/zh-cn_image_0000002581265126.png "点击放大")                                                                                                                                                                                               |
       | DB_USER | 数据库账号，默认为rwuser。                                                                                                                                                                                                                                                                                                                                    |
          
       出现如下提示时，输入数据库账号对应的密码：
       ```
       Enter password:
       ```
       连接命令示例：
       **./mongo --host** *192.168.xx.xx* **--port 8635 -u rwuser -p --authenticationDatabase admin**
       
     
     
     
     
  
  3. 检查连接结果。出现如下信息，说明连接成功。 
     - 针对副本集主节点的连接结果：
       ```
       replica:PRIMARY>
       ```
       
     
     - 针对副本集备节点的连接结果：
       ```
       replica:SECONDARY>
       ```
       
     
     
     
     
   
#### 相关文档
[DDS实例连接失败的排查思路](https://support.huaweicloud.com/dds_faq/dds_faq_0218.html)
