
# 通过内网连接副本集实例
当应用部署在弹性云服务器上，且该弹性云服务器与数据库实例处于**同一区域、同一VPC内**时，建议使用内网方式通过弹性云服务器连接数据库实例。
本章节详细介绍使用MongoDB客户端通过内网方式连接GeminiDB Mongo副本集实例的过程。
操作系统使用场景：弹性云服务器的操作系统以Linux为例，本地使用的计算机系统以Windows为例。
连接副本集实例的方式有SSL连接和非SSL连接两种方法，其中SSL连接通过了加密功能，具有更高的安全性。为了提升数据在网络传输过程中的安全性，建议采用SSL方式。
#### 使用须知
- 目标实例必须与弹性云服务器在同一个虚拟私有云和子网内才能访问。
- 该弹性云服务器必须处于目标实例所属安全组允许访问的范围内。
  - 如果目标实例所属安全组为**默认安全组**， 则无需设置安全组规则。
  
  - 如果目标实例所属安全组**非默认安全组** ，请查看安全组规则是否允许该弹性云服务器访问。
    如果安全组规则允许弹性云服务器访问，即可连接实例。
    如果安全组规则不允许弹性云服务器访问，需要在实例安全组添加一条**入方向** 的访问规则。具体操作请参考[设置安全组规则](https://support.huaweicloud.com/mongoug-nosql/nosql_05_0037.html)。
    
   
 
#### 前提条件
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客户端](https://support.huaweicloud.com/mongoug-nosql/mongo_faq_0023.html)。
   
 
 #### SSL连接
![](https://support.huaweicloud.com/mongoug-nosql/public_sys-resources/notice_3.0-zh-cn.png)
使用SSL方式连接，请务必开启SSL连接，否则会报错。关于如何开启SSL连接，请参见[设置SSL数据加密](https://support.huaweicloud.com/mongoug-nosql/nosql_03_0203.html)。
1. 登录管理控制台。
2. 在服务列表中选择"数据库 \> 云数据库 GeminiDB Mongo接口。
3. 在"实例管理"页面，单击实例名称。
4. 在左侧导航树，单击"连接管理"。
5. 在"基本信息"区域的"SSL"处，单击![](https://support.huaweicloud.com/mongoug-nosql/zh-cn_image_0000002090439885.png)，下载根证书。
6. 上传根证书至需要连接实例的弹性云服务器。 
   根据客户端使用的计算机系统类型，选择相应的上传方法。
   - Linux操作系统下，可参考如下命令：
     **scp** *\<IDENTITY_FILE\>* *\<REMOTE_USER\>* **@** *\<REMOTE_ADDRESS\>* **:** *\<REMOTE_DIR\>*
     ![](https://support.huaweicloud.com/mongoug-nosql/public_sys-resources/note_3.0-zh-cn.png)
     - IDENTITY_FILE为存储根证书的文件目录，该文件目录权限为600。
     
     - REMOTE_USER为弹性云服务器云主机的操作系统用户。
     
     - REMOTE_ADDRESS为弹性云服务器云主机的主机地址。
     
     - REMOTE_DIR为将根证书上传到弹性云服务器云主机的文件目录。
       
   
   - Windows操作系统下，请使用远程连接工具上传根证书。
   
   
   
   
7. 连接数据库实例。 
   - **方式一：使用连接地址连接副本集实例（推荐）**
     GeminiDB Mongo控制台界面提供了连接地址，默认包含主节点、备节点、隐藏节点的IP和端口。通过该方式连接实例，可同时访问副本集实例的主、备和隐藏节点，避免在发生主备节点切换后，从客户端写入数据报错的情况。
     命令格式：
     ****./mongo**** **"** *\<连接地址\>* **"** **--** **ssl --sslCAFile** *\<* *FILE_PATH* *\>* **--sslAllowInvalidHostnames**
     表1参数说明 
     | **参数**                | **说明**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
     |:---|:---|
     | *\<连接地址\>*            | 待连接实例的连接地址。 您可以在实例管理页面，单击目标实例名称，进入基本信息页面。在"连接管理"页面获取内网连接地址。 图1连接管理页面获取连接地址 ![](https://support.huaweicloud.com/mongoug-nosql/zh-cn_image_0000002054281158.png)  - 其中，\*\*\*\*\*需要替换为数据库账号对应的密码。 如果密码中包含特殊字符"@"、"!"和"%"需要分别替换为对应的十六进制的URL编码（ASSCII码）"%40"、"%21"和"%25"。 例如：密码为\*\*\*\*@%\*\*\*!，对应的URL编码为\*\*\*\*%40%25\*\*\*%21。     - "replicaSet=replica"中的"replica"是副本集的名称。华为云GeminiDB Mongo副本集统一固定为该名称且不可改变。   |
     | *\<* *FILE_PATH* *\>* | 存放根证书的路径。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
        
     示例：
     ****./mongo**** **"mongodb://rwuser:\*\*\*\*@** **192.168.0.252** **:** **8635,**192.168.0.31** **:** **8635**** **/test?authSource=admin\&replicaSet=replica**"**** **--ssl --sslCAFile** **/tmp/ca.crt** **--sslAllowInvalidHostnames**
     ![](https://support.huaweicloud.com/mongoug-nosql/public_sys-resources/note_3.0-zh-cn.png)
     - 为了保证副本集内部通讯不占用用户IP带宽等资源，副本集证书使用内部管理IP生成。通过内网SSL连接副本集实例时，需要添加"**--sslAllowInvalidHostnames**"。
     
     - 通过内网地址连接实例时，需要在连接信息前后添加英文双引号。
      
     返回如下信息，表示实例已连接成功：
     ```
     replica:PRIMARY>
     ```
     
   
   
   
   - **方式二：单个节点连接**
     命令格式：
     **./mongo --host** \<*DB_HOST* \> **--port** \<*DB_PORT* \> **-u** \<*DB_USER* \>**-p** **--authenticationDatabase** **admin** **--ssl --sslCAFile** \<*FILE_PATH* \> **--sslAllowInvalidHostnames**
     出现如下提示时，输入数据库账号对应的密码：
     ```
     Enter password:
     ```
     表2参数说明 
     | **参数**          | **说明**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
     |:---|:---|
     | \<*DB_HOST*\>   | 待连接实例主节点或备节点的内网IP。 主节点：即Primary节点，连接该节点后可执行数据的读写操作。 备节点：即Secondary节点，连接该节点后仅可执行数据的读操作。 您可以在实例管理页面，单击目标实例名称，进入基本信息页面。在"连接管理 \> "页签下获取对应节点的内网IP。 图2获取节点IP ![](https://support.huaweicloud.com/mongoug-nosql/zh-cn_image_0000002054439514.png)   您也可以单击实例名称，在"基本信息 \> 节点信息"处获取对应节点的内网IP。 图3获取内网IP ![](https://support.huaweicloud.com/mongoug-nosql/zh-cn_image_0000002054281174.png)  |
     | \<*DB_PORT*\>   | 数据库端口。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
     | \<*DB_USER*\>   | 数据库账号，默认为rwuser。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
     | \<*FILE_PATH*\> | 存放根证书的路径。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
        
     示例：
     **./mongo --host 192.168.0.31 --port 8635 -u rwuser -p --authenticationDatabase admin --ssl --sslCAFile /tmp/ca.crt** **--sslAllowInvalidHostnames**
     返回如下信息，表示已成功连接对应的节点：
     - 针对副本集主节点的连接结果：
       ```
       replica:PRIMARY>
       ```
       
     
     - 针对副本集备节点的连接结果：
       ```
       replica:SECONDARY>
       ```
       
      
   
   
   
   
 
 #### 非SSL连接
![](https://support.huaweicloud.com/mongoug-nosql/public_sys-resources/notice_3.0-zh-cn.png)
使用非SSL方式连接，请务必关闭SSL连接，否则会报错。关于如何关闭SSL连接，请参见[设置SSL数据加密](https://support.huaweicloud.com/mongoug-nosql/nosql_03_0203.html)。
1. 连接弹性云服务器。
2. 在客户端工具mongo所在的目录下，连接数据库实例。 
   - **使用连接地址连接副本集实例（推荐）**
     GeminiDB Mongo控制台界面提供了连接地址，默认包含主节点、备节点、隐藏节点的IP和端口。通过该方式连接实例，可同时访问副本集实例的主、备和隐藏节点，避免在发生主备节点切换后，从客户端写入数据报错的情况。
     命令格式：
     **./mongo** "*\<连接地址\>*"
     表3参数说明 
     | 参数名称       | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
     |:---|:---|
     | *\<连接地址\>* | 您可以通过如下方式获取连接地址： 单击实例名称，进入基本信息页面，在页面下方"网络信息 \> 连接地址"处获取当前实例的连接地址。 图4获取内网地址 ![](https://support.huaweicloud.com/mongoug-nosql/zh-cn_image_0000002054439522.png)  或者您也可以单击实例名称，进入基本信息页面，单击左侧导航栏中的"连接管理"，在连接管理页面获取当前实例的连接地址。 图5连接管理页面获取连接地址 ![](https://support.huaweicloud.com/mongoug-nosql/zh-cn_image_0000002054281186.png)  - 其中，\*\*\*\*\*需要替换为数据库账号对应的密码。 如果密码中包含特殊字符"@"、"!"和"%"需要分别替换为对应的十六进制的URL编码（ASSCII码）"%40"、"%21"和"%25"。 例如：密码为\*\*\*\*@%\*\*\*!，对应的URL编码为\*\*\*\*%40%25\*\*\*%21。     - "replicaSet=replica"中的"replica"是副本集的名称。华为云GeminiDB Mongo副本集统一固定为该名称且不可改变。   |
        
     示例如下：
     **./mongo "mongodb://rwuser:\*\*\*\*@192.168.0.196:8635,192.168.0.67:8635,192.168.0.32:8635/test?authSource=admin\&replicaSet=replica"**
     出现如下信息，说明连接成功。
     ```
     replica:PRIMARY>
     ```
     
   
   - **连接单个节点**
     您也可以通过连接指定节点的内网IP，访问单个节点。
     命令格式：
     **./mongo --host** \<*DB_HOST* \>**--port** \<*DB_PORT* \>**-u** \<*DB_USER* \>**-p** **--authenticationDatabase** **admin**
     表4参数说明 
     | **参数**        | **说明**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
     |:---|:---|
     | \<*DB_HOST*\> | 待连接实例主节点或备节点的内网IP。 - 主节点：即Primary节点，连接该节点后可执行数据的读写操作。  - 备节点：即Secondary节点，连接该节点后仅可执行数据的读操作。   您可以在实例管理页面，单击目标实例名称，进入基本信息页面。在页面下方节点信息列表中获取对应节点的内网IP。 图6基本信息页面获取内网IP ![](https://support.huaweicloud.com/mongoug-nosql/zh-cn_image_0000002054439526.png)  或者您也可以单击实例名称，进入基本信息页面，单击左侧导航栏中的"连接管理"，在连接管理页面获取对应节点的内网IP。 图7连接管理页面获取连接地址 ![](https://support.huaweicloud.com/mongoug-nosql/zh-cn_image_0000002054281190.png)  |
     | \<*DB_PORT*\> | 数据库端口。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
     | \<*DB_USER*\> | 数据库账号，默认为rwuser。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
        
     出现如下提示时，输入数据库账号对应的密码：
     ```
     Enter password:
     ```
     示例：
     **./mongo --host 192.168.1.6 --port 8635 -u rwuser -p --authenticationDatabase admin**
     返回如下信息，表示对应的节点已经连接成功：
     针对副本集主节点的连接结果：
     ```
     replica:PRIMARY>
     ```
     针对副本集备节点的连接结果：
     ```
     replica:SECONDARY>
     ```
     
   
   
   
   
 
