Greenplum集群部署小结

这是学习笔记的第 2358篇文章

  

  

  Greenplum属于一种看起来“较重”的数据库MPP架构,不像基于MySQL基于中间件的架构那么轻量,但是要说一些具体的场景,比如Greenplum支持存储过程,支持列式存储,加上分区表和内置的数据分片等多种模式,都是典型的OLAP场景,术业有专攻还是有一定道理的。 

   最近因为业务需求和改造需要部署几套GP集群,总体来说也是需要解决以前的一些顽疾并加以改进,运行几个上百节点的集群还是有一定的压力的,不过前几年在飞祥同学的劳动成果之上,整个集群还是比较稳定的,在运行中也发现了一些额外的问题和痛点。

 1)之前的GP segment数量设计过度,因为资源限制,过多考虑了功能和性能,对于集群的稳定性和资源平衡性考虑有所欠缺,在每个物理机节点上部署了10个Primary,10个Mirror,导致一旦出现Segment节点不可用,对于整个集群的稳定性会是一个大的隐患,最尴尬的莫过于一个Segment节点不可用,另外一个Segment节点负载过高,最后集群不可用,所幸这种情况暂未出现

2)GP集群的存储资源和性能的平衡不够。GP存储对标基本都是百TB,相对来说和我们所说的大数据体系的PB还是有很大差异的,GP里面计算的数据总体都是比较重要,而且总体的存储容量不会特别大,磁盘现在有8T的规格,如果放12块盘,则RAID-5会有近70多T的存储空间,而RAID-10则有48T左右的空间,如果RAID-5同时坏了2块盘就尴尬了,但是对于RAID-10来说还是有转机的,这个情况之前碰到过一次,在替换一块坏盘的时候,工程师发现另外一块盘也快坏了,RAID-5要一块一块的换,当时还因为这个熬了个通宵,想了很多预案,说了这么多是想表达,GP存储的容量不用那么大,如果在损失一定存储容量的基础上能够最大程度降低隐患是很划算的,所以在存储容量和性能的综合之上,我们是选择了RAID-10

3)集群的验收和保障工作补充。如果一个GP集群用过很长一段时间就会发现启停都是一个大工程,之前启停要耗时半个小时,让小心脏压力很大。 这个过程中也发现了以前遗漏了一些环节,比如性能压测,导致不太确定整个集群的支撑能力到底如何。 

在此基础上,还需要额外考虑如下的一些因素:

1)集群的跨机房迁移如何做到平滑,或者影响最低,之前一次机房搬迁,导致IP变化后的集群无法启动,当时真是吓坏了,因为在这种问题面前,就是0和1的博弈,如果是0就意味着数据都丢弃了,所以在这方面还是需要做一些扎实的铺垫。

2)服务器后续过保要做硬件替换,如何能够实现滚动替换,这是在已有的基础之上需要前瞻考虑的重要点,几年后的服务器过保如何应对,如果有了可靠的方案,以后也会从容一些。

3)GP的版本和基础环境需要同步升级,比如我们目前的主流操作系统为CentOS7,如果继续使用CentOS 6就不应该了,同时对于GP的版本也需要重新评估,在较新版本和稳定版本之间进行平衡。 

   整个GP集群的部署架构如下:

 

Greenplum是我知道的数据库中的角色最完整的。Master,Standby,Primary,Mirror,各种数据库中的不同角色在这里有一套完整的体系命名。

新的这一套环境注定在我手中构建,所以我希望完善以下的一些细节。 

1)Greenplum的版本选择,目前有两个主要的版本类别,一个是开源版(Open Source distribution)和Pivotal官方版,它们的其中一个差异就是官方版需要注册,签署协议,在此基础上还有GPCC等工具可以用,而开源版本可以实现源码编译或者rpm安装,无法配置GPCC。综合来看,我们选择了开源版本的6.16.2,这其中也询问了一些行业朋友,特意选择了几个涉及稳定性bug修复的版本。

2)GP的容量规划,这一次经过讨论是选择了折中的配置,即(6+6)*10+2,具体解释就是一共12台服务器,其中有10台服务器是Segment节点,每台上面部署了6个Primary,6个Mirror,另外2台部署了Master和Standby

3)内核参数的配置和调整

除了基础的kernel.shmmax和kernel.shmall配置之外,还有如下的一些配置需要调整:

vm.swappiness=10

vm.zone_reclaim_mode = 0

vm.dirty_expire_centisecs = 500

vm.dirty_writeback_centisecs = 100

vm.dirty_background_ratio = 0 # See System Memory

vm.dirty_ratio = 0

vm.dirty_background_bytes = 1610612736

vm.dirty_bytes = 4294967296

vm.min_free_kbytes = 3943084

vm.overcommit_memory=2

kernel.sem = 500 2048000 200 4096

集群部署的大体流程:

1)首先是配置/etc/hosts,需要把所有节点的IP和主机名都整理出来。 

2)配置用户,很常规的步骤

groupadd  gpadmin

useradd gpadmin -g gpadmin

passwd gpadmin

3)配置sysctl.conf和资源配置

4)使用rpm模式安装

yum install -y apr apr-util bzip2 krb5-devel  zip

# rpm -ivh open-source-greenplum-db-6.16.2-rhel7-x86_64.rpm

Preparing...                          ################################# [100%]

Updating / installing...

   1:open-source-greenplum-db-6-6.16.2################################# [100%]

5)配置两个host文件,也是为了后面进行统一部署方便,在此建议先开启gpadmin的sudo权限,可以通过gpssh处理一些较为复杂的批量操作

6)通过gpssh-exkeys来打通ssh信任关系,这里需要吐槽这个ssh互信,端口还得是22,否则处理起来很麻烦

gpssh-exkeys -f hostlist

7)较为复杂的一步是打包master的Greenplum-db-6.16.2软件,然后分发到各个segment机器中,整个过程涉及文件打包,批量传输和配置,可以借助gpscp和gpssh,比如gpscp传输文件,如下的命令会传输到/tmp目录下

gpscp -f /usr/local/greenplum-db/conf/hostlist /tmp/greenplum-db-6.16.2.tar.gz =:/tmp

8)Master节点需要单独配置相关的目录,而Segment节点的目录可以提前规划好,比如我们把Primary和Mirror放在不同的分区。 

mkdir -p /data1/gpdata/gpdatap1

mkdir -p /data1/gpdata/gpdatap2

mkdir -p /data2/gpdata/gpdatam1

mkdir -p /data2/gpdata/gpdatam2

9)整个过程里最关键的就是gpinitsystem_config配置了,因为Segment节点的ID配置和命名,端口区间都是根据一定的规则来动态生成的,所以对于目录的配置需要额外注意。

10)部署GP集群最关键的命令是

gpinitsystem -c gpinitsystem_config -s 【standby_hostname】

整个过程大约5分钟~10分钟以内会完成。 

在此也走了不少弯路,比如一些配置不完整,防火墙权限不够,导致部署的时候界面卡在那里,

比如其中一个问题,/etc/hosts 配置不全 导致Primary可以启动,但是Mirror无法启动,问题看起来很奇怪,而且从GP的日志里面的信息也很简略,如果难以定位,还可以直接到相应的Segment节点上查看相应的日志,查看日志是个技术活,如果出现卡顿,不要干等着,得看看后端到底在哪个环节卡住了,需要同步查看日志的刷新来进行问题的定位和修正,在这方面GP的一些安装体验还是比较粗糙的。

安装部署这件事,就像一个无形的门槛,只要自己做过一次,相信这些步骤都很简单,反之就像一座绕不开的大山,始终绕不过去,对于安装部署,最全面的文档还是官方文档。

各大平台都可以找到我

  • 微信公众号:杨建荣的学习笔记

  • Github:@jeanron100

  • CSDN:@jeanron100

  • 知乎:@jeanron100

  • 头条号:@杨建荣的学习笔记

  • 网易号:@杨建荣的数据库笔记

  • 大鱼号:@杨建荣的数据库笔记

  • 腾讯云+社区:@杨建荣的学习笔记

原创热文:

维护之夜,说点故事和经验

我们为什么在MySQL中几乎不使用分区表

新年大吉 总结了如下的感想

《大江大河2》最触动我的一段经典对话

MySQL 8.0给开发方向带来的一些困扰

迁移到MySQL的业务架构演进实战

如何优化MySQL千万级大表,我写了6000字的解读

一道经典的MySQL面试题,答案出现三次反转

小白学MySQL要多久?我整理了10多个问题的答案

QQ群号:763628645

QQ群二维码如下, 添加请注明:姓名+地区+职位,否则不予通过

在看,让更多人看到

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

jeanron100

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

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

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

打赏作者

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

抵扣说明:

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

余额充值