暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

告别2024拥抱2025-100亿条数据中台业务数据迁移总结

176
梦虽遥,追则能达;愿虽艰,持则可圆。让我们满怀希望,迎接新的一年。祝祖国时和岁丰、繁荣昌盛!祝大家所愿皆所成,多喜乐、长安宁!
随着业务数据量快速增长,数据中台集群出现性能瓶颈。为了更好满足业务灵活实时查询需要,客户建设新的数据中台集群,既满足业务需求,也满足两地双中心的高可用要求。我司负责将旧的数据中台数据迁移至新的数据中台,本次只迁移某个业务子系统,业务数据条目超过100亿条,百张业务表
一、数据仓库总体架构
数据仓库总体架构,包括上层的协调节点CN、GTM事务管理器、中间的数据交互总线FN、以及下方的数据节点DN。采用MPP架构,其特性是 share-nothing,数据分散在多个DN上,按照不同的分布键分布,并且不同的表可以自定义不同的分布键。如果CN 收到了一条查询,它会将这个任务分散到多个DN上并行执行,从而提高执行效率,最后CN获得DN 并行执行的最后结果,汇总之后再返回给客户端。

CN 节点:CN节点不存储业务数据,只存储数据字典,负责生成、分发SQL执行计划到每个DN节点,同时负责与客户端的交互及权限认证。

DN 节点:DN节点负责存储业务数据并执行由CN节点分发的SQL语句,同时为了保证每一个DN服务在同一个性能水平上,每一个DN 节点机器有相同的资源配置,扩容时不作机型的改变。

二、多种迁移方式组合
序号
迁移方式
迁移速度
场景
1
db_link
速度最慢
小表数据迁移
2
pg_dump
速度一般
表结构迁移以及小表迁移
3
copy
速度次快
大表迁移/分区表迁移
4
tdx
速度最快
大表迁移/分区表迁移,导出文件不需要拷贝
三、迁移过程规划
1、基于业务子系统梳理数据库信息、用户信息和业务表清单,包括表数据量、表结构、静态/动态表、分区表与非分区表、以及表分布键信息。
2、评估目标集群资源情况,源和目标服务器之间的网络环境以及中转空间情况。
3、数据迁移模拟测试,包括迁移方式、迁移速度、异常处理、业务验证等,评估迁移时间窗口。
4、数据库集群状态观察,包括主从同步状态、磁盘空间、备份任务等。
5、正式数据迁移,多种方式组合,实现最快速度迁移。
6、业务系统功能验证,以及运行保障。
四、tdx迁移方式总结
tdx迁移方式实现多张大表高效迁移,学习难度不大。

在源库配置tdx环境

1、查看dn存储节点的进程,获取数据目录和安装路径信息

    ps -ef|grep dn
    tbase    54437     1  0 Oct25 ?        01:20:33 data1/tbase/user_1/tdata_14/tbase_v3_01_8/3.15.5.8/install/tbase_pgxz/bin/postgres --datanode -D data1/tbase/user_1/tdata_14/tbase_v3_01_8/data/dn008 -i

    2、基于上述结果,设置环境变量。

      su - tbase
      export PATH=/data1/tbase/user_1/tdata_14/tbase_v3_01_8/3.15.5.8/install/tbase_pgxz/bin:$PATH;
      export LD_LIBRARY_PATH=/data1/tbase/user_1/tdata_14/tbase_v3_01_8/3.15.5.8/install/tbase_pgxz/lib

      3、登录cn节点查看数据库版本

        psql -h 源库IP -11345 -U tbase -d postgres
        postgres=select tbase_version();
          tbase_version  
        -----------------
         TBase_V3.15.5.8

        4、在源库服务器检查8088端口是否被占用,并启用tdx服务。服务器尽量腾出较多磁盘空间。

          netstat -antp|grep 8088
          nohup tdx -d data1/backup/tbase_v3_01_8 -p 8088 -n 32 -l data1/backup/tbase_v3_01_8/tdx.log &


          [tbase@mpp tbase_v3_01_8]$ ps -ef|grep tdx
          tbase    75869 59190  0 17:39 pts/1    00:00:00 tdx -d /data1/backup/tbase_v3_01_8 -p 8088 -n 32 -l /data1/backup/tbase_v3_01_8/tdx.log


          导出业务表数据

          1、登录源库检查是否安装exttable_fdw扩展组件

            psql -h 源库IP -p 11345 -U tbase -d postgres
            ots=# \dx exttable_fdw
                                    List of installed extensions
                 Name     | Version | Schema |                Description                
            --------------+---------+--------+-------------------------------------------
             exttable_fdw | 1.2     | public | foreign-data wrapper for flat file access
            (1 row)

            2、如果没有,则创建新组件

              create extension exttable_fdw ; 

              3、基于业务表结构,创建外部扩展表,脚本中写好tdx服务信息。

                模板样例:
                create writable external table xxx (like xxx ) location ('tdx://172.16.0.30:8088/t1.csv') FORMAT 'text' (DELIMITER E'\\x0E'  NULL '$^&'  EOL E'\\x0F\\n');

                由于此次迁移涉及上百张表,因此可以excel公式批量生成相关的建表脚本。

                  create writable external table tdx_业务表1 (like 业务表1 ) location ('tdx://源库服务器:8088/业务表1_20241216.csv') FORMAT 'text' (DELIMITER E'\x0E'  NULL '$^&'  EOL E'\x0F\n');

                  4、写入外部表,可以采用shell脚本批量进行并行写入。

                    insert into tdx_业务表1 select * from 业务表1;
                    -rw------- 1 tbase tbase 3.6T Dec 16 21:32 业务表1_20241216.csv
                    INSERT 0 5678705239

                    5、导出源表结构信息

                      pg_dump --public -h 源库CN节点IP -11345 -U 用户 库名 -t 业务表1 > /data1/backup/tbase_v3_01_8/ddl_业务表1.sql

                      导入业务表数据

                      1、基于导出的ddl_业务表1.sql文件,在目标库创建新的数据库、新的用户、以及创建业务表。注意只运行创建表和字段脚本,主键和索引需要等表数据迁入后再创建。

                      2、登录目标数据库,执行创建表脚本。

                        su - tbase
                        export PATH=/data/tbase/user_1/tdata_00/restruct_9/3.16.4.5/install/tbase_pgxz/bin:$PATH;export LD_LIBRARY_PATH=/data/tbase/user_1/tdata_00/restruct_9/3.16.4.5/install/tbase_pgxz/lib
                        psql -h 目录库CN节点 -p 11300 -U 用户名 -d 库名

                        3、查看表结构信息

                          \d+ 业务表1

                          4、将目标版本的安装文件拷贝到源库,即3.16.4.5_tbase_pgxz.tar.gz(注意cpu架构保持一致)。

                            cd /data1/tbase/user_1/tbase_pgxz316
                            tar -zxvf 3.16.4.5_tbase_pgxz.tar.gz

                            检查权限是否为tbase:tbase

                            5、设置环境变量

                              export PATH=/data1/tbase/user_1/tbase_pgxz316/tbase_pgxz/bin:$PATH;
                              export LD_LIBRARY_PATH=/data1/tbase/user_1/tbase_pgxz316/tbase_pgxz/lib


                              cd /data1/tbase/user_1/tbase_pgxz316
                              nohup tdx -d /data1/backup/tbase_v3_01_8 -p 8089 -n 32 -l /data1/backup/tbase_v3_01_8/tdx_3.16.log & 


                              ps -ef|grep tdx 
                              tbase    41687 39566  0 19:45 pts/3    00:00:00 tdx -d /data1/backup/tbase_v3_01_8 -p 8089 -n 32 -l /data1/backup/tbase_v3_01_8/tdx_3.16.log
                              tbase    75869 59190 12 17:39 pts/1    00:15:15 tdx -d /data1/backup/tbase_v3_01_8 -p 8088 -n 32 -l /data1/backup/tbase_v3_01_8/tdx.log

                              6、检查目标库是否有安装扩展组件

                                \dx exttable_fdw

                                如果没有,则创建新组件

                                  create extension exttable_fdw ; 

                                  7、创建外部扩展表

                                    [tbase@localhost ~]$ psql -h 目标库CN节点 -11300 -U tbase -d ims_ana
                                    创建目标外部表
                                    create external table tdx_业务表1 (like 业务表1 ) location ('tdx://源库服务器:8089/业务表1_20241216.csv') FORMAT 'text' (DELIMITER E'\x0E'  NULL '$^&'  EOL E'\x0F\n');

                                    8、写入表数据

                                      insert into fee_list_d select * from tdx_fee_list_d;

                                      看到这边,大家有没有发现,数据从源库导出后,直接导入目标库,不需要把文件拷贝到目标服务器。这就是tdx迁移方式的一个大优势。

                                      创建主键和索引

                                      1、检查源和目标库的导出导入记录数据量是否一致。

                                      2、给业务表创建相应主键和索引信息。

                                      3、删除外部扩展表。

                                      4、清理导出与备份出来的临时文件。

                                      五、近期热门文章:
                                      👉达梦数据库DM8小版本升级案例分享
                                      👉如何利用RMAN Debug命令来诊断问题
                                      👉达梦数据守护集群异常脑裂处理案例总结
                                      👉Linux运维技能-du命令常见用例总结
                                      👉Oracle 10g 备份恢复及容灾部署技术问题总结
                                      👉TiDB 7.5 实验测试环境搭建及小插曲处理
                                      👉DBA实验手册第3讲 运用bbed工具恢复delete误删除的数据
                                      👉DBA实验手册第5讲 运用bbed工具恢复truncate表及反向构造段头块
                                      全文完,希望可以帮到正在阅读的你,如果觉得有帮助,可以分享给你身边的朋友,同事,你关心谁就分享给谁,一起学习共同进步~~~

                                      文章转载自数据库运维之道,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                      评论