
# 安装配置和启动GDS
#### 操作场景
DWS提供了数据服务工具GDS来帮助分发待导入的用户数据及实现数据的高速导入。GDS需部署到数据服务器上。
数据量大，数据存储在多个服务器上时，在每个数据服务器上安装配置、启动GDS后，各服务器上的数据可以并行入库。GDS在各台数据服务器上的安装配置和启动方法相同，本节以一台服务器为例进行说明。
#### 背景信息
GDS的版本需与集群版本保持一致，否则可能会出现导入导出失败或导入导出进程停止响应等情况。因此请勿使用历史版本的GDS进行导入。
数据库版本升级后，请按照[操作步骤]中的办法下载DWS软件包解压缩自带的GDS进行安装配置和启动。在导入导出开始时，DWS也会进行两端的版本一致性检测，不一致时会在屏幕上显示报错信息并终止对应操作。
GDS的版本号的查看办法为：在GDS工具的解压目录下执行如下命令。
```
gds -V
```
数据库版本的查看办法为：连接数据库后，执行如下SQL命令查看。
```
SELECT version();
```
 #### 操作步骤
1. 在使用GDS导入/导出数据前，请先参考[教程：使用GDS从远端服务器导入数据](https://support.huaweicloud.com/bestpractice-dws/dws_05_0032.html)中的步骤："准备ECS作为GDS服务器"、"下载GDS工具包"。
2. 以root用户登录待安装GDS的数据服务器，创建存放GDS工具包的目录。
   
   ```
   mkdir -p /opt/bin/dws
   ```
   
   
3. 将GDS工具包上传至上一步所创建的目录中。 
   以上传RedHat X86_64的工具包为例 ，将GDS工具包"dws_client_9.x.x_redhat_x64.zip"上传至上一步所创建的目录中。
   
   
4. （可选）如果使用SSL加密传输，请一并上传SSL证书至[2]所创建的目录下。
5. 在工具包所在目录下，解压工具包。 
   ```
   cd /opt/bin/dws
   unzip dws_client_9.x.x_redhat_x64.zip
   ```
   
   
6. 创建GDS专有用户及其所属的用户组。此用户用于启动GDS及读取源数据。 
   ```
   groupadd gdsgrp
   useradd -g gdsgrp gds_user
   ```
   
   
7. 分别修改工具包和数据源文件目录属主为GDS专有用户。 
   ```
   chown -R gds_user:gdsgrp /opt/bin/dws/gds
   chown -R gds_user:gdsgrp /input_data
   ```
   
   
8. 切换到gds_user用户。 
   ```
   su - gds_user
   ```
   
   
9. 执行环境依赖脚本。 
   ```
   cd /opt/bin/dws/gds/bin
   source gds_env
   ```
   
   
10. 启动GDS服务。 
    GDS是绿色软件，解压后启动即可。GDS启动方式有两种：
    方式一：直接使用"gds"命令，在命令项中设置启动参数。
    方式二：将启动参数写进配置文件"gds.conf"后， 使用"gds_ctl.py"命令启动。
    对于集中一次性导入的场景推荐使用第一种方式。对于需要隔段时间再次导入的场景，推荐使用第二种方式以配置文件的形式提升启动效率。
    - 方式一：直接使用"gds"命令，启动GDS。
      - 非SSL模式传输数据的情况下，启动GDS。
        ```
        gds -d dir -p ip:port -H address_string -l log_file -D -t worker_num
        ```
        示例：
        ```
        /opt/bin/dws/gds/bin/gds -d /input_data/ -p 192.168.0.90:5000 -H 10.10.0.1/24 -l /opt/bin/dws/gds/gds_log.txt -D -t 2
        ```
        
      
      - 使用SSL加密方式传输数据的情况下，启动GDS。
        ```
        gds -d dir -p ip:port -H address_string -l log_file -D 
        -t worker_num --enable-ssl --ssl-dir Cert_file
        ```
        示例：
        以[4]中SSL证书已上传至/opt/bin为例，命令如下。
        ```
        /opt/bin/dws/gds/bin/gds -d /input_data/ -p 192.168.0.90:5000 -H 10.10.0.1/24 -l /opt/bin/dws/gds/gds_log.txt -D --enable-ssl --ssl-dir /opt/bin/
        ```
        
      
      
      命令中的斜体部分请根据实际替换。
      - **-d** *dir*：保存有待导入数据的数据文件所在目录。本教程中为"/input_data/"。
      
      - **-p** *ip:port*：GDS监听IP和监听端口。默认值为：127.0.0.1，需要替换为能跟DWS通信的IP。监听端口的取值范围：1024\~65535。默认值为：8098。本教程配置为：192.168.0.90:5000。
      
      - **-H** *address_string*：允许哪些主机连接和使用GDS服务。参数需为CIDR格式。此参数配置的目的是允许DWS集群可以访问GDS服务进行数据导入。所以请保证所配置的网段包含DWS集群各主机。
      
      - **-l** *log_file*：存放GDS的日志文件路径及文件名。本教程为"/opt/bin/dws/gds/gds_log.txt"。
      
      - **-D**：后台运行GDS。仅支持Linux操作系统下使用。
      
      - **-t** *worker_num* ：设置GDS并发线程数。默认值为：8。取值范围为1\~200的正整数。DWS及数据服务器上的I/O资源均充足时，可以加大并发线程数。
        GDS是根据导入事务并发数来决定服务运行线程数的。也就是说即使启动GDS时设置了多线程，也并不会加速单个导入事务。未做过人为事务处理时，一条INSERT语句就是一个导入事务。
        
      
      - **--enable-ssl**：启用SSL加密方式传输数据。
      
      - **--ssl-dir** *Cert_file* ：SSL证书所在目录。需与[4]中的证书保存目录保持一致。
      
      
      关于更多参数的设置信息请参考[gds命令简介](https://support.huaweicloud.com/tg-dws/gds_cmd_reference.html)。
      
    
    - 方式二：将启动参数写进配置文件"gds.conf"后， 使用"gds_ctl.py"命令启动。
      1. 使用如下命令，进入GDS工具包的"config"目录下，配置"gds.conf"文件。"gds.conf"配置详细信息请参考[表1]。
         ```
         vim /opt/bin/dws/gds/config/gds.conf
         ```
         示例：
         配置"gds.conf"文件如下：
         ```
         <?xml version="1.0"?>
         <config>
         <gds name="gds1" ip="192.168.0.90" port="5000" data_dir="/input_data/" err_dir="/err" data_seg="100MB" err_seg="100MB" log_file="/log/gds_log.txt" host="10.10.0.1/24" daemon='true' recursive="true" parallel="32"></gds>
         </config>
         ```
         配置文件信息如下：
         - 数据服务器所在IP为192.168.0.90，GDS监听端口为5000。
         
         - 数据文件存放在"/input_data/"目录下。
         
         - 错误日志文件存放在"/err"目录下。该目录需要拥有GDS读写权限的用户自行创建。
         
         - 单个数据文件大小为100MB。
         
         - 每个错误日志大小为100MB。
         
         - 日志保存在"/log/gds_log.txt"文件中。该目录需要拥有GDS读写权限的用户自行创建。
         
         - 只允许IP为10.10.0.\*的节点进行连接。
         
         - GDS进程以后台方式运行。
         
         - 递归数据文件目录。
         
         - 指定并发导入工作线程数目为32。
          
      
      2. 执行如下命令启动GDS并确认GDS是否启动成功。
         ```
         python3 gds_ctl.py start
         ```
         示例：
         ```
         cd /opt/bin/dws/gds/bin
         python3 gds_ctl.py start
         Start GDS gds1                  [OK]
         gds [options]:
          -d dir            Set data directory.
          -p port           Set GDS listening port.
             ip:port        Set GDS listening ip address and port.
          -l log_file       Set log file.
          -H secure_ip_range
                            Set secure IP checklist in CIDR notation. Required for GDS to start.
          -e dir            Set error log directory.
          -E size           Set size of per error log segment.(0 < size < 1TB)
          -S size           Set size of data segment.(1MB < size < 100TB)
          -t worker_num     Set number of worker thread in multi-thread mode, the upper limit is 200. If without setting, the default value is 8.
          -s status_file    Enable GDS status report.
          -D                Run the GDS as a daemon process.
          -r                Read the working directory recursively.
          -h                Display usage.
         ```
         
       
     
    
    
 
#### gds.conf参数说明
 表1gds.conf配置说明 
| 属性        | 说明                                              | 取值范围                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
|:---|:---|:---|
| name      | 标识名。                                            | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| ip        | 监听ip地址。                                         | IP需为合法IP地址。 IP的默认值：127.0.0.1                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| port      | 监听端口号。                                          | 取值范围：1024\~65535，正整数。 默认值：8098。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| data_dir  | 数据文件目录。                                         | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| err_dir   | 错误日志文件目录。                                       | 默认值：数据文件目录                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| log_file  | 日志文件路径。                                         | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| host      | 设置允许连接到GDS的主机IP地址（参数为CIDR格式，仅支持linux系统）。        | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| recursive | 是否递归数据文件目录。选择true时会递归读取location指定的目录层级下所有的同名文件。 | 取值范围： - true：递归 。  - false：不递归。   默认值：false。                  |
| daemon    | 是否以DAEMON（后台）模式运行。                              | 取值范围： - true：以DAEMON模式运行。  - false：不以DAEMON模式运行。   默认值：false。 |
| parallel  | 导入工作线程并发数目。                                     | 取值范围：0\~200，正整数。 默认值：8。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
   
