greenplum使用gpcopy数据传输方案




  • 一 架构基础环境

    主机mdw和备机mdwbak节点对等,都采用2+4架构。

    1.1 主机列表

    主机 IP地址 备机 IP地址
    mdw 192.168.0.20 mdwbak 192.168.0.30
    smdw 192.168.0.21 smdwbak 192.168.0.31
    sdw1 192.168.0.22 sdw1bak 192.168.0.32
    sdw2 192.168.0.23 sdw2bak 192.168.0.33
    sdw3 192.168.0.24 sdw3bak 192.168.0.34
    sdw4 192.168.0.25 sdw4bak 192.168.0.35

    1.2 CPU及内存

    所有节点都采用华为云服务器,CPU核心数为16核心,内存为32G,节点总数为12。主机备机都采用内部万兆网络。磁盘为单独挂载磁盘,采用高性能IO磁盘,实际最高读写性能为350M/s。

    1.3 计算节点和镜像节点

    计算节点primary数量为主备机都为24,镜像节点mirror数量为主备机都为24,总节点数量为48。

    1.4 数据库版本

    数据库采用greenplum官方发布的5.27.1开源版本。

    二 环境磁盘IO和网络IO性能基准测试

    2.1 主机mdw磁盘和网络IO性能测试

    磁盘IO

    [gpadmin@mdw ~]$ gpcheckperf -f gpconfigs/gp_seg_hosts -d /data1 -d /data2 -r ds
    /usr/local/greenplum-db/./bin/gpcheckperf -f gpconfigs/gp_seg_hosts -d /data1 -d /data2 -r ds

    --------------------
    -- DISK WRITE TEST
    --------------------

    --------------------
    -- DISK READ TEST
    --------------------

    --------------------
    -- STREAM TEST
    --------------------

    ====================
    == RESULT
    ====================

    disk write avg time (sec): 426.09
    disk write tot bytes: 268517507072
    disk write tot bandwidth (MB/s): 601.00
    disk write min bandwidth (MB/s): 150.07 [sdw3]
    disk write max bandwidth (MB/s): 150.39 [sdw1]

    disk read avg time (sec): 425.65
    disk read tot bytes: 268517507072
    disk read tot bandwidth (MB/s): 601.61
    disk read min bandwidth (MB/s): 150.24 [sdw3]
    disk read max bandwidth (MB/s): 150.52 [sdw4]

    stream tot bandwidth (MB/s): 67542.73
    stream min bandwidth (MB/s): 15459.31 [sdw1]
    stream max bandwidth (MB/s): 18507.68 [sdw2]

    主机四个主机节点磁盘采用通用性磁盘,性能为150M/s。

    网络IO

    [gpadmin@mdw ~]$ gpcheckperf -f gpconfigs/gp_all_hosts -r N -d /tmp
    /usr/local/greenplum-db/./bin/gpcheckperf -f gpconfigs/gp_all_hosts -r N -d /tmp

    -------------------
    -- NETPERF TEST
    -------------------

    ====================
    == RESULT
    ====================
    Netperf bisection bandwidth test
    mdw -> smdw = 896.900000
    sdw1 -> sdw2 = 892.210000
    sdw3 -> sdw4 = 879.870000
    smdw -> mdw = 889.740000
    sdw2 -> sdw1 = 781.620000
    sdw4 -> sdw3 = 884.400000

    Summary:
    sum = 5224.74 MB/sec
    min = 781.62 MB/sec
    max = 896.90 MB/sec
    avg = 870.79 MB/sec
    median = 889.74 MB/sec

    内部网络采用万兆网络,由于是云上虚拟机环境,速率仅有800M/s左右。

    2.2 备机mdwbak磁盘及网络IO性能测试

    磁盘IO

    [gpadmin@mdwbak ~]$ gpcheckperf -f gpconfigs/gp_seg_hosts -d /data1 -d /data2 -r ds
    /usr/local/greenplum-db/./bin/gpcheckperf -f gpconfigs/gp_seg_hosts -d /data1 -d /data2 -r ds

    --------------------
    -- DISK WRITE TEST
    --------------------

    --------------------
    -- DISK READ TEST
    --------------------

    --------------------
    -- STREAM TEST
    --------------------

    ====================
    == RESULT
    ====================

    disk write avg time (sec): 182.41
    disk write tot bytes: 268517244928
    disk write tot bandwidth (MB/s): 1403.82
    disk write min bandwidth (MB/s): 350.64 [sdw2bak]
    disk write max bandwidth (MB/s): 351.10 [sdw1bak]

    disk read avg time (sec): 181.99
    disk read tot bytes: 268517244928
    disk read tot bandwidth (MB/s): 1407.10
    disk read min bandwidth (MB/s): 351.35 [sdw2bak]
    disk read max bandwidth (MB/s): 351.97 [sdw4bak]

    stream tot bandwidth (MB/s): 69788.36
    stream min bandwidth (MB/s): 16867.88 [sdw4bak]
    stream max bandwidth (MB/s): 17669.53 [sdw3bak]

    备机磁盘采用超高IO磁盘,磁盘IO为350M/s左右。

    网络IO

    [gpadmin@mdwbak ~]$ gpcheckperf -f gpconfigs/gp_all_hosts -r N -d /tmp
    /usr/local/greenplum-db/./bin/gpcheckperf -f gpconfigs/gp_all_hosts -r N -d /tmp

    -------------------
    -- NETPERF TEST
    -------------------

    ====================
    == RESULT
    ====================
    Netperf bisection bandwidth test
    mdwbak -> smdwbak = 788.660000
    sdw1bak -> sdw2bak = 889.240000
    sdw3bak -> sdw4bak = 790.290000
    smdwbak -> mdwbak = 728.640000
    sdw2bak -> sdw1bak = 793.870000
    sdw4bak -> sdw3bak = 780.970000

    Summary:
    sum = 4771.67 MB/sec
    min = 728.64 MB/sec
    max = 889.24 MB/sec
    avg = 795.28 MB/sec
    median = 790.29 MB/sec

    备机节点内部网络带宽传输速率和主机一样。

    三 gpcopy同步数据

    3.1 主机mdw和备机mdwbak互信

    gpcopy 方式加载数据,可以启用并行进行加载,并行数量范围为1-64512,默认并行数量为4,启用并行根据服务器内存资源分配,初始分配以60个做并行数。

    3.2 主备机所有节点配置ssh互信

    将主备机所有节点ip和主机名映射放置于/etc/hosts文件中,(请使用root用户添加),如下:

    [root@mdw opt]# tail -12 /etc/hosts
    192.168.0.20 mdw
    192.168.0.21 smdw
    192.168.0.22 sdw1
    192.168.0.23 sdw2
    192.168.0.24 sdw3
    192.168.0.25 sdw4
    192.168.0.30 mdwbak
    192.168.0.31 smdwbak
    192.168.0.32 sdw1bak
    192.168.0.33 sdw2bak
    192.168.0.34 sdw3bak
    192.168.0.35 sdw4bak

    将主机mdw上的/etc/hosts文件拷贝到其他所有节点(使用root用户操作)

    [root@mdw opt]# for ip in mdw smdw sdw1 sdw2 sdw3 sdw4 mdwbak smdwbak sdw1bak sdw2bak sdw3bak sdw4bak;do
    scp /etc/hosts $ip:/etc;
    done

    配置所有主机名到主机mdw上gpadmin用户下的~/gpconfigs下的iplist文件中,如下:

    [gpadmin@mdw ]$ cat ~/gpconfigs/iplist
    mdw
    smdw
    sdw1
    sdw2
    sdw3
    sdw4
    mdwbak
    smdwbak
    sdw1bak
    sdw2bak
    sdw3bak
    sdw4bak

    使用gpssh-exkeys配置所有节点互信(使用gpadmin用户)

    [gpadmin@mdw ]$ gpssh-exkeys -f ~/gpconfigs/iplist

    3.3 主机mdw导出全局数据和数据库对象结构

    [gpadmin@mdw ~]$ #创建备份目录
    [gpadmin@mdw ~]$ mkdir -p /data/pg_dump
    [gpadmin@mdw ~]$ #导入临时主机mdw和备机smdw环境变量
    [gpadmin@mdw ~]$ export OLD_PORT=5432
    [gpadmin@mdw ~]$ export OLD_HOST=mdw
    [gpadmin@mdw ~]$ export DBNAME=testdb
    [gpadmin@mdw ~]$ export OLD_PORT=5432
    [gpadmin@mdw ~]$ export OLD_HOST=mdwbak
    [gpadmin@mdw ~]$ export DBNAME=testdb
    [gpadmin@mdw ~]$ cd /data/pg_dump/
    [gpadmin@mdw pg_dump]$ pg_dumpall -p $OLD_PORT -h $OLD_HOST -s -g --resource-queues -f $DBNAME.global.ddl
    [gpadmin@mdw pg_dump]$ pg_dump -p $OLD_PORT -h $OLD_HOST -s testdb -f $DBNAME.ddl
    [gpadmin@mdw pg_dump]$ ls
    testdb.ddl testdb.global.ddl

    使用psql远程恢复DDL数据到备机mdwbak

    [gpadmin@mdw ~]$ psql -h mdwbak -p 5432 -d postgres -f testdb_global.ddl
    [gpadmin@mdw ~]$ psql -h mdwbak -p 5432 -d postgres -f testdb.ddl

    3.4 使用 gpcopy 将主机mdw数据同步到备机 mdwbak

    并行数量取决于内存资源限制,此环境服务器32G内存资源,使用60个并发传输数据,如果服务器资源大于64G,可以使用初始化100个并发做同步,如果出现无法分配内存资源,按照初始化并发数乘以80%的方式配置并发数。如,100*80%=80,如果还无法分配内存资源,那么以此迭代,即80*80%=64个。

    [gpadmin@mdw ~]$ time gpcopy -d testdb -D testdb --dest-host mdwbak --dest-port 5432 --dest-user gpadmin --truncate --source-host mdw --source-port 5432 --source-user gpadmin --jobs 60
    .....忽略部分.....

    20210411:03:37:58 gpcopy:gpadmin:mdw:029561-[INFO]:-[testdb] Finished copying database "Progress: (1/1) DBs, (2000/2000) tables done"
    20210411:03:37:58 gpcopy:gpadmin:mdw:029561-[INFO]:-------------------------------------------------
    20210411:03:37:58 gpcopy:gpadmin:mdw:029561-[INFO]:-Total elapsed time: 30.438132557s
    20210411:03:37:58 gpcopy:gpadmin:mdw:029561-[INFO]:-Total transferred data 722.7MB, transfer rate 250.1GB/h
    20210411:03:37:58 gpcopy:gpadmin:mdw:029561-[INFO]:-Copied 1 databases
    20210411:03:37:58 gpcopy:gpadmin:mdw:029561-[INFO]:- Database testdb: successfully copied 2000 tables, skipped 0 tables, failed 0 tables
    20210411:03:37:58 gpcopy:gpadmin:mdw:029561-[INFO]:-Copy completed successfully

    最终结果

    使用2000张表做模拟,每张表数据为10w,同步时间大约为50s

    Speak Your Mind

    *