Greenplum的节点扩展及表的重新分布

Greenplum数据库在使用过程中,根据使用情况要进行节点扩展,实际就是增加segment节点。表的重新分布是指,新增segment节点之后,原集群系统中的数据会重新分布到当前集群的所有节点中。

一、节点扩展过程:

1.对所有新增节点的计算机进行优化和更新,和原数据库系统在安装时的操作一样,保证执行扩展时,不会由于缺少组件导致无法执行,这些操作可以参考自动部署脚本中的说明文件。

2.把新增节点的IP信息和原集群节点的IP信息,统一编写到所有节点的hosts文件中,使节点之间可以通过节点名称进行访问。

3.在新增节点上安装一套GP数据库,和初始安装一样,首先在一个节点上进行安装,然后系统会自动通过SSH把文件分布到所有节点上,但此时注意,用来扩展的安装不需要创建MASTER目录,不需要进行节点初始化。

gpseginstall -f newhosts -u gpadmin -p xxxxxx

4.在原集群上执行交换key,让所有节点之间建立信任关系。

gpssh-exkeys -e existhosts -x newhosts

existhosts为现有主机名,newhosts为新增主机名。

5.在新增节点下创建数据目录,这个目录可以不和原数据库的结构一样,但是必须给目录赋予数据库用户的执行权限和相应所属。

6.创建扩展配置文件,在主库的bin目录下执行,注意原库需要运行中,首先编辑一个文本,里面每行是一个新节点的节点名或IP地址。例如文件名为:newhosts

./gpexpand -f newhosts -D 原库名

生成一个名为:gpexpand_inputfile_Date,的文件,其中的内容如下:

node05:192.168.153.170:50003:/data/gp_data:74:39:m:51003

<hostname>:<address>:<port>:<fselocation>:<dbid>:<content>:<preferred_role>:<replication_port>

hostname      主机名

address        IP地址,可以用主机名

port          segment监听端口

fselocation     segment data目录,注意是全路径

dbid          greenplum集群的唯一ID,可以到gp_segment_configuration中获得,必须顺序累加

content        可以到gp_segment_configuration中获得,必须顺序累加

prefered_role   角色(p或m)(primary , mirror)

replication_port 如果没有mirror则不需要(用于replication的端口)。

具体来说,首先GP这个gpexpand文件有个问题,执行时他会问你“How many new primary segments per host do you want to add? (default=0)”,常规理解如果我一个primary目录下有一个gpseg数据目录,那我输入1,以此类推,但其实如果你要生成1个gpseg目录,则要输入0,并且这个时候直接会生成配置文件,目录结构会和原库正在运行的数据库的目录完全一致,如果输入了1,则预示primary下有2个gpseg数据目录,则后面他会问你这个primary和mirror目录在哪儿,这里只输入一次,但生成文件的时候有两部分,一部分是和原库完全相同的目录结构,另一部分是刚刚输入了新位置的primary和mirror,显然自动生成的配置文件只有在选择primary segments为0的时候是最直接最不用人为干预的。

所以这个文件我们可以自己生成,具体看一下内容:

node03:node03:40000:/data/gpdata/primary/gpseg2:6:2:p:41000

记录的主要信息来自原库的gp_segment_configuration表,查询可得当前情况:

gpdb_test=# select * from gp_segment_configuration;

 dbid | content | role | preferred_role | mode | status | port  | hostname | address | replication_port

------+---------+------+----------------+------+--------+-------+----------+---------+------------------

    1 |      -1 | p    | p              | s    | u      |  5432 | node01   | node01  |                 

    2 |       0 | p    | p              | s    | u      | 40000 | node01   | node01  |            41000

    3 |       1 | p    | p              | s    | u      | 40000 | node02   | node02  |            41000

    4 |       0 | m    | m              | s    | u      | 50000 | node02   | node02  |            51000

    5 |       1 | m    | m              | s    | u      | 50000 | node01   | node01  |            51000

(5 rows)

 原库在物理分布上,一共使用了两台电脑,首先MASTER和一个PRIMARY在一起,我们不管MASTER节点,只看primary和mirror,dbid和content是比较重要的,首先后续无论增加多少节点,所有的dbid均为递增排序,而content则从这个表最大的1开始增加,一个primary和一个mirror对应为一组,公用一个相同的content,那么新增的content应该就是2,相同一组的primary和mirror均是2,怎讲叫一组呢,这和节点部署方案有关,无论是新装数据库还是扩展数据库,都会选择使用grouped部署还是spread部署,如果选择grouped,则所有mirror节点和他相对应的primary节点都后搓一位,也就是如果primary节点按0-1-2-3排列,则mirror节点则按3-0-1-2排列,grouped允许最少一个primary segment,即一组primary和mirror在同一台物理机器上,而spread分布至少需要两个物理节点,因为他的mirror节点要求顺序分布在当前节点的之后的节点。分布新的content再增加则都是3,而新增的p和m两个节点,dbid各自随原库的dbid增加,6和7。以此我们手写配置文件,若增加两个物理节点,之间彼此存放primary和mirror目录,则按如下方式:

node07:node07:40000:/data/gpdata/primary/gpseg2:6:2:p:41000

node08:node08:50000:/data1/gpdata/mirror/gpseg2:7:2:m:51000

node08:node08:40000:/data/gpdata/primary/gpseg3:8:3:p:41000

node07:node07:50000:/data1/gpdata/mirror/gpseg3:9:3:m:51000
其中我们要注意,文件目录先要进行创建,并且需要给数据库用户相应的权限和所属,gpseg目录会由扩展功能自动创建,但上层目录必须手动添加,也就是数据库用户必须有创建gpseg目录位置的权限。

gpseg目录的编号,和content编号一致,这样整个数据库完成扩展后,所有的gpseg目录没有重复。

端口:同一个节点下,primary和mirror中如果有多个gpseg,则注意节点不要重复即可。

上面的两个节点,4条记录的排列是grouped模式的primary和mirror分布规则,如果是spread分布,则content编号的排列会有不同:

 

如图所示,spread分布时,也是PX和MX为一组,但是一个机器上的primary的对应mirror,会顺序排列在后面逐个节点上,如此图,主机1上p0的m0在主机2上,同时主机1p1的m1后续排列在主机3上,以此类推。

假如我们有4个节点:node06,node07,node08,node09,每个节点上有2个primary和2个mirror,则通过整理得出配置文件如下:

node06:node06:40000:/data/gpdata/primary/gpseg3:6:3:p:41000
node07:node07:50000:/data1/gpdata/mirror/gpseg3:7:3:m:51000
node06:node06:40001:/data/gpdata/primary/gpseg4:8:4:p:41001
node08:node08:50001:/data/gpdata/mirror/gpseg4:9:4:m:51001

node07:node07:40000:/data/gpdata/primary/gpseg5:10:5:p:41000
node08:node08:50000:/data1/gpdata/mirror/gpseg5:11:5:m:51000
node07:node07:40001:/data/gpdata/primary/gpseg6:12:6:p:41001
node09:node09:50001:/data/gpdata/mirror/gpseg6:13:6:m:51001

node08:node08:40000:/data/gpdata/primary/gpseg7:14:7:p:41000
node09:node09:50000:/data1/gpdata/mirror/gpseg7:15:7:m:51000
node08:node08:40001:/data/gpdata/primary/gpseg8:16:8:p:41001
node06:node06:50001:/data/gpdata/mirror/gpseg8:17:8:m:51001

node09:node09:40000:/data/gpdata/primary/gpseg9:18:9:p:41000
node06:node06:50000:/data1/gpdata/mirror/gpseg9:19:9:m:51000
node09:node09:40001:/data/gpdata/primary/gpseg10:20:10:p:41001
node07:node07:50001:/data/gpdata/mirror/gpseg10:21:10:m:51001
根据规则进行分组排列,重新排序dbid和content编号。

7.执行节点插入

gpexpand -i gpexpand_inputfile_20171217_111125 -D greenplum-db_test

8.插入失败,执行回滚。

echo "y"|gpstart -R

./gpexpand --rollback -D gpdb_test

echo "y"|gpstart -a

 

二、表的重新分布

执行扩展后,执行gpstate -m,若节点状态是Synchronized,说明该节点已经完成同步,可以开始执行分布。

gpexpand -a -d 1:00:00 -D greenplum-db_test

-a表示重分布后执行ANALYZE统计表信息

-d表示预计执行时间

-D表示执行的数据库

-S表示显示简单的进程视图

-t表示指定Segment节点的临时目录,用来存放tar包文件

-n表示并行度

重分布结束后,执行清理操作:

gpexpand -c -D greenplum-db_test

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你说我听海绵宝宝派大星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值