GaussDB for DWS gds线下迁移
线下集群通过gds工具至线上DWS迁移实施
迁移流程
迁移流程  | 
   迁移步骤  | 
   建议起始时间  | 
   耗时  | 
   备注  | 
  
开始                                                                                    迁移环境准备: 申请迁移中转服务器 配置DWS集群安全组 配置线下集群白名单 下载Gsql客户端和GDS软件包 上传工具包到中转服务器 解压GDS软件包 配置GDS加载服务器 数据迁移前准备: 线下集群元数据导出 手工整合元数据导出文件 上传集群迁移工具到中转机 配置dbinfo.conf 配置gds.conf 配置迁移表清单 将元数据导入DWS集群 生成迁移脚本 新建DWS目标表 查看建表日志 
 静态数据迁移实施: 再次配置data_migration工具的dbinfo.conf 再次在生成迁移脚本 创建导出外表 查看外表导出日志 修改导出外表脚本 向中转机导出线下集群数据 查看导出脚本执行日志 删除导出外表 查看导出数据 新建导入外表 查看外表导入日志 向DWS导入数据 查看导入数据日志 清理外表 查看外表清理日志 对新导入数据的表执行analyse 查看analyse日志 删除已导出数据(可选) 静态数据迁移实施后: 上传数据校验工具至线下集群 配置 dbinfo.conf 执行数据校验脚本 执行创建统计信息表语句 获取需要统计的表清单 执行数据统计 在DWS集群上执行校验 迁移后数据验证 
 迁移后业务验证  | 
   申请迁移中转机  | 
   迁移开始前一周内  | 
   0.5h  | 
   不中断数据导入修改  | 
  
配置DWS集群安全组  | 
   迁移开始前一周内  | 
   0.1h  | 
   不中断数据导入修改  | 
  |
配置线下集群白名单  | 
   迁移开始前一周内  | 
   0.1h  | 
   不中断数据导入修改  | 
  |
下载Gsql客户端和GDS软件包  | 
   迁移开始前一周内  | 
   0.1h  | 
   不中断数据导入修改  | 
  |
上传工具包到中转服务器  | 
   迁移开始前一周内  | 
   0.1h  | 
   不中断数据导入修改  | 
  |
解压GDS软件包  | 
   迁移开始前一周内  | 
   0.1h  | 
   不中断数据导入修改  | 
  |
配置GDS加载服务器  | 
   迁移开始前一周内  | 
   0.2h  | 
   不中断数据导入修改  | 
  |
线下集群元数据导出  | 
   迁移开始前4小时  | 
   0.5h  | 
   不中断数据导入修改  | 
  |
上传集群迁移工具到中转机  | 
   迁移开始前4小时  | 
   0.1h  | 
   不中断数据导入修改  | 
  |
配置dbinfo.conf  | 
   迁移开始前4小时  | 
   0.1h  | 
   不中断数据导入修改  | 
  |
配置gds.conf  | 
   迁移开始前4小时  | 
   0.1h  | 
   不中断数据导入修改  | 
  |
配置迁移表清单  | 
   迁移开始前4小时  | 
   0.2h  | 
   不中断数据导入修改  | 
  |
将元数据导入DWS集群  | 
   迁移开始前4小时  | 
   0.2h  | 
   不中断数据导入修改  | 
  |
生成迁移脚本  | 
   迁移开始前4小时  | 
   0.2h  | 
   不中断数据导入修改  | 
  |
新建DWS目标表  | 
   迁移开始前4小时  | 
   0.5h  | 
   不中断数据导入修改  | 
  |
查看建表日志  | 
   迁移开始前4小时  | 
   0.2h  | 
   不中断数据导入修改  | 
  |
启动业务双写,同时对线下和线上集群发放业务  | 
  ||||
再次配置data_migration工具的dbinfo.conf  | 
   迁移开始  | 
   0.2h  | 
   ||
再次在生成迁移脚本  | 
   迁移开始  | 
   0.2h  | 
   ||
创建导出外表  | 
   迁移开始  | 
   1h  | 
   ||
查看外表导出日志  | 
   迁移开始  | 
   0.2h  | 
   ||
修改导出外表脚本  | 
   迁移开始  | 
   0.2h  | 
   ||
向中转机导出线下集群数据  | 
   迁移开始  | 
   2h  | 
   ||
查看导出脚本执行日志  | 
   迁移开始  | 
   |||
删除导出外表  | 
   迁移开始  | 
   |||
查看导出数据  | 
   迁移开始  | 
   |||
新建导入外表  | 
   迁移开始  | 
   |||
查看外表导入日志  | 
   迁移开始  | 
   |||
向DWS导入数据  | 
   迁移开始  | 
   |||
查看导入数据日志  | 
   迁移开始  | 
   |||
清理外表  | 
   迁移开始  | 
   |||
查看外表清理日志  | 
   迁移开始  | 
   |||
对新导入数据的表执行  | 
   迁移开始  | 
   |||
analyse  | 
   ||||
查看analyse日志  | 
   迁移开始  | 
   |||
删除已导出数据(可选)  | 
   迁移结束  | 
   |||
1. 数据迁移前环境准备
1.1 申请迁移中转服务器
在启动集群迁移前,需要准备迁移中转机,中转机要求网络可以和线上集群,线下集群互通;磁盘的容量>20T
中转机主要用途:
1) 部署GDS服务,作为GDS导入和导出服务器;
2) 部署Gsql客户端用于访问线下集群和DWS集群,执行迁移脚本
如果使用ECS服务区作为中转机,需要在DWS集群具有相同的区域、可用区购买弹性云服务器,可参考如下链接:
https://support.huaweicloud.com/mgtg-dws/dws_01_0128.html
https://support.huaweicloud.com/devg-dws/dws_04_prepare_for_gds_01.html
1.2 下载DWS Gsql客户端和GDS软件包
GDS服务
获取GDS工具前,需要确认下ECS操作系统类型,按照操作系统准备工具包,对于arm版本需要分别下载GDS和GSQL工具包,X86版本在GSQL工具包里已经包含了GDS
ARM版本:https://dws.obs.cn-north-1.myhuaweicloud.com/download/DWS-Gds-1_7_2.tar.gz
X86版本:https://support.huaweicloud.com/tg-dws/dws_07_0002.html
 
1.3 在中转服务器上创建迁移用户omm
如果中转服务器上没有omm用户,则需要执行该操作
useradd -g wheel omm -d /home/omm -p 'Bigdata123@'  | 
  
1.4 上传软件包到中转服务器
使用omm用户,通过FTP工具将工具包上传到中转服务器/tmp目录

1.5 解压GDS软件包
以omm用户登录中转机服务器,在/tmp目录解压软件包
unzip dws_client_euler_kunpeng_x64.zip chown -R omm:wheel *  | 
  
1.6 配置GDS加载服务器
数据对象多,数据量大的情况下建议使用多负载机,部署多gds,进行数据的并行导出导入,最大限度利用磁盘空间及I/O、网络带宽(在不影响现网业务的情况下提升数据迁移效率)。注意:中转服务器上要保证gsql、gds、gs_dump三个命令可用,且安装包必须对应相同类型的平台,例如x86的程序不能运行在arm架构
1) 以omm用户登录中转服务器,创建gds路径
su - omm mkdir -p /home/omm/dwsgds mkdir -p /home/omm/c80gds mkdir -p /home/omm/651gds  | 
  
2) 将从DWS获取gds客户端及依赖包同步至对应路径下
cp -r bin /home/omm/dwsgds/ cp -r lib /home/omm/dwsgds/ cd gds/ cp gds /home/omm/dwsgds/bin chown -R omm:wheel /home/omm/dwsgds/  | 
  
3) 从老集群获取GDS和gs_dump客户端以及依赖包同步至对应路径下
对C80版本集群: 以omm用户登录线下集群 cd /opt/huawei/Bigdata/mppdb/core/ scp -r lib omm@ip:/home/omm/c80gds cd /opt/huawei/Bigdata/mppdb/core/bin scp gds omm@ip:/home/omm/c80gds/bin scp gs_dump omm@ip:/home/omm/c80gds/bin 
 对651版本集群: 以omm用户登录线下集群 cd /opt/huawei/Bigdata/mppdb/core/ scp -r lib omm@ip:/home/omm/651gds cd /opt/huawei/Bigdata/mppdb/core/bin scp gds omm@ip:/home/omm/651gds/bin scp gs_dump omm@ip:/home/omm/651gds/bin 
  | 
  
4) 切换到中转机服务器
su - omm chown -R omm:wheel /home/omm/c80gds/ chown -R omm:wheel /home/omm/651gds/  | 
  
5) 配置环境变量
su - omm vi ~/.bashrc 添加如下内容: export PATH=/home/omm/gds/bin:/home/omm/c80gds/bin:/home/omm/c80gds/bin:$PATH export LD_LIBRARY_PATH=/home/omm/gds/lib/:/home/omm/c80gds/lib/:/home/omm/c80gds/lib/:$LD_LIBRARY_PATH 保存退出 source ~/.bashrc  | 
  
6) 确认环境变量生效
/home/omm/dwsgds/bin/gds -V mkdir -p /home/omm/dwsgds/bin/log /home/omm/c80gds/bin/gds -V mkdir -p /home/omm/c80gds/bin/log /home/omm/651gds/bin/gds -V mkdir -p /home/omm/651gds/bin/log  | 
  
7) 挂载数据盘
mkdir -p /srv/Bigdata/mppdb mkfs.xfs -f /dev/vdb mount /dev/vdb /srv/Bigdata/mppdb chown -R omm:wheel /srv/  | 
  
8) 将挂载的盘加入/etc/fstab配置文件
vi /etc/fstab UUID= 1b8bb98e-1e01-4fbc-9a1b-eaa1227069f6 /srv/Bigdata/mppdb xfs defaults 1 1 vi /etc/fstab 通过blkid 查看需要挂载盘的uuid,例如: /dev/vda1: UUID="7B46-32E0" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="6313f2d6-3e96-4df6-a2f5-bb41804d0ae5" /dev/vda2: UUID="3ed3c819-430f-424c-ab61-1426d329b80d" TYPE="ext4" PARTUUID="02dc92ad-3898-4488-ae86-3229d422b090" /dev/vdb: UUID="1b8bb98e-1e01-4fbc-9a1b-eaa1227069f6" TYPE="xfs" 
  | 
  
9) 启动gds服务,根据负载机配置,每块数据盘对应启动3个gds服务(其中C80和651两个版本各启动一个导出,DWS版本启动一个导入)。
/home/omm/gds/bin/c80gds -d /srv/Bigdata/mppdb -p ip:10086 -H 0.0.0.0/0 -l /home/omm/c80gds/bin/log/gds10086.log -S 10GB -D -t 32 
 /home/omm/gds/bin/651gds -d /srv/Bigdata/mppdb -p ip:10086 -H 0.0.0.0/0 -l /home/omm/651gds/bin/log/gds10086.log -S 10GB -D -t 32 
 /home/omm/gds/bin/dwsgds -d /srv/Bigdata/mppdb -p ip:10087 -H 0.0.0.0/0 -l /home/omm/dwsgds/bin/log/gds10087.log -D -t 32  | 
  
1.7 配置DWS集群安全组
迁移中转机会启动GDS和Gsql服务,与DWS集群通信,因此需要在DWS集群的安全组的开放对应服务的端口.
在集群的“基本信息”页面中,找到“安全组”参数,单击安全组名称进入安全组详情页面,选择入方向规则.

1) 在DWS上配置Gsql访问规则:

2) 在DWS上配置GDS服务的安全组入规则配置样例(有多个GDS服务端口的话,都需要配置上,例如10086,10087):

1.8 配置线上集群白名单
执行如下命令在线下集群所有CN的pg_hba.conf配置文件中增加一条客户端接入认证规则
source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile gs_guc set -Z coordinator -N all -I all -h "host all jack x.x.x.x/x sha256"  | 
  
注:
l all表示允许客户端连接到任意的数据库。
l jack表示连接数据库的用户。
l x.x.x.x表示只允许IP地址为x.x.x.x的主机连接。在使用过程中,请根据用户的网络进行配置修改。
l sha256表示连接时jack用户的密码使用sha256算法加密。
2. 数据迁移前准备
2.1 线下集群元数据导出
在确认迁移集群范围后,使用dump.sh工具,登录线下集群,导出集群中所有数据库的元数据。
cd /srv/BigData/mppdb/data1 gs_dumpall -W Bigdata@123 -U omm -f MPPDB_backup.sql -p 25308 –s  | 
  
2.2 手工整合元数据导出文件
修改MPPDB_backup.sql元数据文件,删除所有建表语句,然后将文件copy到中转服务器(注意:只保留创建数据库、用户、模式等信息,保证新集群能够正确创建这些信息),然后将文件copy到中转服务器
将cat MPPDB_backup.sql | grep -i 'CREATE SCHEMA' 和cat MPPDB_backup.sql | grep -i 'ALTER SCHEMA'的结果添加到MPPDB_backup.sql create database后,其余建表语句清除
scp MPPDB_backup.sql omm@ip:/home/omm/  | 
  
2.3 上传集群迁移工具到中转机
使用ftp工具将data_migration.zip工具上传到加载机所在服务器的/home/omm目录下。

以omm用户登录加载机服务器,并以omm用户执行:
cd /home/omm unzip data_migration.zip cd data_migration dos2unix *.sh dos2unix table_list chmod +x *.sh chmod +x table_list  | 
  
2.4 配置data_migration工具的dbinfo.conf
cd conf vi dbinfo.conf  | 
  
配置介绍: sysuser='omm' #操作系统用户 old_cluster_ip='x.x.x.x' #旧集群CN IP old_cluster_db='postgres' #旧集群要迁移的数据库 old_cluster_port='25308' #旧集群数据库连接端口 old_cluster_db_user='omm' #旧集群数据库用户 old_cluster_password='xxxxxx' #旧集群数据库密码 gds_ip_list=’x.x.x.x’ #gds加载机ip列表,空格分隔 gdspath=’ /srv/BigData/mppdb/data’ #gds加载机数据存储路径 
 new_cluster_db='lx_test' #新集群迁入的数据库 new_cluster_port='25308' #新集群数据库连接端口 new_cluster_db_user='omm' #新集群数据库用户 new_cluster_password='xxxxxxx' #新集群数据库密码 part_column='"time_stamp"' #时间戳 
  | 
  
2.5 配置data_migration工具的gds.conf
vi gds.conf  | 
  
 
配置介绍: gds_write_server=#GDS导出服务器 gds_read_server="#GDS导入服务器  | 
  
2.6  配置迁移表清单
cd /tmp/data_migration vi table_list 参数格式: 按照schema加表名的格式填写注意:表名字必须加双引号 ombi."grey_evaluation_timeseries"  | 
  
2.7 将元数据导入DWS集群
登录中转服务器,使用omm用户,向DWS集群导入元数据
source ~/.bashrc gsql -d sqoop -p 8000 -h x.x.x.x -U dbadmin -W passwd -f MPPDB_backup.sql > export.log  | 
  
2.8 在生成迁移脚本
进入data_migration目录,生成迁移脚本
cd /home/omm/data_migration sh table_dump.sh table_list  | 
  
 
执行成功后,生成以下路径

2.9 新建DWS目标表
进入new_cluster文件夹,执行创建目标表脚本,在DWS创建新表
cd /home/omm/data_migration/new_cluster/script sh create_goal_table.sh  | 
  
2.10 查看建表日志
进入new_cluster文件夹下的log目录打开create_goal_table.log,查看是否有报错
cd /home/omm/data_migration/new_cluster/log vi create_goal_table.log  | 
  
2.11 启动业务双写,同时对线下和线上集群发放业务
需要业务侧配合
3. 数据迁移实施
如下操作在中转机服务器上执行:
3.1 迁移表校验
业务双写启动一段时间后,开始准备要迁移的表,数据表迁移原则:
表类型  | 
   迁移方法  | 
  
简单表,有timestamp字段  | 
   通过迁移脚本迁移  | 
  
简单表,没有timestamp字段  | 
   全量导,需提前识别并停止业务更新  | 
  
分区表,有timestamp字段,并且是分区键  | 
   通过迁移脚本迁移  | 
  
分区表,没有timestamp字段  | 
   需提前识别  | 
  
分区表,有timestamp字段,timestamp字段没有作为分区键  | 
   通过迁移脚本迁移  | 
  
3.1.1 过滤没有数据业务表
在中转机上执行校验数据脚本
cd data_check/gen_tablelist/script sh create_tabl_shell.sh sh normal_count_table_shell.sh  | 
  
通过日志查看线上和线下集群是否插入校验数据
/data_check/gen_table/log> tailf normal_count_table.log  | 
  
Gsql链接DWS执行sql过滤出这段时间未入数据的表,将导出数据保留,同时将这些表从tablelist中删除,需要由业务排查没有双写的原因
select a.tablename from normal_table_count a where exists(select 1 from normal_table_count where tablename=a.tablename and date!=a.date) group by 1;
3.1.2过滤简单业务表
Gsql链接DWS执行sql,将导出数据保留,命名简单表
select relname from pg_class where parttype != 'p' and relkind='r' and relname not like '%pmk%'and relname not like '%pg%';
3.2 再次配置data_migration工具的dbinfo.conf(正式迁移数据)
要根据业务时间戳字段,修改如下参数
cd conf vi dbinfo.conf part_column='"time_stamp"' #时间戳 
  | 
  
3.3 再次在生成迁移脚本
进入data_migration目录,生成迁移脚本
cd /home/omm/data_migration sh table_dump.sh table_list  | 
  

执行成功后,生成以下路径

3.4 创建导出外表
进入old_cluster文件夹下的script目录,在线下集群上创建导出外表
cd /home/omm/data_migration/old_cluster/script sh create_exp_foreign_tab.sh  | 
  
3.5 查看外表导出日志
进入old_cluster文件夹下的log目录打开create_exp_foreign_tab.log,查看是否有报错
cd /home/omm/data_migration/old_cluster/log vi create_exp_foreign_tab.log  | 
  
 
3.6 修改导出外表脚本
检查生成的导出外表sql,对简单表需要替换掉between后的语句(注意:简单表即非分区表,按照现场环境设置)
cd old_cluster/sql/ vi exp_data_cmd.sql  | 
  
表类型  | 
   修改规则  | 
  
简单表,有timestamp字段  | 
   :%s/where "0_0_pt_d" between '2018-10-29 00:00:00' and '2018-10-29 00:00:00'//g 
  | 
  
简单表,没有timestamp字段  | 
   全量导,需提前识别并停止业务更新  | 
  
分区表,有timestamp字段,并且是分区键  | 
   按timestamp字段过滤导出导入  | 
  
分区表,没有timestamp字段  | 
   需提前识别  | 
  
分区表,有timestamp字段,timestamp字段没有作为分区键  | 
   按timestamp字段过滤导出导入  | 
  
3.7 向中转机导出线下集群数据
进入old_cluster文件夹下的script目录,执行数据导出脚本
cd /home/omm/data_migration/old_cluster/script sh exp_data_script.sh  | 
  
3.8 查看导出脚本执行日志
进入old_cluster文件夹下的log目录打开exp_data_script.log,查看是否有报错
cd /home/omm/data_migration/old_cluster/log vi exp_data_script.log  | 
  

3.9 删除导出外表
导出完成后,需要清理掉线下集群的外表
sh clear_exp_foreign_tab_script.sh

3.10 查看导出数据
进入gds加载机数据存储路径,查看数据是否成功导出3.11 新建导入外表
进入new_cluster文件夹,执行创建目标表脚本,在DWS创建新表
cd /home/omm/data_migration/new_cluster/script sh create_imp_foreign_tab.sh  | 
  
 
3.12 查看外表导入日志
进入new_cluster文件夹下的log目录打开create_imp_foreign_tab.log,查看是否有报错
cd /home/omm/data_migration/new_cluster/log vi create_goal_table.log  | 
  


3.13 向DWS导入数据
进入new_cluster文件夹,执行数据导入脚本,向DWS导入数据
cd /home/omm/data_migration/new_cluster/script sh imp_data_script.sh  | 
  
3.14 查看导入数据日志
进入new_cluster文件夹下的log目录打开imp_data_script.log,查看是否有报错
vi ../log/imp_data_script.log 
  | 
  

3.15 清理外表
进入new_cluster文件夹,执行数据清理脚本,清理生成的外表
cd /home/omm/data_migration/new_cluster/script sh clear_imp_foreign_tab_script.sh  | 
  
3.16 查看外表清理日志
进入new_cluster文件夹下的log目录打开clear_imp_foreign_tab_script.log,查看是否有报错
cd /home/omm/data_migration/new_cluster/log vi clear_imp_foreign_tab_script.log  | 
  

3.17 对新导入数据的表执行analyse
进入new_cluster文件夹,执行数据清理脚本,清理生成的外表
cd /home/omm/data_migration/new_cluster/script sh analyze_table_script.sh  | 
  
3.18 查看analyse日志
进入new_cluster文件夹下的log目录打开analyze_table_script.log,查看是否有报错
cd /home/omm/data_migration/new_cluster/log vi analyze_table.log  | 
  

3.19 删除已导出数据(可选)
为了避免导出数据占用空间,可以在下次集群迁移前执行数据清理脚本
cd /home/omm/data_migration/script sh script delete_local_data.sh  | 
  
运行后进入Gds加载机挂载目录,查看数据是否删除。
- 点赞
 - 收藏
 - 关注作者
 
            
           
评论(0)