gpexpand分析

2023-11-03

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~

本文由maxluo发表于云+社区专栏

一、 gp扩容步骤

1.1 初始化机器

目标:新增加的机器需要初始化和已有机器环境一样。

具体包括不限于以下内容: 创建用户名,设置环境变量,创建数据目录,安装greenplum软件包,解压目录路径。

1.2 修改host

集群所有机器(包括已有机器和新扩容机器)的/etc/hosts文件中,增加新扩容机器的host配置。

1.3 修改GP配置文件

具体修改三个文件。

其中allhostlist,seghostlist文件中添加新增机器的host。

新增文件host_expand,并把新增机器的host写入该文件中。

1.4 打通ssh互信登录

执行命令:

/home/gpadmincloud/install/bin/gpssh-exkeys  -f  /home/gpadmincloud/deploy/host_expand

**备注:**host_expand只需是新增加机器的host,而非全部机器HOST。这样也可以实现已有其他机器到新增机器的无密登录。

1.5 生成扩容配置

a) 创建数据库myexpand:执行命令create database myexpand;

作用: 用于存储扩容进度等信息。

b) 执行命令,生成配置。gpexpand -f host_expand -D myexpand

在命令执行过程中,会交互式的让用户确认相关信息。其中一步是确定扩容节点的分布方式。

提示如下:

What type of mirroring strategy would you like?

 spread|grouped (default=grouped):

需要注意的是,这里的分布方式和集群初始化时选择的方式不一定要求一致。也就是说以前机器如果是spread分布,新增加节点既可以是grouped,也可以是spread分布。

对于不同模式,新增机器数量限制如下:

Grouped Mirror: 则新增机器数量必须大于等于2,确保新增加的primary segment节点和mirror segment节点不在同一台机器上。

Spread Mirror: 新增的主机数至少要比每台主机上primary Segment的数量大于1,这样才能确保Mirror可以平均分配在其他的Segment节点上。例如:如果现在单机primary segment数量为3,则新增机器必须大于等于4。

c) 配置文件内容如下:

sdw4-xx-41ma83j3:sdw4-xx-41ma83j3:40000:/data/greenplum/primary/gpseg12:27:12:p:41000

sdw5-xx-41ma83j3:sdw5-xx-41ma83j3:50000:/data/greenplum/mirror/gpseg12:51:12:m:51000

sdw4-xx-41ma83j3:sdw4-xx-41ma83j3:40001:/data/greenplum/primary/gpseg13:28:13:p:41001

sdw6-xx-41ma83j3:sdw6-xx-41ma83j3:50000:/data/greenplum/mirror/gpseg13:55:13:m:51000

sdw4-xx-41ma83j3:sdw4-xx-41ma83j3:40002:/data/greenplum/primary/gpseg14:29:14:p:41002

sdw7-xx-41ma83j3:sdw7-xx-41ma83j3:50000:/data/greenplum/mirror/gpseg14:59:14:m:51000

sdw4-xx-41ma83j3:sdw4-xx-41ma83j3:40003:/data/greenplum/primary/gpseg15:30:15:p:41003

sdw8-xx-41ma83j3:sdw8-xx-41ma83j3:50000:/data/greenplum/mirror/gpseg15:63:15:m:51000

sdw5-xx-41ma83j3:sdw5-xx-41ma83j3:40000:/data/greenplum/primary/gpseg16:31:16:p:41000

sdw6-xx-41ma83j3:sdw6-xx-41ma83j3:50001:/data/greenplum/mirror/gpseg16:56:16:m:51001

sdw5-xx-41ma83j3:sdw5-xx-41ma83j3:40001:/data/greenplum/primary/gpseg17:32:17:p:41001

sdw7-xx-41ma83j3:sdw7-xx-41ma83j3:50001:/data/greenplum/mirror/gpseg17:60:17:m:51001

sdw5-xx-41ma83j3:sdw5-xx-41ma83j3:40002:/data/greenplum/primary/gpseg18:33:18:p:41002

sdw8-xx-41ma83j3:sdw8-xx-41ma83j3:50001:/data/greenplum/mirror/gpseg18:64:18:m:51001

sdw5-xx-41ma83j3:sdw5-xx-41ma83j3:40003:/data/greenplum/primary/gpseg19:34:19:p:41003

sdw4-xx-41ma83j3:sdw4-xx-41ma83j3:50000:/data/greenplum/mirror/gpseg19:47:19:m:51000

sdw6-xx-41ma83j3:sdw6-xx-41ma83j3:40000:/data/greenplum/primary/gpseg20:35:20:p:41000

sdw7-xx-41ma83j3:sdw7-xx-41ma83j3:50002:/data/greenplum/mirror/gpseg20:61:20:m:51002

sdw6-xx-41ma83j3:sdw6-xx-41ma83j3:40001:/data/greenplum/primary/gpseg21:36:21:p:41001

sdw8-xx-41ma83j3:sdw8-xx-41ma83j3:50002:/data/greenplum/mirror/gpseg21:65:21:m:51002

sdw6-xx-41ma83j3:sdw6-xx-41ma83j3:40002:/data/greenplum/primary/gpseg22:37:22:p:41002

sdw4-xx-41ma83j3:sdw4-xx-41ma83j3:50001:/data/greenplum/mirror/gpseg22:48:22:m:51001

sdw6-xx-41ma83j3:sdw6-xx-41ma83j3:40003:/data/greenplum/primary/gpseg23:38:23:p:41003

sdw5-xx-41ma83j3:sdw5-xx-41ma83j3:50001:/data/greenplum/mirror/gpseg23:52:23:m:51001

sdw7-xx-41ma83j3:sdw7-xx-41ma83j3:40000:/data/greenplum/primary/gpseg24:39:24:p:41000

sdw8-xx-41ma83j3:sdw8-xx-41ma83j3:50003:/data/greenplum/mirror/gpseg24:66:24:m:51003

sdw7-xx-41ma83j3:sdw7-xx-41ma83j3:40001:/data/greenplum/primary/gpseg25:40:25:p:41001

sdw4-xx-41ma83j3:sdw4-xx-41ma83j3:50002:/data/greenplum/mirror/gpseg25:49:25:m:51002

sdw7-xx-41ma83j3:sdw7-xx-41ma83j3:40002:/data/greenplum/primary/gpseg26:41:26:p:41002

sdw5-xx-41ma83j3:sdw5-xx-41ma83j3:50002:/data/greenplum/mirror/gpseg26:53:26:m:51002

sdw7-xx-41ma83j3:sdw7-xx-41ma83j3:40003:/data/greenplum/primary/gpseg27:42:27:p:41003

sdw6-xx-41ma83j3:sdw6-xx-41ma83j3:50002:/data/greenplum/mirror/gpseg27:57:27:m:51002

sdw8-xx-41ma83j3:sdw8-xx-41ma83j3:40000:/data/greenplum/primary/gpseg28:43:28:p:41000

sdw4-xx-41ma83j3:sdw4-xx-41ma83j3:50003:/data/greenplum/mirror/gpseg28:50:28:m:51003

sdw8-xx-41ma83j3:sdw8-xx-41ma83j3:40001:/data/greenplum/primary/gpseg29:44:29:p:41001

sdw5-xx-41ma83j3:sdw5-xx-41ma83j3:50003:/data/greenplum/mirror/gpseg29:54:29:m:51003

sdw8-xx-41ma83j3:sdw8-xx-41ma83j3:40002:/data/greenplum/primary/gpseg30:45:30:p:41002

sdw6-xx-41ma83j3:sdw6-xx-41ma83j3:50003:/data/greenplum/mirror/gpseg30:58:30:m:51003

sdw8-xx-41ma83j3:sdw8-xx-41ma83j3:40003:/data/greenplum/primary/gpseg31:46:31:p:41003

sdw7-xx-41ma83j3:sdw7-xx-41ma83j3:50003:/data/greenplum/mirror/gpseg31:62:31:m:51003

1.6 初始化sgment并加入集群

1.6.1 执行命令
gpexpand -i gpexpand_inputfile_20180815_210146 -D myexpand

gpexpand_inputfile_20180815_210146 文件为在步骤1.5中生成的扩容配置文件。
1.6.2 异常处理

这里经常会出现问题,需要输入gpexpand -r -D gpexpand让你回滚扩容操作,但是此时数据库关闭了,并且不能直接用gpstart启动。

因此先执行gpstart –R 启动数据库。再执行gpexpand -r -D myexpand命令进行回滚操作。

回滚成功后,再按照1.6.1步骤,进行segment初始化。

1.7 重分布表

执行命令

gpexpand -D myexpand

该命令会对所有的数据库和表进行重分布。按照对应表的分布键,把数据打散到各个节点,包括新增加的机器。从而实现了扩容操作。

1.8 临时数据清理

执行命令:

gpexpand -c -D myexpand

该命令会对步骤1.6中在myexpand数据库中生成的schema进行清理。

二、 扩容原理分析

gpexpand命令对集群扩容的原理:首先把新增HOST节点添加到master元表。并按照步骤1.5生成的配置对各机器segment初始化和启动操作。

最后执行alter table操作。

ALTER TABLE ONLY  xx   SET WITH(REORGANIZE=TRUE) DISTRIBUTED by(xx )。

该操作会导致greenplum对表数据进行重分布。从而实现把原集群数据打散分布到新集群中。

2.1 初始化过程分析

在步骤1.6中,执行gpexpand -i gpexpand_inputfile_20180815_210146 -D myexpand对扩容节点初始化。

完成事情有如下三步:

1, 把新增加的节点加入到master元素表中。可以通过select * from gp_segment_configuration order by dbid asc;查询到新节点已经被加入到集群中,但新增加节点暂时没有数据。

2, 在myexpand数据库中,创建名为gpexpand的schema,这个schema用于保存扩展的所有信息,例如每个表重分布的进度等详细信息。

Status表用于记录扩容进度信息。

 myexpand=# select  * from gpexpand.status;

​      status       |          updated           

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

SETUP             | 2018-09-18 11:17:29.807489

SETUP DONE        | 2018-09-18 11:17:35.294699

EXPANSION STARTED | 2018-09-18 11:18:02.816792

expansion_progress记录数据库表重分布速度等信息。

myexpand=# select  * from gpexpand.expansion_progress;

             name             |         value         

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

Bytes Done                   | 53412116448

Estimated Time to Completion | 00:16:55.504644

Tables In Progress           | 1

Bytes Left                   | 59420929408

Bytes In Progress            | 142668912

Tables Left                  | 229

Tables Expanded              | 498

Estimated Expansion Rate     | 55.9369898011315 MB/s

status_detail表记录各个表的重分布过程以及进度。

myexpand=# select  distinct(status) from gpexpand.status_detail where dbname='gpadmincloud';

   status    

\-------------

COMPLETED

NOT STARTED

IN PROGRESS

3, 将数据库中的所有表全部修改为随机分布(DISTRIBUTED RANDOMLY),这个状态会在步骤1.7中采用alter方式修改回来。同时会把以前的分布键保存在gpexpand.status_detail中,供后面数据重分布恢复分布键。

修改SQL为:UPDATE gp_distribution_policy SET attrnums = NULL ,通过对数据字典表gp_distribution_policy修改分布键。这种方式避免了数据的重分布。

2.2 数据重分布

在步骤1.7中,命令后gpexpand -D myexpand。会对每一张表执行命令。

ALTER TABLE ONLY t1 SET WITH(REORGANIZE=TRUE) DISTRIBUTED byxxx)。把初始化过程中修改为随机分布的表进行还原。Alter命令会对所有数据重分布。从而实现历史数据分散到所有节点(包括新扩容节点)。

三、 扩容性能分析

3.1 原始数据

3.1.1 100G数据

机器配置:

Segment配置:4 核 16 GB 160GB SSD云盘。

Master规格 扩容目标 耗时(分钟)
2核 8GB 3->6 19
3.1.2 300GB数据

机器配置:

Segment配置:4 核 16 GB 160G SSD云盘。

Master规格 扩容目标 耗时(分钟)
4 核 8 GB 5->8 30
4 核 16 GB 8->12 23
4 核 16 GB 12->16 18.5
3.1.3 600GB数据

机器配置:

Segment配置:8 核 32 GB 320G SSD云盘。

Master规格 扩容目标 耗时(分钟)
4 核 8 GB 10->16 36
4 核 16 GB 16->24 22.5
4 核 16 GB 24->32 17.3
3.1.4 1TB数据

机器配置:

Segment配置:8 核 32 GB 640G SSD云盘。

Master规格 扩容目标 耗时
4 核 8 GB 20->40 31.7
4 核 16 GB 40->60 20.5

3.2 结论

1,同样的数据量,节点越多,扩容速度越快。

2,同样的节点数,扩容速度基本上和数据量成反比。

四、 常见问题小结

1, 执行命令gpexpand,出现Cannot allocate memory 。

原因: master节点内存不足。

解决办法:升级master节点内存数量,或者替换master机器。

最主要是提前规划好master节点规格,包括CPU和内存。

2, 执行扩容过程中,已有链接是否会断开?

答:会。

原因:在步骤1.6过程中,需要重启Greeplum集群。所以已有链接会出现断开情况。

解决办法:业务方重新链接即可。

3,重分布过程,数据库是否可用,只读 or 可读可写?

答:可用,可读可写。

原因:

gpexpand是采用表重分布方式来对集群扩容。对于已经重分布的表,则新写入的数据则根据分布键,按规则放置在不同节点。

如果是对还未重分布的表进行写入数据,则这些新写入的数据,按照随机分布方式,分布到各个节点(也包括新增加的机器节点)。最后在执行alter 操作修改分布键时,数据重分布到所有其他节点。

相关阅读
【每日课程推荐】机器学习实战!快速入门在线广告业务及CTR相应知识

此文已由作者授权腾讯云+社区发布,更多原文请点击

搜索关注公众号「云加社区」,第一时间获取技术干货,关注后回复1024 送你一份技术课程大礼包!

海量技术实践经验,尽在云加社区

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

gpexpand分析 的相关文章

随机推荐

  • qt 5.12.1 下载安装详细教程

    前言 Qt是一个跨平台的C 图形界面应用程序框架 它提供给开发者建立图形用户界面所需的功能 广泛用于开发GUI程序 也可用于开发非GUI程序 Qt很容易扩展 并且允许真正地组件编程 基本上 Qt同X Window上的Motif Openwi
  • 几种字符串补“0”(或其它字符)的方式

    几种字符串补 0 或其它字符 的方式 好记性不如烂笔头 先记下 呵呵 方式一 这个最多程序员用的 也是最普通的方式 int a 656 string b a if b length lt 6 for int i 0 i lt 6 b len
  • 参数在信号-槽参数用值传递还是引用传递

    结论 以下表格总结了我们的结果 例如第一行 如果程序传递信号的参数为引用到槽 那么在直接连接则不发生复制 在队列连接则发生一次复制 Signal Slot Direct Queued const Copy const Copy 0 1 co
  • Matlab找出矩阵每一行的最大值及其位置

    dis max arr 2 dis array zeros M N for i 1 size dis hang max dis i 1 c find edtImage i hang max dis array i c 1 end figur
  • 移植NTP时间同步工具到arm linux平台创建定时任务

    移植NTP时间同步工具到arm linux平台创建定时任务 下载源码 解压并编译 一个脚本进行编译 上传文件至开发板 运行 创建开机启动项 注意在windows上编写的文件可能需要执行以下命令 ntp服务器 下载源码 wget c http
  • (ubuntu)linux和mac安装Miracl密码库

    只要你按照以下步骤操作 可以得到Miracl密码库的静态编译文件 a 步骤一 官网仓库 注意 是下载ZIP 而不是直接clone下来 不然的话是绝对不行的 步骤二 unzip j aa L MIRACL master zip 执行命令 终端
  • spring中的动态代理

    两种代理原理 jdk动态代理是利用反射机制生成一个实现代理接口的匿名类 在调用具体方法前调用InvokeHandler来处理 cglib动态代理是利用asm开源包 对代理对象类的class文件加载进来 通过修改其字节码生成子类来处理 spr
  • [Android常见问题] 自定义授权界面

    自定义授权界面 http bbs mob com thread 278 1 1 html 出处 http bbs mob com 本帖最后由 wolf 于 2016 5 6 10 30 编辑 自定义授权界面 1 准备工作 参考文档 在你的项
  • Couldn‘t find meta-data for provider with authority com.wust.camerademo

    报错信息 Couldn t find meta data for provider with authority com wust camerademo 报错原因 AndroidManifest xml 清单文件中未注册 provider
  • ae渲染出现错误是什么问题_After Effects错误:写入文件.....时发生渲染错误.输出模块失败.文件可能已损坏。(-1610153464)...

    我来回答一下 你在电脑里安装了其他下载的aex文件格式的插件 你只要把你这些插件删除掉 问题就可以解决 安装插件不正确 或者有相同的插件也出现提示框 其实 这个提示不重要 你正常开启AE以后 正常使用软件 只是 安装错误的插件 使用起来没有
  • 正负样本不平衡处理方法总结

    1 Bootstrapping hard negative mining 最原始的一种方法 主要使用在传统的机器学习方法中 比如 训练随机森林 对于每一个树就是采样booststraping方法采样 也算是随机森林的其中一个随机性表现 再比
  • java 获取当前时间所在月份的每周日期区间

    获取当前时间所在月份的每周日期区间 每周的起始日是周一 结束日期是周日 例子 假设当前时间是2020 03 04 那么这个月跨度有6周 第一周 2020 03 01 2020 03 01 第二周 2020 03 02 2020 03 08
  • 个人用户如何搭建一个全面的WEB服务器(中)

    第四 建立Win Media在线影视 按照第一步中图三 图四和图五的走法 只不过在图五中选择 流式媒体服务器 点击确定 这样系统将会自动在你的WEB服务器下创建一个Win Media流式媒体服务器站点 接下来就是如何管理这个服务器以及制作流
  • Pytorch+LSTM 的 英译中

    usr bin env Python3 coding utf 8 version v1 0 Author Meng Li contact 925762221 qq com FILE torch seq2seq py Time 2022 6
  • 【记录】看门狗定时器基础

    原文 概要 我们平时使用的电脑 由于某种原因导致动作异常 反复执行指定外的操作 或者没有任何反应 这种情况被认定为程序失控 out of control 或者程序中止了 对于用户而言 可以知道程序出现了异常 需要采取一定的措施 对于嵌入式系
  • 华为OD机试真题-任务调度【2023.Q1】

    题目内容 现有一个CPU和一些任务需要处理 已提前获知每个任务的任务ID 优先级 所需执行时间和到达时间 CPU同时只能运行一个任务 请编写一个任务调度程序 采用 可抢占优先权调度 调度算法进行任务调度 规则如下 1 如果一个任务到来时 C
  • Spring源码剖析之IOC容器创建流程

    ApplicationContextConfiguration为核心配置类 ApplicationContext applicationContext new AnnotationConfigApplicationContext Appli
  • Android手机RTMP播放工具(APK,支持秒开)

    Android手机RTMP播放工具是一款可以在安卓手机播放rtmp流的工具 基于FFmpeg openCV开发 下载地址 Android手机RTMP播放工具 APK 支持秒开 C 文档类资源 CSDN下载
  • 【后端】SSM框架体系(一)

    SSM框架 Spring 一 Spring相关概念 1 初识Spring 1 1 Spring家族 官网 https spring io 从官网我们可以大概了解到 Spring能做什么 用以开发web 微服务以及分布式系统等 光这三块就已经
  • gpexpand分析

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文由maxluo发表于云 社区专栏 一 gp扩容步骤 1 1 初始化机器 目标 新增加的机器需要初始化和已有机器环境一样 具体包括不限于以下内容 创建用户名 设置环境变量 创建数据