Greenplum集群扩展

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hmxz2nn/article/details/86319300

在实际应用中,为了放大性能和存储能力,会通过向阵列增加主机来扩展用户的Greenplum系统。
和要求大量停机时间来转储和恢复数据的数据仓库系统不同,扩展一个Greenplum数据库系统是一种最小化停机时间的分阶段处理。在数据被重新分布时,常规和ad hoc负载可以继续并且事务一致性也能被维护。管理员可以安排分布活动以适合正在进行的操作并且可以按需暂停和继续。表可以被排名,这样数据集可以以一种优先序列的方式被重新分布,从而确保关键性的负载能很快从扩展后的能力受益,或者释放所需的磁盘空间来重新分布非常大的表。

集群扩展概述

在扩展过程中,一旦新服务器被安装并且测试,Greenplum数据库扩展处理的软件阶段就开始了。软件阶段被设计为尽量少被打断、事务一致、可靠并且灵活。
1、在为扩展处理初始化新的Segment主机并且准备系统时,会有一段短暂的停机时间。这段停机时间可以被安排在一段低活动量的时期发生,这样可以避免打扰正在进行的业务操作。在初始化处理期间,会执行下列任务:

Greenplum数据库软件已被安装。
在新的Segment主机上创建了数据库和数据库对象。
在Master数据库中创建了一个扩展方案来控制扩展处理。
每一个表的分布策略被改成了DISTRIBUTED RANDOMLY。

2、系统被重启并且应用继续进行。
新的Segment立即可用并且立即参与到新的查询和数据装载中。不过,现有的数据是倾斜的。因为现有数据集中在原有的Segment上,并且必须被重新分布在当前的所有主要Segment上。

因为现在有一种随机分布策略,优化器会创建不依赖于分布键的查询计划。一些查询的效率会不那么好,因为需要更多的数据移动操作符。

3、通过使用扩展控制表作为一个指南,表和分区被重新分布。对于每一个表:
发出一个ALTER TABLE语句把分布策略改回到原始的策略。这会导致一次自动的数据重新分布操作,它会把数据按照原始的分布策略散布到所有的服务器上,包括旧的服务器和新的服务器。

表的状态会在扩展控制表中被更新。

通过将分布键包括在规划中,查询优化器能创建更有效的执行计划。

4、当所有的表都被重新分布完后,扩展也就完成了。

重新分布数据是一个长时间运行的处理,它会创建大量的网络和磁盘活动。可能需要数天时间来重新分布某些非常大型的数据库。为了最小化这些活动对业务操作的影响,系统管理员可以随意或者根据一个预定好的计划暂停并且继续扩展活动。数据集也可以被定义优先级,这样关键的应用可以从扩展中首先获益。

4次使用gpexpand工具

1、要创建一个扩展输入文件:

gpexpand -f hosts_file

2、要初始化Segment并且创建扩展方案:

扫描二维码关注公众号,回复: 5302680 查看本文章
gpexpand -i input_file -D database_name

gpexpand会创建一个数据目录、从现有的数据库复制表到新的Segment上并且为扩展方案中的每个表捕捉元数据用于状态跟踪。在这个处理完成后,扩展操作会被提交并且不可撤回。

3、要重新分布表:

gpexpand -d duration

在初始化时, gpexpand在所有现有数据库中的表上取消哈希分布策略(分区表的父表除外)并且将所有的表的分布策略设置为随机分布。
要完成系统扩展,必须运行gpexpand在新增加的Segment之间重新分布数据表。

4、要移除扩展方案:

gpexpand -c

这些后面会详细介绍。

规划Greenplum系统扩展

包括:
1、系统扩展前的检查
2、规划新的硬件平台
3、规划新Segment初始化
4、规划表的重新分布
详细可参考:https://gp-docs-cn.github.io/docs/admin_guide/expand/expand-planning.html

增加新的主机节点

将新的主机节点加入greenplum集群,主要包括以下步骤:
1、将新增节点的主机名和IP地址加入到原有的Greenplum集群的/etc/hosts文件中,同时拷贝到新增的节点中。

2、新增的节点的环境配置,包括操作系统参数设置(/etc/sysctl.conf),磁盘IO调度方式,磁盘预读大小等。
可参考集群中原有节点的参数进行设置。

3、增加新结点到受信主机环境。为了管理便利,第一次作为root执行该处理,然后为管理工具作为用户gpadmin再执行一次。
root用户下执行交换ssh密钥:

 gpssh-exkeys -e /home/gpadmin/existing_hosts_file -x /home/gpadmin/new_hosts_file

创建gpadmin用户并设置密码:

gpssh -f new_hosts_file '/usr/sbin/useradd gpadmin -d /home/gpadmin -s /bin/bash'

gpssh -f new_hosts_file 'echo gpadmin_password | passwd gpadmin --stdin'

使用gpadmin用户执行交换ssh密钥:

gpssh-exkeys -e /home/gpadmin/existing_hosts_file -x /home/gpadmin/new_hosts_file

4、在新增的节点上安装Greenplum软件,当然你也可以从已经存在的Greenplum集群中拷贝过来。
一般在/usr/local/目录下。
注:newhosts文件内容为新增的3个节点的主机名

source /usr/local/greenplum-db/greenplum_path.sh

gpseginstall -f newhosts -u gpadmin

5、验证OS设置。使用gpcheck工具来验证用户的阵列中所有的新主机都有正确的OS设置以运行Greenplum数据库软件。

gpcheck -f new_hosts_file

6、确认磁盘I/O和内存带宽。使用gpcheckperf工具来测试磁盘I/O和内存带宽。可事先创建好目录data1和data2,并将其所属用户改为gpadmin。

gpcheckperf -f new_hosts_file -d /data1 -d /data2 -v 
初始化新的segment

有以下步骤:
1、为系统扩展创建一个输入文件。
推荐使用在交互模式中创建一个输入文件方式,在用户运行gpexpand在交互模式中创建一个输入文件之前,确保用户了解:

新主机的数量(或者一个主机文件)
新主机名(或者一个主机文件)
现有主机中使用的镜像策略(如果有)
每个主机要增加的Segment数量(如果有)

该工具会基于这些信息、dbid、content ID以及gp_segment_configuration中存储的数据目录值自动生成一个输入文件,并将该文件保存在当前目录中。
运行gpexpand -f /home/gpadmin/new_hosts_file,在交互中按照提示输入。需注意:
1)输入要增加的主要Segment的数量(如果有)。默认情况下,新主机会被用与现有主机相同数量的主要Segment初始化。输入一个大于零的数字可以为每个主机增加Segment数量。用户输入的数字将是在所有主机上初始化的额外Segment的数量。例如,如果现有主机当前每个有两个Segment,输入一个值 2会在现有主机上多初始化两个Segment,而在新主机上会初始化四个Segment。
2)如果用户在增加新的主要Segment,为这些新的Segment输入新的主要数据目录的根目录。不要指定真实的数据目录名称,目录会由gpexpand 基于现有数据目录名称自动创建。
例如,如果用户的现有数据目录像下面这样:

/gpdata/primary/gp0
/gpdata/primary/gp1

那么输入下面的内容(每一个提示输入一个)来指定两个新的主要Segment的数据目录:

/gpdata/primary
/gpdata/primary

当初始化运行时,该工具会在/gpdata/primary下面创建新目录 gp2以及gp3。
mirror与此相同。

在用户已经输入所有要求的信息后,该工具会生成一个输入文件并且把它保存在当前目录中。例如:
gpexpand_inputfile_yyyymmdd_145134

2、运行gpexpand初始化新Segment
运行gpexpand工具,用-i指定输入文件。可以选择使用-D指定在哪个数据库中创建扩展方案。例如:

gpexpand -i input_file -D database1

该工具会检测是否存在一个用于该Greenplum数据库系统的扩展方案。如果存在一个方案,在用户开始一次新的扩展操作前使用gpexpand -c移除它。
当新的Segment被初始化并且扩展方案被创建时,该工具会打印一个成功消息并且退出。

3、回滚一个失败的扩展设置
只有当一次扩展操作失败时,用户才能回滚它。

如果扩展在初始化步骤失败,而数据库没有启动,用户必须首先通过运行gpstart -m命令以master-only模式重启数据库。

用下列命令回滚失败的扩展,指定包含扩展方案的数据库:

gpexpand --rollback -D database_name

最后再重启数据库:gpstart -a

重分布表

重新分布表让现有数据在新扩展后的集群上得以平衡。

在创建了一个扩展方案后,用户可以重新让Greenplum上线并且用gpexpand在整个阵列中重新分布表。应该在使用较少的时段来运行这项任务,这样该工具用到的CPU使用和表锁对操作的影响会最小。还要对表进行排名,先对最大或者最重要的表进行重新分布。

当表重新分布正在进行中时,任何新创建的表会按照普通操作那样被分布在所有的Segment上。查询也能访问所有的Segment,即使相关的数据还没有被完全分布在新Segment上的表中也行。正在被重新分布的表或者分区会被锁定并且对于读或者写操作不可用。当其重新分布完成后,常规操作才会继续。

为重新分布对表排名

对于大型的系统,用户可以控制表重新分布的顺序。在扩展方案中调整表的rank值就能让重度使用的表优先并且最小化性能影响。可用的空闲磁盘空间可能会影响表的排名。

要通过在gpexpand.status_detail中更新rank值来为重新分布对表排名,用psql或者另一个被支持的客户端连接到Greenplum数据库。用这样的命令更新gpexpand.status_detail:

=> UPDATE gpexpand.status_detail SET rank=10;

=> UPDATE gpexpand.status_detail SET rank=1 WHERE fq_name = 'public.lineitem';
=> UPDATE gpexpand.status_detail SET rank=2 WHERE fq_name = 'public.orders';

这些命令把所有表的优先级降低到10,然后把排名1分配给lineitem并且把排名2分配给。 orders。当表的重新分布开始时,lineitem会首先被重新分布,接着是orders和 gpexpand.status_detail中所有的其他表。要从重新分布中排除一个表,将它从gpexpand.status_detail中移除。

用gpexpand重新分布表

作为将要运行用户的Greenplum数据库系统的用户(例如gpadmin)登入到Master主机。
运行gpexpand工具。用户可以使用-d或者-e选项来定义扩展会话时限。例如,要运行该工具最多60个连续的小时:

$ gpexpand -d 60:00:00 -D database_name

该工具会重新分布表,直到方案中的最后一个表完成或者它达到了指定的持续时间或者结束时间。当一个会话开始并且结束时,gpexpand会在gpexpand.status中更新状态和时间。

监控表的重新分布

用户可以在表重新分布处理的过程中查询扩展方案。视图gpexpand.expansion_progress提供了一个当前进度摘要,包括估计的表重新分布率以及估计的完成时间。用户可以查询表gpexpand.status_detail来得到每个表的状态信息。

1、查看扩展状态
在第一个表完成重新分布后,gpexpand.expansion_progress会计算其估计值并且基于所有表的重新分布比率刷新它们。每次用户用gpexpand开始一次表重新分布会话时计算都会重新开始。要监控进度,可以用下面这样的命令查询gpexpand.expansion_progress:

=# SELECT * FROM gpexpand.expansion_progress;
             name             |         value
------------------------------+-----------------------
 Bytes Left                   | 5534842880
 Bytes Done                   | 142475264
 Estimated Expansion Rate     | 680.75667095996092 MB/s
 Estimated Time to Completion | 00:01:01.008047
 Tables Expanded              | 4
 Tables Left                  | 4
(6 rows)

2、查看表状态
表gpexpand.status_detail存储着方案中每一个表有关的状态、最近更新时间和更多情况。要查看一个表的状态,可以查询gpexpand.status_detail:

=> SELECT status, expansion_started, source_bytes FROM
gpexpand.status_detail WHERE fq_name = 'public.sales';
  status   |     expansion_started      | source_bytes
-----------+----------------------------+--------------
 COMPLETED | 2017-02-20 10:54:10.043869 |   4929748992
(1 row)
移除扩展方案

要在扩展Greenplum集群后进行清理,需要移除扩展方案。

在扩展操作完成并且验证后,用户可以安全地移除扩展方案。为了在一个Greenplum系统上运行另一次扩展操作,首先要移除现有的扩展方案。
执行命令:

gpexpand -c

参考:
1.https://gp-docs-cn.github.io/docs/admin_guide/expand/expand-main.html
2.https://blog.csdn.net/jiangshouzhuang/article/details/51980756

猜你喜欢

转载自blog.csdn.net/hmxz2nn/article/details/86319300
今日推荐