您的位置:首页 > 其它

Greenplum对新增节点扩展Segments实战

2016-07-21 11:08 561 查看
一、环境信息:
Greenplum版本号:
Greenplum Version: 'postgres (GreenplumDatabase) 4.3.8.2 build 1'

GP扩展Segment之前的环境信息:
9个节点,其中:
1个Master节点
1个Standby Master节点
7个Segment节点,每个Segment上面有两个Primary实例,两个Mirror实例

二、下面开始介绍在现有Greenplum集群上面新增3个节点来部署Segment。
详细步骤如下
1. 将新增的3个节点的主机名和IP地址加入到原有的Greenplum集群的/etc/hosts文件中,同时拷贝到新增的3个节点中
2. 新增的3个节点的环境配置,包括操作系统参数设置(/etc/sysctl.conf),磁盘IO调度方式,磁盘预读大小等
3. 在新增的3个节点中选择一个节点来安装Greenplum软件,当然你也可以从已经存在的Greenplum集群中拷贝过来

举个例子:
这里假定TT-L0023778为新增的其中一台节点的主机名

首先在已经存在的Greenplum集群的一个节点执行:
scp -r /usr/local/greenplum-db-4.3.8.2 root@TT-L0023778:/usr/local/

然后在TT-L0023778上面创建软链接:
ln -s greenplum-db-4.3.8.2 greenplum-db

最后在TT-L0023778节点上面执行如下操作,将自动部署新增的3个节点,包括新增用户,创建信任关系,拷贝软件包操作等(这个操作和当初第一次安装Greenplum集群环境一样):
注:newhosts文件内容为新增的3个节点的主机名
source /usr/local/greenplum-db/greenplum_path.sh
gpseginstall -f newhosts -u gpadmin -p xxxxxx

这样新增的3个节点就部署好Greenplum软件,创建gpadmin用户,以及建立之间的信任关系了

4. 已经存在的Greenplum集群环境和新增3个节点之间交换ssh key,即创建整个新Greenplum集群环境的信任关系
注:existhosts已经存在的主机名列表(每行一个主机名)
newhosts新增3个节点的主机名列表(每行一个主机名)
gpssh-exkeys -e existhosts -x newhosts
5. 规划新增3个节点的Segment的数据目录,最好保持和原Greenplum集群一致
6. 使用gpcheck检查
gpcheck -f newhosts
7. 使用gpcheckperf检查操作系统的磁盘读写,网络带宽等等
gpcheckperf -f newhosts -d /data1 -d /data2 -r d

三、初始化Segment并加入集群
使用gpexpand产生配置文件,当前如果你熟悉格式的话,也可以自己配置
执行如下命令,按照提示一步一步来:
gpexpand -f newhosts
最后会产生一个配置文件,比如:
gpexpand_inputfile_20160718_111125
内容为:
TT-L0088844:TT-L0088844:40000:/data1/primary/gpseg28:59:28:p:41000
TT-L0088845:TT-L0088845:50000:/data2/mirror/gpseg28:75:28:m:51000
TT-L0088844:TT-L0088844:40001:/data1/primary/gpseg29:60:29:p:41001
TT-L0088845:TT-L0088845:50001:/data2/mirror/gpseg29:76:29:m:51001
TT-L0088844:TT-L0088844:40002:/data2/primary/gpseg30:61:30:p:41002
TT-L0088845:TT-L0088845:50002:/data1/mirror/gpseg30:77:30:m:51002
TT-L0088844:TT-L0088844:40003:/data2/primary/gpseg31:62:31:p:41003
TT-L0088845:TT-L0088845:50003:/data1/mirror/gpseg31:78:31:m:51003
TT-L0088845:TT-L0088845:40000:/data1/primary/gpseg32:63:32:p:41000
TT-L0088846:TT-L0088846:50000:/data2/mirror/gpseg32:79:32:m:51000
TT-L0088845:TT-L0088845:40001:/data1/primary/gpseg33:64:33:p:41001
TT-L0088846:TT-L0088846:50001:/data2/mirror/gpseg33:80:33:m:51001
TT-L0088845:TT-L0088845:40002:/data2/primary/gpseg34:65:34:p:41002
TT-L0088846:TT-L0088846:50002:/data1/mirror/gpseg34:81:34:m:51002
TT-L0088845:TT-L0088845:40003:/data2/primary/gpseg35:66:35:p:41003
TT-L0088846:TT-L0088846:50003:/data1/mirror/gpseg35:82:35:m:51003
TT-L0088846:TT-L0088846:40000:/data1/primary/gpseg36:67:36:p:41000
TT-L0088844:TT-L0088844:50000:/data2/mirror/gpseg36:71:36:m:51000
TT-L0088846:TT-L0088846:40001:/data1/primary/gpseg37:68:37:p:41001
TT-L0088844:TT-L0088844:50001:/data2/mirror/gpseg37:72:37:m:51001
TT-L0088846:TT-L0088846:40002:/data2/primary/gpseg38:69:38:p:41002
TT-L0088844:TT-L0088844:50002:/data1/mirror/gpseg38:73:38:m:51002
TT-L0088846:TT-L0088846:40003:/data2/primary/gpseg39:70:39:p:41003
TT-L0088844:TT-L0088844:50003:/data1/mirror/gpseg39: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的端口)。

下面开始新增3个节点的Segment并加入Master中:
注:zhangyun_db为我的数据库名称
gpexpand -i gpexpand_inputfile_20160718_111125 -D zhangyun_db

如果遇到扩展失败了,执行回滚操作:
gpstart -m(或者gpstart -R)
gpexpand -r -D zhangyun_db
gpstart -a
然后定位问题,问题解决后,再重新执行:
gpexpand -i gpexpand_inputfile_20160718_111125 -D zhangyun_db

如果扩展Segment成功后,就可以通过查询gp_segment_configuration看到新增的节点。

四、重分布表
扩容成功后,执行gpstate -m查看mirror同步情况,当状态为Synchronized时就可以着手进行重分布表了,保持数据分布到新增的Segment节点。

我先看一下gpexpand模式下的几张表内容:
zhangyun_db=# select * from gpexpand.status order by updated;
status | updated
-------------------+----------------------------
SETUP | 2016-07-20 16:43:55.33152
SETUP DONE | 2016-07-20 16:44:28.592569
EXPANSION STARTED | 2016-07-20 17:35:55.635294
EXPANSION STOPPED | 2016-07-20 17:37:48.555813
(4rows)

接下来看一下详细的任务情况,如果需要调整任务的先后顺序,你可以修改rank即可:
由于数据量比较多,暂且列出一条数据。
zhangyun_db=# select dbname,fq_name,distribution_policy_names,rank,status from gpexpand.status_detail where fq_name='zy_schema.panda_detail';
dbname | fq_name |distribution_policy_names | rank | status
-------------+----------------------+---------------------------+------+-------------
zhangyun_db | zy_schema.panda_detail| ino , coide | 2 | NOT STARTED
rank值越小越先执行,如果你不想重分布某张表,可以删除对应表的记录行。

修改rank的值:
UPDATE gpexpand.status_detail SET rank=10 WHERE fq_name = 'zy_schema.t_bg_detail';

查看还有多少表没有重分布:
zhangyun_db=# select * from gpexpand.expansion_progress ;
name | value
----------------------------------------------+-----------------------------------------
Bytes Left | 997520595344
Tables Left | 80
Estimated Expansion Rate |
Estimated Time to Completion |
(4 rows)

下面我们开始执行数据重分布操作:
gpexpand -a -d 1:00:00 -D zhangyun_db -S -t /tmp -v -n 1
下面解释一个命令的参数含义:
-a表示expansion后执行ANALYZE统计表信息
-d表示expansion需要多久完成
-D表示gpexpand模式所在的数据库
-S表示显示简单的进程视图
-t表示指定Segment节点的临时目录,用来存放tar包文件
-n表示并行度

在执行重分布的过程,可以查看gpexpand.expansion_progress表数据,关注一下进度。

zhangyun_db=# select * fromgpexpand.expansion_progress ;
name | value
------------------------------+-----------------------
Bytes Done | 67588854304
Bytes Left | 929931741040
Estimated Expansion Rate | 43.7786103160174 MB/s
Tables Left | 78
Estimated Time to Completion | 05:37:37.655319
Tables Expanded | 2
(6 rows)
重分布结束后,执行清理操作:
清除重分布产生的schema gpexpand
gpexpand -c -D zhangyun_db
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: