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)