一 架构基础环境

主机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