GaussDB
Gauss DB A 容量调整
扩容概述
扩容场景
安装完成后的GaussDB A集群能力无法满足业务需求,需要对MPPDB服务进行扩容。
- 在现有集群规模上进行服务扩容,即在当前集群中安装更多的业务组件实例,提升服 务能力。
- 节点扩容,然后在新添节点上添加业务组件实例。
综上,从操作上可将扩容场景划分成两类:
- 扩容节点,即往集群中添加更多服务器。
- 添加MPPDB服务实例。
何时进行服务扩容
随着业务量的增长,集群存储容量、计算能力或服务能力无法满足业务需求时,需要考虑对服务进行扩容。
扩容期间禁止的操作
扩容(重分布阶段)支持用户进行本地表的DROP、TRUNCATE、TRUNCATE-PARTITION业务。重分布read-only模式下正在重分布的表不支持更新、插入和删除数据,insert模式下支持本地表的插入、删除、更新。重分布阶段不允许执行性能统计查询。
容量调整规划
扩容规划
扩容分析,确定扩容场景:
- 安装新组件。
- 现有集群中添加服务实例。
- 添加节点后添加服务实例。
环境检查
检查服务状态
步骤 1登录FusionInsight Manager。
步骤 2单击“集群 > 待操作集群的名称 > 服务”,查看“MPPDB”、“KrbServer”、“LdapServer” 的运行状态。
步骤 3请确保“MPPDB”、“KrbServer”、“LdapServer”运行状态为“良好”。
检查告警
步骤 1登录FusionInsight Manager。
步骤 2单击“运维 > 告警 > 告警”,查看是否存在“MPPDB”的相关告警。
步骤 3若存在,请参照故障处理步骤清除告警。
检查参数
扩容前,需要检查老集群的comm_max_datanode参数值(使用gsql连接CN执行show comm_max_datanode;查看)。
如果comm_max_datanode的值小于扩容后集群的DN数,请先使用如下命令设置comm_max_datanode参数:
例如老集群DN数为128,再新扩128个DN,则应该在扩容前把comm_max_datanode参数设置为256。
准备新节点
使用配置规划工具(LLD)生成配置文件
步骤 1打开LLD工具,启用宏:
步骤 2进入“基础配置”界面,选择产品类型“GaussDBA”,安装模式选择为“集群扩容”,认证 模式和原集群保持一致:
步骤 3选择用户名,如果集群安装时使用的是root用户,这里就要选择为“root”,如果集 群安装时使用的是非root用户,这里就要选择为“omm”。
步骤 4输入扩容节点数量,如果需要手动修改实例部署,需要将“是否自定义套餐”修改为 “Yes”:
步骤 5进入“选择服务”界面,选择服务,需要和原集群中安装的服务保持一致。
步骤 6进入“IP规划与进程部署”界面,配置“机架名称”、“管理IP”、“业务IP”,如果扩容节 点的默认部署不满足规划,可以修改扩容节点的实例部署。
步骤 7进入“节点信息”界面,填写“CPU虚拟核数”、“内存”、“主机逻辑磁盘数量”、“最小数 据盘容量”、“主机名”。
步骤 8跳过“浮动IP”界面。
步骤 9进入“磁盘配置”界面,对扩容节点数据盘数进行配置。
步骤 10跳过“集群参数配置”界面,扩容场景下,该界面填入扩容集群对应参数的配置值。
步骤 11进入“实例参数配置”界面,该界面配置时需要保证整个GaussDB A集群的CN个数 不超过10,如有特殊需求,请在SA指导下修改。
步骤 12进入“生成配置文件”界面,单击“生成配置文件”按钮,生成如下文件:扩容模板 (expandTemplet.xml)、preinstall配置文件、precheck配置文件。
步骤 13使用“PuTTY”工具,以root用户登录主管理节点。
步骤 14执行以下命令,防止“PuTTY”超时退出。
TMOUT=0
步骤 15检查OMS上的安装包解压目录是否存在,如果该目录已经被删除,则需要重新下 载SetupTool软件包,并上传到主OMS节点,并进行校验和解压操作。可参考 《GaussDB A 8.0.0 产品文档》的“配置软件包”章节。
步骤 16检查扩容节点OS的编码格式是否符合要求。
使用“PuTTY”工具,以root用户登录任意节点。执行locale命令,查看OS的编码格式是否为“en_US.UTF-8”或“POSIX”。
l 是,执行步骤18。
否,执行步骤17。
步骤 17使用“PuTTY”工具,以root用户登录所有要扩容的节点,更改OS编码格式。以更改 为“en_US.UTF-8”格式为例进行说明。
l RedHat 6.x、CentOS 6.x系统下执行vi /etc/sysconfig/i18n命令,按“Insert”键开始编 辑。将“LANG”的值修改为“en_US.UTF-8”,“SYSFONT”的值修改为“latarcyrheb-sun16”, 按“Esc”键退出编辑,并输入:wq保存退出,重启操作系统后配置生效。
lRedHat 7.x、CentOS 7.x、麒麟、EulerOS系统下执行vi /etc/locale.conf命令,将 “LANG”的值修改为“en_US.UTF-8”,并保存退出,重启操作系统后配置生效。
lSUSE系统下执行vi /etc/sysconfig/language,将“RC_LANG”的值修改为“en_US.UTF-8”, 并保存退出,重启操作系统后配置生效。
步骤 18是否使用omm用户进行扩容。
l 是,执行步骤19。
l否,执行步骤21。
步骤 19使用“PuTTY”工具,以root用户登录主管理节点。
步骤 20将主管理节点上的“/opt/ FusionInsight_SetupTool /preset”文件夹拷贝至所有要扩容 节点的“/opt”目录下并在这些节点上执行sh /opt/preset/preset.sh命令。
在集群内多个节点上执行同一命令或者存取文件,可以使用软件安装包中的脚本工具快速完成,详细操作请参考《GaussDB A 8.0.0 产品文档》“软件安装 > 附录 > 常见问题 > 如何在集群内多个节点上执行命令或者存取文件”章节。
步骤 21使用“WinSCP”工具,把步骤12生成的配置文件目录中的整个software目录拷贝到 主OMS节点解压后软件中的目录“/opt/FusionInsight_SetupTool/”下。
----结束
对新节点做preinstall
步骤 1使用“WinSCP”工具,以root用户登录主管理节点。将操作系统镜像文件上传至主管 理节点目录下,例如“/opt”。
步骤 2使用PuTTY工具,以root用户登录主管理节点(如使用omm用户安装集群,请使 用omm用户登录),执行以下命令,防止“PuTTY”超时退出。
TMOUT=0
步骤 3执行以下命令进行挂载:
mount 虚拟光盘文件名 /media/ -o loop
例如Red Hat系统,假设虚拟光盘文件在“/opt”下,执行:mount /opt/rhel-server-6.4-x86_64-dvd.iso /media/ -o loop
步骤 4进入解压目录,例如“/opt/FusionInsight_SetupTool/preinstall”,检查配置规划工具生 成的preinstall.ini是否已上传到此目录。请确保“g_parted_conf”节点中要格式化的 分区中没有数据。
cd /opt/FusionInsight_SetupTool/preinstall
cat preinstall.ini
preinstall.ini(举例)
步骤 5(可选)开启core dump功能。
如扩容前集群已开启core dump功能,请执行此步骤。
1.打开“preinstall.ini”文件。
vi preinstall.ini
2.在配置文件增加两个参数g_core_dump=1和g_core_dump_dir="/var/log/core"。
3.按“Esc”键退出编辑,并输入:wq保存退出。
步骤 6执行安装前配置命令。输入root用户的密码(如使用omm用户安装集群,请使用 omm用户登录),等待执行完毕。
cd /opt/FusionInsight_SetupTool/preinstall
./preinstall.sh
步骤 7“preinstall”过程结束后,默认会自动继续进行“precheck”过程。如下所示:
===========FusionInsight PreCheck is starting...===========
[INFO] start checking each hosts.
[INFO] localhost: start parsing the configuration file.
[INFO] localhost: parse the configuration file success.
...
步骤 8如下例所示,若执行结果没有“ERROR”提示,则检查通过。
==========Summary Output============
Environment check success.
----结束
扩容前巡检
步骤 1获取FusionInsight Tool软件包。
用户可通过一下方法获取最新版本软件包,本文以6.5.2版本为例。
企业用户:使用Support账号登录http://support.huawei.com/enterprise/。选择“技术支 持”,搜素关键词“FusionInsight Tool Prober”。
l 运营商用户:使用Support账号登录http://support.huawei.com/。选择“产品软件”,搜 素关键词“FusionInsight Tool Prober”。
获取巡检服务安装包SysChecker_6.5.2.zip及巡检指导书。
步骤 2部署巡检工具。
- 1.将巡检服务安装包上传至某个cn节点的/opt目录,并执行unzip SysChecker_6.5.2.zip 命令进行解压。
- 2.准备节点的万兆网IP地址文件,保证各节点root密码一致。
−准备一个名为allhostfile的文本文件,文件内容为集群所有数据节点和新节点的IP列 表(一 行一个节点IP)。例如,
10.12.15.100
10.12.15.101
10.12.15.102
10.12.15.103
...
−准备一个名为oldhostfile的文本文件,文件内容为原集群的所有数据节点的IP列表(一 行一个节点IP)。例如,
10.12.15.101
10.12.15.102
10.12.15.103
...
- 3.登录该CN节点,将allhostfile、oldhostfile文件上传到/tmp目录下,执行以下命令 (将Suto@123 替换为root密码):
chown -R omm:wheel /opt/SysChecker/SysCheck_C80/ClientScripts/17_MPPDB/Lib/
chmod +x -R /opt/SysChecker/SysCheck_C80/ClientScripts/17_MPPDB/Lib/
for i in `cat /tmp/allhostfile`; do python /opt/SysChecker/SysCheck_C80/ClientScripts/17_MPPDB/Lib/inspection/remoteExec.py "ssh -n -q root@$i \" hostname;rm -rf /tmp/test_check\"" 'Suto@123';done
for i in `cat /tmp/allhostfile`;do python /opt/SysChecker/SysCheck_C80/ClientScripts/17_MPPDB/Lib/inspection/remoteExec.py "ssh -n -q root@$i \" hostname;mkdir -p /tmp/test_check; chmod -R 777 /tmp/test_check/ \"" 'Suto@123' ;done
- 4.分发巡检工具并修改文件权限。
cp -r /opt/SysChecker/SysCheck_C80/ClientScripts/17_MPPDB/Lib/* /tmp/test_check/
for i in `cat /tmp/allhostfile`;do python /opt/SysChecker/SysCheck_C80/ClientScripts/17_MPPDB/Lib/inspection/remoteExec.py "scp -r /tmp/test_check root@$i:/tmp/" 'Suto@123';done
for i in `cat /tmp/oldhostfile`;do python /opt/SysChecker/SysCheck_C80/ClientScripts/17_MPPDB/Lib/inspection/remoteExec.py "ssh -n -q root@$i \" hostname;chown -R omm:wheel /tmp/test_check" 'Suto@123';done
- 5.执行命令进行巡检。
su - omm
cd /tmp/test_check/
source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile
进行扩容前新老节点检查,使用如下命令。每次执行命令的时候,都要指定一个新的 check.log文件,文件格式是xxx.log。
./gs_check -e expand -U omm --hosts=/tmp/allhostfile -l ./check.log
进行扩容前需要进行网速检查,使用如下命令。每次执行命令的时候,都要指定一个新 的check.log文件,文件格式是xxx.log。
./gs_check -i CheckNetSpeed --hosts=/tmp/allhostfile -l ./check.log
进行扩容前需要数据倾斜检查。每次执行命令的时候,都要指定一个新的check.log文 件,文件格式是xxx.log。
./gs_check -i CheckTableSkew -l ./check.log
进行扩容前需要进行剩余容量检查。所有剩余可用空间均是最大单表大小的1.5倍以上。
./gs_check -i CheckBiggestTable -L -l ./check.log
步骤 3分析检查结果与信息收集。
从/tmp/test_check/Check/inspection/output目录下找到本次检查结果的压缩包,从压缩 包中取出CheckResult*文件、CheckReport*.xlsx文件、collector文件夹进行分析。
步骤 4巡检不合格项修复。
在巡检指导书中检索检查项ID,按照巡检指导书中的修复建议进行修复。
----结束
扩容实施方法
1、关闭集群通信白名单
操作场景
离线升级或扩容在操作前需要用户先停止数据库相关业务,从而避免因数据库业务干扰而产生升级失败问题。
操作步骤
- 步骤 1现场实施人员知会并确认用户已完成数据库业务停止操作。
- 步骤 2用PuTTY以omm用户登录后台任一个安装有MPPDB实例的节点,执行如下命令注释用户白名单
以默认CN实例目录/srv/BigData/mppdb/data1/coordinator为示例,现场需根据实际情况进行调整。
source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile
gs_ssh -c "hostname && if [ -f /srv/BigData/mppdb/data1/coordinator/pg_hba.conf ]; then cp -f /srv/BigData/mppdb/data1/coordinator/pg_hba.conf /srv/BigData/mppdb/data1/coordinator/pg_hba.conf_comment; fi "
gs_ssh -c "hostname && if [ -f /srv/BigData/mppdb/data1/coordinator/pg_hba.conf ]; then sed -i '/^[^#].*sha256.*/s/\(.*\)/#@#@#\1/g' /srv/BigData/mppdb/data1/coordinator/pg_hba.conf; fi "
gs_ssh -c "hostname && if [ -f /srv/BigData/mppdb/data1/coordinator/pg_hba.conf ]; then sed -i '/^[^#].*md5.*/s/\(.*\)/#@#@#\1/g' /srv/BigData/mppdb/data1/coordinator/pg_hba.conf; fi "
- 步骤 3如果存在Database Manager应用,则进入Database Manager应用主页,点击Database Manager主页小卡片右上角的停止监控,暂时关闭Database Manager监控功能。
- 步骤 4用PuTTY以omm用户登录后台任一个安装有MPPDB实例的节点,关闭MPPDB实例节点下的后台访问连接和应用连接。具体操作如下:
source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile
gs_ssh -c "ps ux |grep -w gsql |grep -v grep |awk '{print \$2}' |xargs -r kill -9"
gs_ssh -c "ps ux |grep -w ap_agent |grep -v grep |awk '{print \$2}' |xargs -r kill -9"
- 步骤 5用PuTTY以omm用户登录后台任一个安装有MPPDB实例的节点,执行如下命令重启集群。
source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile
cm_ctl stop && cm_ctl start
----结束
2、关闭所有定时任务(pg_job)
操作场景
扩容新增节点操作前,需要停止内部定时任务,避免定时任务对扩容操作影响。
操作步骤
- 步骤 1使用WinSCP工具以集群用户将以下脚本包上传至集群任意一个状态正常的CN节点的该集群用户具有执行权限的目录下,如“/home/集群用户名”目录。
- 步骤 2使用PuTTY以root用户登录该CN节点,执行如下命令解压脚本压缩包,并赋予脚本执行权限。
su - 集群用户名
cd /home/集群用户名
unzip job_broken_restore.zip
cd job_broken_restore
chmod +x *.sh
- 步骤 3执行如下命令修改脚本中CNPORT字段值。
1.执行vim broken_job.sh命令,修改CNPORT字段值为当前节点CN端口号,如:
CNPORT='25308'
2.执行vim restore_job.sh命令,修改CNPORT字段值为当前节点CN端口号,如:
CNPORT='25308'
- 步骤 4执行如下命令停止所有定时任务。
source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile
sh broken_job.sh
----结束
3、集群规模与组网规划
见第七页 集群网络规划
4、添加新节点至集群
操作步骤
- 步骤 1登录FusionInsight Manager。
- 步骤 2(可选)如需执行在线扩容,需单击“集群 > 待操作集群的名称 > 服务 > MPPDB > 配置”,搜索“mppdb.insert.expand”参数并将其修改为true,单击“保存”,开启在线扩容模式。
- 步骤 3单击“集群 > 待操作集群的名称 > 主机”。单击“添加”。
- 步骤 4选择“模板添加主机”,选择2.3.1 方式一(推荐):使用配置规划工具(LLD)生成配置文件生成的扩容模板。
- 步骤 5填写各节点操作系统root用户(或omm用户)的密码,单击“查找”:
- 步骤 6导入模板后会自动跳转至“确认”页面,此时若发现配置规划数据有误,可单击“上一步”回到各配置项检查或更改参数值。
- 步骤 7单击“提交”,进入扩容进度界面,等待扩容完成。
----结束
5、添加组件实例
操作场景
将MPPDB服务添加至系统中的没有安装MPPDB服务的节点。
操作步骤
- 步骤 1登录FusionInsight Manager。
- 步骤 2单击“集群 > 待操作集群的名称 > 服务”。单击MPPDB服务。
- 步骤 3单击“实例”。单击“添加”。
- 步骤 4根据扩容规划,勾选需要增加的实例。单击“下一步”。如图3-3所示。
- 步骤 5根据扩容规划,配置添加实例的参数。单击“下一步”。
- 步骤 6对照扩容规划内容,确认信息无误,单击“提交”。
- 步骤 7添加实例后,部分服务的配置状态可能由于新加实例配置而出现“配置状态”处于“过期”状态。此时需要重启相关配置“过期”状态服务,进行配置同步生效。
----结束
1、扩容后需要做数据重分布
注意事项
- 只有在界面显示操作成功后才能进行数据重分布操作。
- 业务相对空闲时执行,因为数据重分布操作会占用很长的时间。
- 需要注意不能使用kill -9的方式直接停止重分布脚本,这样会导致后台执行的重分布工具无法正常中止。
- 不支持数据重分布的回滚,一旦数据重分布开始,系统不能再回滚到扩容前。
- 不支持重分布有外键的表。
- 在重分布执行过程中,用户应当避免执行长时间的查询。否则可能导致重分布出现等待加锁超时失败的问题。
操作步骤
- 步骤 1在FusionInsight Manager首页,单击“集群 > 待操作集群的名称 > 服务> MPPDB”,进入MPPDB服务页面,选择“更多 > 重分布”。
- 步骤 2在弹出的“重分布”页面,根据实际情况,填写重分布信息。
- 步骤 3单击“确定”,开始数据重分布。
- 步骤 4在MPPDB服务右上角选择“更多 > 重分布历史”,可查看重分布进度。
- 步骤 5在查询历史页面观察重分布过程中的数据的分布进度,当页面显示进度为100%,则代表此次重分布任务结束,单击“确定”。
----结束
2、查看重分布进度
操作场景
重分布过程中会创建以下几张表或视图,包括redis_progress视图、redis_progress_detail表、pgxc_redistb表和redis_status表。
它们各自的作用如下,管理员通过对应的视图或表可以查看重分布的进度。
管理员可以通过redis_progress视图查看重分布总体进度。
redis_progress_detail表记录了数据库中每张表重分布所耗时间。
pgxc_redistb表会在每个数据库中创建,记录了对应数据库中需要重分布的表。
redis_status表记录了重分布目前所处状态。
其中的redis_progress、pgxc_redistb只存在于重分布过程中,重分布结束后会清除,只有redis_status、redis_progress_detail 在重分布结束后会保留。
重分布中创建的几张表
- pgxc_redistb:创建pgxc_redistb表,该表不参与重分布,此表中记录了本次重分布所有需要进行重分布的表,用户可指定表里的redis_order字段来决定表的重分布顺序。
- redis_progress:重分布过程中可以通过该视图查询重分布总体进度,该速率是一个估算值。
- redis_progress_detail:记录每个表的重分布执行时间(生命周期:结束分布后依旧存在)。
- redis_status:记录了重分布目前所处状态,各状态含义如表所示。
status |
描述 |
REDISTRIBUTION SETUP |
重分布初始化完成 |
REDISTRIBUTION STARTED |
开始进行重分布 |
REDISTRIBUTION COMPLETE |
数据重分布已完成 |
REDISTRIBUTION SHUTDOWN |
重分布任务已完成 |
3、开启所有定时任务(pg_job)
操作场景
扩容新增节点操作成功后,需要恢复内部定时任务。
操作步骤
- 步骤 1使用PuTTY以root用户登录上传“job_broken_restore.zip”脚本包的CN节点,执行如下命令切换到扩容前上传“job_broken_restore.zip”脚本包的集群用户。
su - 集群用户名
- 步骤 2执行如下命令启动所有定时任务。
source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile
sh restore_job.sh
----结束
4、恢复集群通信白名单
操作场景
恢复升级或扩容前注释掉的通信连接白名单内容。
操作步骤
- 步骤 1用PuTTY以omm用户登录后台任一个安装有MPPDB实例的节点,执行如下命令恢复用户白名单。
以默认CN实例目录/srv/BigData/mppdb/data1/coordinator为示例,现场需根据实际情况进行调整。
source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile
gs_ssh -c "hostname && if [ -f /srv/BigData/mppdb/data1/coordinator/pg_hba.conf_comment ]; then sed -i '/^#@#@#.*/s/#@#@#\(.*\)/\1/g' /srv/BigData/mppdb/data1/coordinator/pg_hba.conf && rm -f /srv/BigData/mppdb/data1/coordinator/pg_hba.conf_comment; fi "
- 步骤 2如果存在Database Manager应用,则进入Database Manager应用主页,点击Database Manager主页小卡片右上角的开始监控,恢复Database Manager监控功能。
----结束
扩容验证
检查新节点状态
步骤 1登录FusionInsight Manager。
步骤 2单击“集群 > 待操作集群的名称 > 主机”,查看新增节点的“运行状态”是否为“良好”。
----结束
检查新服务实例状态
步骤 1登录FusionInsight Manager;
步骤 2单击“集群 > 待操作集群的名称 > 服务”,查看“MPPDB”、“KrbServer”、“LdapServer”的状态;
步骤 3请确保“MPPDB”、“KrbServer”、“LdapServer”的“运行状态”为“良好”;
步骤 4请确保“MPPDB”、“KrbServer”、“LdapServer”等的“配置状态”为“已同步”。
----结束
检查告警
步骤 1登录FusionInsight Manager;
步骤 2单击“运维 > 告警 > 告警”,查看是否存在新的“MPPDB”的相关告警;
步骤 3若存在,请参照故障处理步骤清除告警。如果是新扩容节点的故障告警,则可以手动清除。
----结束
检查监控
步骤 1登录FusionInsight Manager;
步骤 2单击“集群 > 待操作集群的名称 > 服务 > MPPDB”,查看MPPDB监控数据是否正常显示。
----结束
数据迁移
场景分类 |
适用工具 |
性能 |
大批量数据导入/导出 |
GDS |
集群单节点几十MB/S |
小批量数据导入/导出 |
Copy to/from |
整个集群15MB/S |
查询结果集导出 |
COPY TO |
整个集群15MB/S |
其他数据库小数据导入/导出 |
ETL |
整个集群几百KB/S |
数据库元数据备份/恢复 |
Gs_dump/gs_restore |
- |
|
Migration |
- |
GDS迁移物理数据
GDS工具适用场景:
大数据量以文本数据作为来源导入
大数据量表的导出
GDS工具原理介绍
GDS(GaussDB DATA SERVER)数据服务器位于数据库系统外部,通过网络与系统相连。数据服务器上部署GDS管理数据源数据,提供数据服务功能,分发数据文件给DataNode。各DataNode并行收到数据分片,进行数据的入库。数据导出流程刚好反过来。GDS支持导入和导出的文件格式有csv,text,fixed(每一行的数据等长)。
关键技术
传统数据库单节点导入性能低,GaussDB(DWS)充分利用多节点并行导入,提高整体导入性能:
- CN节点只负责任务的规划及下发,把数据导入的工作交给了DN节点,释放了CN节点的资源,使其有能力处理外部请求。
- GDS进程负责数据文件的切分,然后分发给各个DN实例。
- 各DN实例接受到数据分片后解析数据,而后根据表的分布列计算hash值,确定该条数据属于哪个DN;如果属于自身则缓冲到本地,如果属于别的DN则通过网络发送给相应的DN。
GDS导入数据
GDS进行数据导数时候,GDS的数量尽量小于扽分与DN的数量,防止出现多个GDS同时向一个DN导数,导致出现其他意想不到的问题。
GDS导入支持将存储在服务器普通文件系统中的数据导入到GaussDB(DWS)数据库中,暂时不支持将存储在HDFS文件系统上的数据导入GaussDB(DWS)数据库。
导入流程:
开始→准备源数据→启动GDS→创建GDS外表→执行导入数据→处理错误表→优化查询效率→停止GDS→结束
启动GDS服务
Gds -d /input_data/ -p 192.168.0.90:5000 -H 10.10.0.1/24 -l /log/gds_log.txt -D -t 2
常用参数说明:
- -d 待导入数据文件目录
- -p 设置GDS监听IP和端口。未指定时,IP的默认值为127.0.0.1,端口的默认值为8098;
- -H 设置允许连接到GDS的主机(参数为CIDR格式,仅支持linux系统);
- -l 设置GDS日志文件;
- -enable-ssl ssl的认证方式;
- -D 设置GDS后台运行,一般都指定该选项;
创建外表
Create foreign table t1_foreign(a1 varchar2(10), a2 int)
SERVER gasmpp_server OPTIONS (location ‘gsfs://192.168.0.90:5000/t1.txt’,
Format ‘text’ , encoding ‘utf8’ , delimiter ‘^’ , null ‘’)per node reject limit ‘value’
With error_t1_foreign;
执行导入
Insert into t1 select * from t1_foreign;
分析错误表
数据导入过程中发生的错误,一般分为数据格式错误和非数据格式错误。
数据格式错误:
在创建外表时,通过设置参数“LOG INTO error_table_name”,将数据导入过程中出现的出局格式错误信息写入指定的错误信息表error_table_name中,数据格式错误是指缺少或者多出字段值,数据类型错误或者编码错误。
非数据格式错误:
对于非数据格式错误,一旦发生将导致整个数据导入失败。可以根据执行数据导入过程中界面提示的错误信息,定位问题,处理错误表。
字段 |
说明 |
Nodeid |
datanode编号 |
Begintime |
错误数据写入错误表的时间 |
Filename |
错误数据行所在文本名 |
Rownum |
错误数据行在文本的行数 |
Rawrecord |
错误原始数据行 |
Detail |
错误原因说明 |
GDS导出数据
GaussDB(DWS)支持的导出模式有Local和Remote模式。
Remote模式:将集群中的业务数据导出到集群节点所在主机上。
- 支持多个GDS服务并发导出,但1各GDS在同一时刻,只能为1各集群提供导出服务。
- 配置与集群节点处于统一内网的GDS服务,导出速率受网络带宽影响,推荐的网络配置为10GE。
- 支持数据文件格式:TEXT,CSV和FIXED。单行数据大小需<1GB。
Local模式:将集群中的业务数据导出到集群节点所在主机上。一种专门为大量小文件而定制的一种策略。
- 数据将均匀切割并生成到集群节点上指定的文件夹下,需占用集群节点的磁盘空间。
- 支持数据文件格式:TEXT、CSV和FIXED。单行数据大小需<1GB。
启动GDS服务
参考GDS导入数据
创建外表
Create foreign table t1_foreign_output(a1 varchar2(10), a2 int)
SERVER gsmpp_server OPTIONS (location ‘gsfs://10.185.240.41:8000/’,
Format ‘text’, encoding ‘utf8’, delimiter ‘^’, null ‘’)
Write only;
- delimiter 导出文件的记录字段分隔符。推荐使用不可用字符,如0x07,0x08等,写法为delimited E’\x08’;
- write only 外表只写属性,该属性只供数据导出使用;
执行导出
导出的文本命名格式为t1_foreign_output.dat.0
Insert into t1_foreign_output select * from t1;
GDS增量数据导入
- GDS导入还有一个场景,就是定时将增量数据导入至GaussDB(DWS)。
- 可以通过写shell脚本并加入到crontab定时器中进行增量数据导入。
- 脚本中要包含备份/删除上一次增量导入后的源数据文件,启动本次源数据文件同步,启动本次增量数据导入。
- 启动GDS服务。
- 创建外表。
- 创建定时增量导入一级数据文件备份/删除脚本。
- 将脚本加入至定时器调度。
学习日期:2021-4-28
gs_dump/gs_resotre迁移元数据
适用场景
导出单个表定义。
导出整个数据库对象定义。
恢复整个数据库定向定义。
Gs_dump导出数据库对象
导出表定义
Gs_dump postgres -p 1600 -t public.test -s -f /data/all.sql
- -U 数据库用户名;
- -W 数据库用户密码;
- -p 数据库CN连接端口号;
- -s 只导出对象定义,不导出对象数据;
- -t 只导出指定的该表;
- -f 将输出发送至指定文件;
导出整个数据库对象
Gs_dump postgres -p 16000 -s -f /data/all.sql
导出数据库所有对象和数据
Gs_dump postgres -p 16000 -f /data/all.sql
Gs_resotre恢复数据库对象
从postgres 数据库中导出所有对象定义
Gs_dump postgres -p 16000 -s -f /data/all.sql -F c
向db1库中恢复上一步导出的对象定义
Gs_dump postgres -p 1600 -f /data/all.sql
ETL工具使用说明
适用场景
- 与其他数据库进行小数据量的导入和导出;
- 增量数据的导入和导出;
适用方法
- 需要修改ETL工具的JDBC驱动为GaussDB(DWS)对应的JDBC驱动;
- 在CN端配置对ETL工具所在机器IP的认证;
GaussDB(DWS)与异构数据库之间的数据迁移方案,如果数据从其他数据库导入到GaussDB(DWS)中,有以下两种方式。第一种方式适用比较简单,但是性能较差;第二种方式需要多步操作,但是性能好。
- 用ETL工具直接抽取。
- 先用源端数据库的相关工具把数据导出为文本,然后用GaussDB(DWS)的GDS工具导入;
例如从oracle把数据迁移到GaussDB(DWS),有以下两种方式:
- 用开源ETL工具KETTLE直接抽取,速度大概几百KB/S。
- 先用oracle的sqluldr2工具导出为文本(速度大概是15MB/S),然后用GaussDB(DWS)的GDS工具导入。
Migration工具
背景
当客户选择切换到华为数据库后可能回面临数据库的迁移任务,数据库迁移包括用户数据迁移和应用程序sql脚本迁移。
其中,应用程序sql脚本迁移是一个复杂、高风险且耗时的过程。
概述
Migration Tool是一款运行在linux或windows操作系统上的命令行工具,致力于向客户提供简单、快速、可靠的应用程序sql脚本迁移服务,通过内置的语法迁移逻辑解析源数用程序sql脚本。
Migration Tool不需要链接数据库,可在离线模式下实现零停机迁移,迁移过程中还会显示迁移过程状态,并用日志记录操作过程中发生的错误,便于快速定位问题。
目标数据库
Migration Tool支持迁移的应用程序sql脚本适用于以下目标数据库:
- GaussDB(DWS)
- DWS
源数据库
Migration Tool支持迁移的源数据库:
- Teradata
- Oracle
迁移对象
Migration Tool支持迁移Oracle和Teradata数据库的对象有:
- Oracle和Teradata支持的通用对象:SQL模式,SQL查询。
- 仅Oracle支持的对象:PL/SQL查询。
- 仅Teradata支持的对象:包含BTEQ和SQL_LANG脚本的Perl文件。
迁移流程
- 从Teradata或Oracle数据库中导出要迁移的sql脚本,并将Teradata或Oracle待迁移sql脚本放置在已安装并配置了Migration Tool的Linux或Windows服务器中。
- 执行Migration Tool命令进行语法迁移,命令中指定输入文件路径、输出文件归档路径和日志归档路径。
- 工具自动将迁移后的sql脚本和日志信息归档在指定路径中。
约束和限制
通用
- Migration Tool仅用于语法迁移,不支持数据迁移。
- 如果在将IN/NOT IN操作符转换为EXISTS/NOT EXISTS时,子查询的SELECT子句包含聚合函数,则迁移的脚本可能发生问题。
Teradata
- Migration Tool 无法区分SQL语句中的mod是否是关键字,当mod并非关键字时也会被替换为%。
- 如果含有FORMAT参数的case语句未用半角括号”()”,该语句不会处理。
- 如果Teradata查询中同时使用SELECT * 和QUALIFY子句,迁移的查询会为QUALIFY子句多返回一列。
- 子查询或函数内不支持对表的命名引用。
- 点赞
- 收藏
- 关注作者
评论(0)