1. 原Greenplum集群状态
  2. 1 服务器配置
服务器名称 IP 角色
mdw 10.10.10.170 master + data
sdw1 10.10.10.171 data
sdw2 10.10.10.172 data
smdw 10.10.10.173 standby master+data

1.2 目标配置: 添加两台服务器,做为Data segment。新服务器为:

服务器名称 IP 角色
ext1 10.10.10.174 data
ext2 10.10.10.175 data

注:应至少添加两台服务器,否则无法使用grouped方式扩展。

1.3 原数据库配置:

原集群的一个master节点,一个standby master节点和2个数据节点,每一个数据节点上有4个primary计算节点,4个mirror节点。具体信息如下:

nngp=# select * from gp_segment_configuration order by dbid;
 dbid | content | role | preferred_role | mode | status | port | hostname | address |        datadir        
------+---------+------+----------------+------+--------+------+----------+---------+-----------------------
    1 |      -1 | p    | p              | n    | u      | 5432 | mdw      | mdw     | /data/master/gpseg-1
    2 |       0 | p    | p              | s    | u      | 6000 | mdw      | mdw     | /data/primary/gpseg0
    3 |       1 | p    | p              | s    | u      | 6001 | mdw      | mdw     | /data/primary/gpseg1
    4 |       2 | p    | p              | s    | u      | 6000 | sdw1     | sdw1    | /data/primary/gpseg2
    5 |       3 | p    | p              | s    | u      | 6001 | sdw1     | sdw1    | /data/primary/gpseg3
    6 |       4 | p    | p              | s    | u      | 6000 | sdw2     | sdw2    | /data/primary/gpseg4
    7 |       5 | p    | p              | s    | u      | 6001 | sdw2     | sdw2    | /data/primary/gpseg5
    8 |       6 | p    | p              | s    | u      | 6000 | smdw     | smdw    | /data/primary/gpseg6
    9 |       7 | p    | p              | s    | u      | 6001 | smdw     | smdw    | /data/primary/gpseg7
   10 |       0 | m    | m              | s    | u      | 7000 | sdw1     | sdw1    | /data/mirror/gpseg0
   11 |       1 | m    | m              | s    | u      | 7001 | sdw1     | sdw1    | /data/mirror/gpseg1
   12 |       2 | m    | m              | s    | u      | 7000 | sdw2     | sdw2    | /data/mirror/gpseg2
   13 |       3 | m    | m              | s    | u      | 7001 | sdw2     | sdw2    | /data/mirror/gpseg3
   14 |       4 | m    | m              | s    | u      | 7000 | smdw     | smdw    | /data/mirror/gpseg4
   15 |       5 | m    | m              | s    | u      | 7001 | smdw     | smdw    | /data/mirror/gpseg5
   16 |       6 | m    | m              | s    | u      | 7000 | mdw      | mdw     | /data/mirror/gpseg6
   17 |       7 | m    | m              | s    | u      | 7001 | mdw      | mdw     | /data/mirror/gpseg7
   18 |      -1 | m    | m              | s    | u      | 5432 | smdw     | smdw    | /data/master/gpseg-1
   19 |       8 | p    | p              | s    | u      | 6002 | mdw      | mdw     | /data/primary/gpseg8
   20 |       9 | p    | p              | s    | u      | 6003 | mdw      | mdw     | /data/primary/gpseg9
   21 |      10 | p    | p              | s    | u      | 6002 | sdw1     | sdw1    | /data/primary/gpseg10
   22 |      11 | p    | p              | s    | u      | 6003 | sdw1     | sdw1    | /data/primary/gpseg11
   23 |      12 | p    | p              | s    | u      | 6002 | sdw2     | sdw2    | /data/primary/gpseg12
   24 |      13 | p    | p              | s    | u      | 6003 | sdw2     | sdw2    | /data/primary/gpseg13
   25 |      14 | p    | p              | s    | u      | 6002 | smdw     | smdw    | /data/primary/gpseg14
   26 |      15 | p    | p              | s    | u      | 6003 | smdw     | smdw    | /data/primary/gpseg15
   27 |      14 | m    | m              | s    | u      | 7002 | mdw      | mdw     | /data/mirror/gpseg14
   28 |      15 | m    | m              | s    | u      | 7003 | mdw      | mdw     | /data/mirror/gpseg15
   29 |       8 | m    | m              | s    | u      | 7002 | sdw1     | sdw1    | /data/mirror/gpseg8
   30 |       9 | m    | m              | s    | u      | 7003 | sdw1     | sdw1    | /data/mirror/gpseg9
   31 |      10 | m    | m              | s    | u      | 7002 | sdw2     | sdw2    | /data/mirror/gpseg10
   32 |      11 | m    | m              | s    | u      | 7003 | sdw2     | sdw2    | /data/mirror/gpseg11
   33 |      12 | m    | m              | s    | u      | 7002 | smdw     | smdw    | /data/mirror/gpseg12
   34 |      13 | m    | m              | s    | u      | 7003 | smdw     | smdw    | /data/mirror/gpseg13
(34 rows)
  1. 配置并安装 2.1 所有主机,配置hosts
[root@mdw data]#more /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1    localhost localhost.localdomain localhost6 localhost6.localdomain6
10.10.10.170 mdw
10.10.10.171 sdw1
10.10.10.172 sdw2
10.10.10.173 smdw
10.10.10.174 ext1
10.10.10.175 ext2

2.2 配置ext1, ext2系统参数(略) 2.3 为ext1,ext2建gpadmin用户并授权(略) 2.4 在ext1,ext2上安装greenplum-db软件(略) 2.5 打通免密登录(略) 2.6 修改all_host,供扩容使用

mdw
sdw1
sdw2
smdw
ext1
ext2

2.7 创建扩容参数

[gpadmin@mdw ~]$ gpexpand -f all_host
…………
Would you like to initiate a new System Expansion Yy|Nn (default=N):
>y
…………
What type of mirroring strategy would you like?
spread|grouped (default=grouped):
>
…………
 
How many new primary segments per host do you want to add? (default=0):
>
Generating configuration file...
20220601:15:53:23:003157 gpexpand:mdw:gpadmin-[INFO]:-Generating input file...
Input configuration file was written to 'gpexpand_inputfile_20220601_155323'.
Please review the file and make sure that it is correct then re-run
with: gpexpand -i gpexpand_inputfile_20220601_155323
       
20220601:15:53 23:003157 gpexpand:mdw:gpadmin-[INFO]:-Exiting...

2.8 使用参数扩容:

[gpadmin@mdw ~]$ gpexpand -i gpexpand_inputfile_20220601_155323
20220601 15:53:35 003205 gpexpand:mdw:gpadmin-[INFO]:-local Greenplum Version: 'postgres (Greenplum Database) 6.20.4 build commit:cab494fbdd8bcb0cc7fe3fb7255cb1e343a541cd'
20220601:15:53:35:003205 gpexpand:mdw:gpadmin-[INFO]:-master Greenplum Version: 'PostgreSQL 9.4.26 (Greenplum Database 6.20.4 build commit:cab494fbdd8bcb0cc7fe3fb7255cb1e343a541cd) on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 6.4.0, 64-bit compiled on May 18 2022 21:57:12'
…………
20220601:15:54:07:003205 gpexpand:mdw:gpadmin-[INFO]:-Starting new mirror segment synchronization
20220601:15:54:17:003205 gpexpand:mdw:gpadmin-[INFO]:-************************************************
20220601:15:54:17:003205 gpexpand:mdw:gpadmin-[INFO]:-Initialization of the system expansion complete.
20220601:15:54:17:003205 gpexpand:mdw:gpadmin-[INFO]:-To begin table expansion onto the new segments
20220601:15:54:17:003205 gpexpand:mdw:gpadmin-[INFO]:-rerun gpexpand
20220601:15:54:17:003205 gpexpand:mdw:gpadmin-[INFO]:-************************************************
20220601:15:54:17:003205 gpexpand:mdw:gpadmin-[INFO]:-Exiting...

2.9 完成后检查

nngp=# select * from gp_segment_configuration order by dbid;
dbid | content | role | preferred_role | mode | status | port | hostname | address |    datadir   
------+---------+------+----------------+------+--------+------+----------+---------+-----------------------
  1 |   -1 | p  | p       | n  | u   | 5432 | mdw   | mdw  | /data/master/gpseg-1
  2 |   0 | p  | p       | s  | u   | 6000 | mdw   | mdw  | /data/primary/gpseg0
  3 |   1 | p  | p       | s  | u   | 6001 | mdw   | mdw  | /data/primary/gpseg1
  4 |   2 | p  | p       | s  | u   | 6000 | sdw1  | sdw1  | /data/primary/gpseg2
  5 |   3 | p  | p       | s  | u   | 6001 | sdw1  | sdw1  | /data/primary/gpseg3
  6 |   4 | p  | p       | s  | u   | 6000 | sdw2  | sdw2  | /data/primary/gpseg4
  7 |   5 | p  | p       | s  | u   | 6001 | sdw2  | sdw2  | /data/primary/gpseg5
  8 |   6 | p  | p       | s  | u   | 6000 | smdw  | smdw  | /data/primary/gpseg6
  9 |   7 | p  | p       | s  | u   | 6001 | smdw  | smdw  | /data/primary/gpseg7
 10 |   0 | m  | m       | s  | u   | 7000 | sdw1  | sdw1  | /data/mirror/gpseg0
 11 |   1 | m  | m       | s  | u   | 7001 | sdw1  | sdw1  | /data/mirror/gpseg1
 12 |   2 | m  | m       | s  | u   | 7000 | sdw2  | sdw2  | /data/mirror/gpseg2
 13 |   3 | m  | m       | s  | u   | 7001 | sdw2  | sdw2  | /data/mirror/gpseg3
 14 |   4 | m  | m       | s  | u   | 7000 | smdw  | smdw  | /data/mirror/gpseg4
 15 |   5 | m  | m       | s  | u   | 7001 | smdw  | smdw  | /data/mirror/gpseg5
 16 |   6 | m  | m       | s  | u   | 7000 | mdw   | mdw  | /data/mirror/gpseg6
 17 |   7 | m  | m       | s  | u   | 7001 | mdw   | mdw  | /data/mirror/gpseg7
 18 |   -1 | m  | m       | s  | u   | 5432 | smdw  | smdw  | /data/master/gpseg-1
 19 |   8 | p  | p       | s  | u   | 6002 | mdw   | mdw  | /data/primary/gpseg8
 20 |   9 | p  | p       | s  | u   | 6003 | mdw   | mdw  | /data/primary/gpseg9
 21 |   10 | p  | p       | s  | u   | 6002 | sdw1  | sdw1  | /data/primary/gpseg10
 22 |   11 | p  | p       | s  | u   | 6003 | sdw1  | sdw1  | /data/primary/gpseg11
 23 |   12 | p  | p       | s  | u   | 6002 | sdw2  | sdw2  | /data/primary/gpseg12
 24 |   13 | p  | p       | s  | u   | 6003 | sdw2  | sdw2  | /data/primary/gpseg13
 25 |   14 | p  | p       | s  | u   | 6002 | smdw  | smdw  | /data/primary/gpseg14
 26 |   15 | p  | p       | s  | u   | 6003 | smdw  | smdw  | /data/primary/gpseg15
 27 |   14 | m  | m       | s  | u   | 7002 | mdw   | mdw  | /data/mirror/gpseg14
 28 |   15 | m  | m       | s  | u   | 7003 | mdw   | mdw  | /data/mirror/gpseg15
 29 |   8 | m  | m       | s  | u   | 7002 | sdw1  | sdw1  | /data/mirror/gpseg8
 30 |   9 | m  | m       | s  | u   | 7003 | sdw1  | sdw1  | /data/mirror/gpseg9
 31 |   10 | m  | m       | s  | u   | 7002 | sdw2  | sdw2  | /data/mirror/gpseg10
 32 |   11 | m  | m       | s  | u   | 7003 | sdw2  | sdw2  | /data/mirror/gpseg11
 33 |   12 | m  | m       | s  | u   | 7002 | smdw  | smdw  | /data/mirror/gpseg12
 34 |   13 | m  | m       | s  | u   | 7003 | smdw  | smdw  | /data/mirror/gpseg13
 35 |   16 | p  | p       | s  | u   | 6000 | ext1  | ext1  | /data/primary/gpseg16
 36 |   17 | p  | p       | s  | u   | 6001 | ext1  | ext1  | /data/primary/gpseg17
 37 |   18 | p  | p       | s  | u   | 6002 | ext1  | ext1  | /data/primary/gpseg18
 38 |   19 | p  | p       | s  | u   | 6003 | ext1  | ext1  | /data/primary/gpseg19
 39 |   20 | p  | p       | s  | u   | 6000 | ext2  | ext2  | /data/primary/gpseg20
 40 |   21 | p  | p       | s  | u   | 6001 | ext2  | ext2  | /data/primary/gpseg21
 41 |   22 | p  | p       | s  | u   | 6002 | ext2  | ext2  | /data/primary/gpseg22
 42 |   23 | p  | p       | s  | u   | 6003 | ext2  | ext2  | /data/primary/gpseg23
 43 |   20 | m  | m       | s  | u   | 7000 | ext1  | ext1  | /data/mirror/gpseg20
 44 |   21 | m  | m       | s  | u   | 7001 | ext1  | ext1  | /data/mirror/gpseg21
 45 |   22 | m  | m       | s  | u   | 7002 | ext1  | ext1  | /data/mirror/gpseg22
 46 |   23 | m  | m       | s  | u   | 7003 | ext1  | ext1  | /data/mirror/gpseg23
 47 |   16 | m  | m       | s  | u   | 7000 | ext2  | ext2  | /data/mirror/gpseg16
 48 |   17 | m  | m       | s  | u   | 7001 | ext2  | ext2  | /data/mirror/gpseg17
 49 |   18 | m  | m       | s  | u   | 7002 | ext2  | ext2  | /data/mirror/gpseg18
 50 |   19 | m  | m       | s  | u   | 7003 | ext2  | ext2  | /data/mirror/gpseg19
(50 rows)

2.10 数据重分布

[gpadmin@mdw ~]$ gpexpand -a -d 1:00:00
20220601:15:54:57:003927 gpexpand:mdw:gpadmin-[INFO]:-local Greenplum Version: 'postgres (Greenplum Database) 6.20.4 build commit:cab494fbdd8bcb0cc7fe3fb7255cb1e343a541cd'
20220601:15:54:57:003927 gpexpand:mdw:gpadmin-[INFO]:-master Greenplum Version: 'PostgreSQL 9.4.26 (Greenplum Database 6.20.4 build commit:cab494fbdd8bcb0cc7fe3fb7255cb1e343a541cd) on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 6.4.0, 64-bit compiled on May 18 2022 21:57:12'
20220601:15:54:57:003927 gpexpand:mdw:gpadmin-[INFO]:-Querying gpexpand schema for current expansion state
20220601:15:54:58:003927 gpexpand:mdw:gpadmin-[INFO]:-Expanding nngp.public.t_tmp
20220601:15:55:30:003927 gpexpand:mdw:gpadmin-[INFO]:-Analyzing public.t_tmp
20220601:15:55:30:003927 gpexpand:mdw:gpadmin-[INFO]:-Finished expanding nngp.public.t_tmp
20220601:15:55:30:003927 gpexpand:mdw:gpadmin-[INFO]:-Expanding nngp.public.t
20220601:15:55:44:003927 gpexpand:mdw:gpadmin-[INFO]:-Analyzing public.t
20220601:15:55:44:003927 gpexpand:mdw:gpadmin-[INFO]:-Finished expanding nngp.public.t
20220601:15:55:48:003927 gpexpand:mdw:gpadmin-[INFO]:-EXPANSION COMPLETED SUCCESSFULLY
20220601:15:55:48:003927 gpexpand:mdw:gpadmin-[INFO]:-Exiting...

注:gpexpand -a -d 1:00:00命令中,此次使用的是1小时。生产环境中可能需要更长时间。这一点无需担忧,再执行几次即可。系统在执行时会在数据库中做记录,一次没完成,下次可根据记录再继续。