
# 通过Mongo Shell连接集群实例（内网连接）
#### 操作场景
Mongo Shell是MongoDB自带的Shell客户端，您可以使用Mongo Shell连接数据库实例、对数据库进行数据查询和更新、执行管理等操作。DDS兼容MongoDB协议，Mongo Shell是MongoDB客户端的一部分，您需要先下载和安装MongoDB客户端，再使用Mongo Shell连接数据库实例。
DDS实例默认提供内网IP地址，当应用部署在弹性云服务器上，且该弹性云服务器与文档数据库实例处于同一区域，同一VPC时，可以使用内网连接文档数据库实例，该方式可以获得更快的传输速率和更高的安全性。
本章节以部署在弹性云服务器上的应用场景为例，介绍如何使用Mongo Shell通过内网的方式连接集群实例。
连接集群实例的方式有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. 在弹性云服务器上，安装MongoDB客户端。为了保障鉴权成功，请安装与目标实例版本一致的MongoDB客户端版本。 安装MongoDB客户端，请参见[如何安装MongoDB客户端](https://support.huaweicloud.com/dds_faq/dds_faq_0018.html)。
   
3. 已确保弹性云服务器和DDS实例实现网络互通，详情请参见[设置安全组规则](https://support.huaweicloud.com/usermanual-dds/dds_03_0313.html)。
 
#### 操作步骤
- [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_0000002050311560.png)，选择区域和项目。
  
  3. 在页面左上角单击![](https://support.huaweicloud.com/usermanual-dds/zh-cn_image_0000002050153280.png)，选择"数据库 \> 文档数据库服务 DDS"，进入文档数据库服务信息页面。
  
  4. 在"实例管理"页面，单击实例名称。
  
  5. 在左侧导航树，单击"连接管理"。
  
  6. 在"基本信息"区域的"SSL"处，单击![](https://support.huaweicloud.com/usermanual-dds/zh-cn_image_0000002086390709.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所在的目录下，连接数据库实例。 
     **方式一：内网高可用连接（推荐）**
     DDS管理控制台界面提供了内网高可用连接地址，同时包含了集群实例下的所有dds mongos节点IP地址和端口信息，通过该地址连接集群实例，可以提升集群实例的高可用性能。
     命令格式：
     **./mongo** "*\<内网高可用连接地址\>* "**--ssl --sslCAFile** *\<* *FILE_PATH* *\>* **--sslAllowInvalidHostnames**
     相关参数说明如下：
     - 内网高可用连接地址：您可以在实例管理页面，单击目标实例名称，进入基本信息页面。单击"连接管理 \> 内网连接"，在"内网高可用连接地址"处即可获取到当前实例的连接地址。
       图1获取内网高可用地址   
       ![](https://support.huaweicloud.com/usermanual-dds/zh-cn_image_0000002341037145.png "点击放大")
       
       获取到的内网高可用地址格式如下，该连接地址采用固定的账号和数据库进行认证，即账号名**rwuser** 及认证数据库**admin**不可修改。
       **mongodb://rwuser:** *\<password\>* *@* *192.168.xx.xx:8635,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.\*\*\*.\*\*\*:8635,192.168.\*\*\*.\*\*\*:8635 | 待连接集群实例的dds mongos节点IP地址及端口号。                                                                                                                                                                                                                                                                         |
       | test                                                  | 表示测试库名，可根据实际情况设置。                                                                                                                                                                                                                                                                                     |
       | authSource=admin                                      | rwuser账号认证数据库必须为"admin"，即"authSource=admin"为固定格式不可改变。                                                                                                                                                                                                                                                 |
          
       
     
     - FILE_PATH：存放根证书的路径。
     
     - --sslAllowInvalidHostnames：为了保证集群内部通讯不占用用户IP地址和带宽等资源，集群证书使用内部管理IP地址生成。通过内网SSL连接集群实例时，需要添加"**--sslAllowInvalidHostnames**"。
     
     
     连接命令示例：
     ```
     ./mongo "mongodb://rwuser:<password>@192.168.xx.xx:8635,192.168.xx.xx:8635/test?authSource=admin" --ssl --sslCAFile /tmp/ca.crt --sslAllowInvalidHostnames
     ```
     **方式二：内网高可用连接（用户自定义数据库及账号）**
     命令格式：
     **./mongo** "*\<内网高可用连接地址\>* "**--ssl --sslCAFile** *\<* *FILE_PATH* *\>* **--sslAllowInvalidHostnames**
     相关参数说明如下：
     - 内网高可用连接地址：您可以在实例管理页面，单击目标实例名称，进入基本信息页面。单击"连接管理 \> 内网连接"，在"内网高可用连接地址"处即可获取到当前实例的连接地址。
       图2获取内网高可用地址   
       ![](https://support.huaweicloud.com/usermanual-dds/zh-cn_image_0000002306798364.png "点击放大")
       获取到的内网高可用地址格式如下：
       **mongodb://rwuser:** *\<password\>* *@* *192.168.xx.xx:8635,192.168.xx.xx:8635* **/test?authSource=admin**
       您需要关注内网高可用地址中的如下参数信息：
       表2参数信息 
       | 参数名称                                                  | 说明                                                                                                                                                                                                                                                                      |
       |:---|:---|
       | rwuser                                                | 数据库账号名，默认为"rwuser"。可根据实际情况修改为用户创建的账号名。                                                                                                                                                                                                                                  |
       | \<password\>                                          | 表示数据库账号对应的密码，需要替换为真实密码。 如果密码中包含特殊字符"@"、"!"、"$"、"%"和"+"需要分别替换为对应的十六进制的URL编码（ASCII码）"%40"、"%21"、"%24"、"%25"和"%2B"。 示例：密码为\*\*\*\*@%\*\*\*!$+，对应的URL编码为\*\*\*\*%40%25\*\*\*%21%24%2B。 |
       | 192.168.\*\*\*.\*\*\*:8635,192.168.\*\*\*.\*\*\*:8635 | 待连接集群实例的dds mongos节点IP地址及端口号。                                                                                                                                                                                                                                           |
       | test                                                  | 表示测试库名，可根据实际情况设置。                                                                                                                                                                                                                                                       |
       | authSource=admin                                      | rwuser账号认证数据库为"admin"。 说明： 若用户使用自定义创建的数据库进行认证，则需将高可用连接地址中认证数据库改为当前创建的数据库名称。且须将该表格的第一行参数"数据库账号名"修改为当前数据库下创建的账号名。                                   |
          
       
     
     - FILE_PATH：存放根证书的路径。
     
     - --sslAllowInvalidHostnames：为了保证集群内部通讯不占用用户IP地址和带宽等资源，集群证书使用内部管理IP地址生成。通过内网SSL连接集群实例时，需要添加"**--sslAllowInvalidHostnames**"。
     
     
     例如用户自定义创建数据库**Database** 并在该数据库下创建账号**test1**，则连接命令示例为：
     ```
     ./mongo "mongodb://test1:<password>@192.168.xx.xx:8635,192.168.xx.xx:8635/Database?authSource=Database" --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                    | - 待连接集群实例的dds mongos节点IP地址。 您可以单击实例名称，进入基本信息页面，选择"连接管理 \> 内网连接"，在"节点信息 \> dds mongos"页签下获取dds mongos节点的内网IP地址即可。 图3获取内网IP地址 ![](https://support.huaweicloud.com/usermanual-dds/zh-cn_image_0000002610284589.png "点击放大")     |
     | DB_PORT                    | - 待连接实例的端口，默认端口为8635。 您可以单击实例名称，进入基本信息页面，选择"连接管理 \> 内网连接"页签，在"基本信息 \> 数据库端口"处获取当前端口信息。 图4获取端口 ![](https://support.huaweicloud.com/usermanual-dds/zh-cn_image_0000002610244709.png "点击放大")                                       |
     | DB_USER                    | 账号名，即数据库账号，默认为rwuser。                                                                                                                                                                                                                                                                                                                                                                                     |
     | FILE_PATH                  | 存放根证书的路径。                                                                                                                                                                                                                                                                                                                                                                                                 |
     | --sslAllowInvalidHostnames | 为了保证集群内部通讯不占用用户IP地址和带宽等资源，集群证书使用内部管理IP地址生成。通过内网SSL连接集群实例时，需要添加"**--sslAllowInvalidHostnames**"。                                                                                                                                                                                                                                                                                                           |
        
     出现如下提示时，输入数据库账号对应的密码：
     ```
     Enter password:
     ```
     连接命令示例：
     ```
     ./mongo "--host 192.168.1.6 --port 8635 -u rwuser -p --authenticationDatabase admin" --ssl --sslCAFile /tmp/ca.crt --sslAllowInvalidHostnames
     ```
     
     
  
  9. 检查连接结果。出现如下信息，说明连接成功。 
     ```
     mongos>
     ```
     
     
   
- [非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所在的目录下，连接数据库实例。 
     **方式一：内网高可用连接（推荐）**
     命令格式：
     **./mongo** *"\<内网高可用连接地址\>*"
     内网高可用连接地址：您可以在实例管理页面，单击目标实例名称，进入基本信息页面。单击"连接管理 \> 内网连接"，在"内网高可用连接地址"处即可获取到当前实例的连接地址。
     图5获取内网高可用地址   
     ![](https://support.huaweicloud.com/usermanual-dds/zh-cn_image_0000002341037613.png "点击放大")
     获取到的内网高可用地址格式如下，该连接地址采用固定的账号和数据库进行认证，即账号名**rwuser** 及认证数据库**admin**不可修改。
     **mongodb://rwuser:** *\<password\>* *@* *192.168.xx.xx:8635,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.\*\*\*.\*\*\*:8635,192.168.\*\*\*.\*\*\*:8635 | 待连接集群实例的dds mongos节点IP地址及端口号。                                                                                                                                                                                                                                                 |
     | test                                                  | 表示测试库名，可根据实际情况设置。                                                                                                                                                                                                                                                             |
     | authSource=admin                                      | rwuser账号认证数据库必须为"admin"，即"authSource=admin"为固定格式不可改变。                                                                                                                                                                                                                         |
        
     连接命令示例：
     **./mongo** **"mongodb://rwuser:** *\<password\>* *@* *192.168.xx.xx:8635,192.168.xx.xx:8635* **/test?authSource=admin**"
     **方式二：内网高可用连接（用户自定义数据库及账号）**
     命令格式：
     **./mongo** *"\<内网高可用连接地址\>*"
     内网高可用连接地址：您可以在实例管理页面，单击目标实例名称，进入基本信息页面。单击"连接管理 \> 内网连接"，在"内网高可用连接地址"处即可获取到当前实例的连接地址。
     图6获取内网高可用地址   
     ![](https://support.huaweicloud.com/usermanual-dds/zh-cn_image_0000002341037669.png "点击放大")
     获取到的内网高可用地址格式如下：
     **mongodb://rwuser:** *\<password\>* *@* *192.168.xx.xx:8635,192.168.xx.xx:8635* **/test?authSource=admin**
     您需要关注内网高可用地址中的如下参数信息：
     表5参数信息 
     | 参数名称                                                  | 说明                                                                                                                                                                                                                                           |
     |:---|:---|
     | rwuser                                                | 数据库账号名，默认为"rwuser"。可根据实际情况修改为用户创建的账号名。                                                                                                                                                                                                       |
     | \<password\>                                          | 表示数据库账号对应的密码，需要替换为真实密码。 如果密码中包含特殊字符"@"、"!"、"$"、"%"和"+"需要分别替换为对应的十六进制的URL编码（ASCII码）"%40"、"%21"、"%24"、"%25"和"%2B"。 示例：密码为\*\*\*\*@%\*\*\*!$+，对应的URL编码为\*\*\*\*%40%25\*\*\*%21%24%2B。 |
     | 192.168.\*\*\*.\*\*\*:8635,192.168.\*\*\*.\*\*\*:8635 | 待连接集群实例的dds mongos节点IP地址及端口号。                                                                                                                                                                                                                |
     | test                                                  | 表示测试库名，可根据实际情况设置。                                                                                                                                                                                                                            |
     | authSource=admin                                      | rwuser账号认证数据库为"admin"。 说明： 若用户使用自定义创建的数据库进行认证，则需将高可用连接地址中认证数据库改为当前创建的数据库名称。且须将该表格的第一行参数"数据库账号名"修改为当前数据库下创建的账号名。                                                                  |
        
     例如用户自定义创建数据库**Database** 并在该数据库下创建账号**test1**，则连接命令示例为：
     ```
     ./mongo "mongodb://test1:<password>@192.168.xx.xx:8635,192.168.xx.xx:8635/Database?authSource=Database"
     ```
     **方式三：内网IP地址连接**
     命令格式：
     **./mongo --host** \<*DB_HOST* \>**--port** \<*DB_PORT* \>**-u** \<*DB_USER* \> **-p** **--authenticationDatabase** **admin**
     相关参数说明如下：
     表6参数说明 
     | 参数名称    | 说明                                                                                                                                                                                                                                                                                                                                                                                                      |
     |:---|:---|
     | DB_HOST | - 待连接集群实例的dds mongos节点IP地址。 您可以单击实例名称，进入基本信息页面，选择"连接管理 \> 内网连接"，在"节点信息 \> dds mongos"页签下获取dds mongos节点的内网IP地址即可。 图7获取内网IP地址 ![](https://support.huaweicloud.com/usermanual-dds/zh-cn_image_0000002579724806.png "点击放大")     |
     | DB_PORT | - 待连接实例的端口，默认端口为8635。 您可以单击实例名称，进入基本信息页面，选择"连接管理 \> 内网连接"页签，在"基本信息 \> 数据库端口"处获取当前端口信息。 图8获取端口 ![](https://support.huaweicloud.com/usermanual-dds/zh-cn_image_0000002579884736.png "点击放大")                                       |
     | DB_USER | 账号名，即数据库账号，默认为rwuser。                                                                                                                                                                                                                                                                                                                                                                                   |
        
     出现如下提示时，输入数据库账号对应的密码：
     ```
     Enter password:
     ```
     连接命令示例：
     **./mongo --host 192.168.1.6 --port 8635 -u rwuser -p --authenticationDatabase admin**
     
     
  
  3. 检查连接结果。出现如下信息，说明连接成功。 
     ```
     mongos>
     ```
     
     
   
#### 相关文档
[DDS实例连接失败的排查思路](https://support.huaweicloud.com/dds_faq/dds_faq_0218.html)
