范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Greenplum集群部署和架构优化,我总结了5000字的心得

  最近对离线数仓体系进行了扩容和架构改造,也算是一波三折,出了很多小插曲,有一些改进点对我们来说也是真空地带,通过对比和模拟压测总算是得到了预期的结果,这方面尤其值得一提的是郭运凯同学的敬业,很多前置的工作,优化和应用压测的工作都是他完成的。
  整体来说,整个事情的背景是因为服务器硬件过保,刚好借着过保服务器替换的机会来做集群架构的优化和改造。
  1.集群架构改造的目标
  在之前也总结过目前存在的一些潜在问题,也是本次部署架构改进的目标:
  1)之前 的GP segment数量设计过度,因为资源限制,过多考虑了功能和性能,对于集群的稳定性和资源平衡性考虑有所欠缺,在每个物理机节点上部署了10个Primary,10个Mirror,一旦1个服务器节点不可用,整个集群几乎无法支撑业务。
  2)GP集群 的存储资源和性能的平衡不够,GP存储基于RAID-5,如果出现坏盘,磁盘重构的代价比较高,而且重构期间如果再出现坏盘,就会非常被动,而且对于离线数仓的数据质量要求较高,存储容量相对不是很大,所以在存储容量和性能的综合之上,我们选择了RAID-10。
  3)集 群的异常场景的恢复需要完善,集群在异常情况下(如服务器异常宕机,数据节点不可用,服务器后续过保实现节点滚动替换)的故障恢复场景测试不够充分,导致在一些迁移和改造中,相对底气不足,存在一些知识盲区。
  4)集群版本过 低,功能和性能上存在改进空间。毕竟这个集群是4年前的版本,底层的PG节点的版本也比较旧了,在功能上和性能上都有一定的期望,至少能够与时俱进。
  5)操作系统版本升 级,之前的操作系统是基于CentOS6,至少需要适配CentOS 7 。
  6)集群TPCH 压测验收,集群在完成部署之后,需要做一次整体的TPCH压测验收,如果存在明显的问题需要不断调整配置和架构,使得达到预期的性能目标。
  此外在应用层面也有一些考虑,总而言之,是希望能够解决绝大多数的痛点问题,无论是在系统层面,还是应用层面,都能上一个台阶。
  2.集群规划设计的选型和思考
  明确了目标,就是拆分任务来规划设计了,在规划设计方面主要有如下的几个问题:
  1)Greenplum的版本选择 ,目前有两个主要的版本类别,一个是开源版(Open Source distribution)和Pivotal官方版,它们的其中一个差异就是官方版需要注册,签署协议,在此基础上还有GPCC等工具可以用,而开源版本可以实现源码编译或者rpm安装,无法配置GPCC。综合来看,我们选择了开源版本的6.16.2,这其中也询问了一些行业朋友,特意选择了几个涉及稳定性bug修复的版本。
  2)数据集市的技术选型 ,在数据集市的技术选型方面起初我是比较坚持基于PostgreSQL的模式,而业务侧是希望对于一些较为复杂的逻辑能够通过GP去支撑,一来二去之后,加上我咨询了一些行业朋友的意见,是可以选择基于GP的方案,于是我们就抱着试一试的方式做了压测,所以数据仓库和和数据集市会是两个不同规模体量的GP集群来支撑。
  3)GP的容量规划 ,因为之前的节点设计有些过度,所以在数量上我们做了缩减,每台服务器部署12个segment节点,比如一共12台服务器,其中有10台服务器是Segment节点,每台上面部署了6个Primary,6个Mirror,另外2台部署了Master和Standby,就是即(6+6)*10+2,整体的配置情况类似下面的模式。
  4)部署架构方案选型 ,部署架构想起来比较容易,但是落实起来有很多的考虑细节,起初考虑GP的Master和Standby节点如果混用还是能够节省一些资源,所以设计的数据仓库和数据集市的部署架构是这样考虑的,但是从走入部署阶段之后,很快就发现这种交叉部署的模式是不可行的,或者说有一些复杂度。
  除此之外,在单个GP集群的部署架构层面,还有4类方案考虑。
  方案1:Master,Standby和segment混合部署
  方案2:Master,Standby和segment独立部署,整个集群的节点数会少一些
  方案3:Segment独立部署,Master,Standby虚拟机部署
  方案4:最小化单节点集群部署(这是数据集市最保底的方案)
  这方面存在较大的发挥空间,而且总体来说这种验证磨合的成本也相对比较高,实践给我上了一课,越是想走捷径,越是会让你走一些弯路,而且有些时候的优化其实我也不知道改怎么往下走,感觉已经无路可走,所以上面这4种方案其实我们都做了相关的测试和验证。
  3.集群架构的详细设计和实践
  1)设计详细的部署架构图
  在整体规划之上,我设计了如下的部署架构图,每个服务器节点有6个Primary,6个Mirror,服务器两两映射。
  2)内核参数优化
  按照官方文档的建议和具体的配置情况,我们对内核参数做了如下的配置:
  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
  4.集群部署步骤
  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
  5)配置两个host文件,也是为了后面进行统一部署方便,在此建议先开启gpadmin的sudo权限,可以通过gpssh处理一些较为复杂的批量操作
  6)通过gpssh-exkeys来打通ssh信任关系,这里需要吐槽这个ssh互信,端口还得是22,否则处理起来很麻烦,需要修改/etc/ssh/sshd_config文件
  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
  或者说在每台服务器上面直接rpm -ivh安装也可以。
  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】
  其中文件gpinitsystem_config的主要内容如下:
  MASTER_HOSTNAME=xxxx
  declare -a DATA_DIRECTORY=(/data1/gpdata/gpdatap1 /data1/gpdata/gpdatap2 /data1/gpdata/gpdatap3 /data1/gpdata/gpdatap4 /data1/gpdata/gpdatap5 /data1/gpdata/gpdatap6)
  TRUSTED_SHELL=ssh
  declare -a MIRROR_DATA_DIRECTORY=(/data2/gpdata/gpdatam1 /data2/gpdata/gpdatam2 /data2/gpdata/gpdatam3 /data2/gpdata/gpdatam4 /data2/gpdata/gpdatam5 /data2/gpdata/gpdatam6)
  MACHINE_LIST_FILE=/usr/local/greenplum-db/conf/seg_hosts
  整个过程大约5分钟~10分钟以内会完成,在部署过程中建议要查看后端的日志查看是否有异常,异常情况下的体验不是很好,可能会白等。
  5.集群部署问题梳理
  集群部署中还是有很多细节的问题,太基础的就不提了,基本上就是配置,目录权限等问题,我提另外几个:
  1)资源配置问题,如果/etc/security/limits.conf的资源配置不足会在安装时有如下的警告:
  2)网络问题,集群部署完成后可以正常操作,但是在查询数据的时候会抛出错误,比如SQL是这样的,看起来很简单:select count(*) from customer,但是会抛出如下的错误:
  这个问题的主要原因还是和防火墙配置相关,其实不光需要配置INPUT的权限,还需要配置OUTPUT的权限。
  对于数据节点可以开放略大的权限,如:
  入口的配置:
  -A INPUT -p all -s xxxxx -j ACCEPT
  出口的配置:
  -A OUTPUT -p all -s xxxxx -j ACCEPT
  3)网络配置问题 ,这个问题比较诡异的是,报错和上面是一样的,但是在排除了防火墙配置后,select count(*) from customer;这样的语句是可以执行的,但是执行的等待时间较长,比如表lineitem这表比较大,过亿的数据量,,在10个物理节点时,查询响应时间是10秒,但是4个物理节点,查询响应时间是在90秒,总体删感觉说不过去。
  为了排查网络问题,使用gpcheckperf等工具也做过测试,4节点和10节点的基础配置也是相同的。
  gpcheckperf -f /usr/local/greenplum-db/conf/seg_hosts -r N -d /tmp
  $ cat /etc/hosts
  127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
  ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
  #127.0.0.1 test-dbs-gp-128-230
  xxxxx.128.238 test-dbs-gp-svr-128-238
  xxxxx.128.239 test-dbs-gp-svr-128-239
  其中127.0.0.1的这个配置在segment和Master,Standby混部的情况是存在问题的,修正后就没问题了,这个关键的问题也是郭运凯同学发现的。
  5.集群故障恢复的测试
  集群的故障测试是本次架构设计中的重点内容,所以这一块也是跃跃欲试。
  整体上我们包含两个场景,服务器宕机修复后的集群恢复和服务器不可用时的恢复方式。
  第一种场景相对比较简单,就是让Segment节点重新加入集群,并且在集群层面将Primary和Mirror的角色互换,而第二种场景相对时间较长一些,主要原因是需要重构数据节点,这个代价基本就就是PG层面的数据恢复了,为了整个测试和恢复能够完整模拟,我们采用了类似的恢复方式,比如宕机修复使用了服务器重启来替代,而服务器不可用则使用了清理数据目录,类似于一台新配置机器的模式。
  1)服务器宕机修复后集群恢复
  重启前检查
  重启服务器
  检查集群节点状态
  select * from gp_segment_configuration where status!="u";
  修复集群节点
  gprecoverseg -o ./recov
  切换集群节点角色
  gprecoverseg -r
  检查复核
  select * from gp_segment_configuration where status="u"
  2)服务器不可用时集群恢复
  重启前检查,主要包括系统配置,存储的检查
  重启服务器
  重建数据目录  重建数据节点
  gprecoverseg -F
  重构数据节点的过程中,总体来看网络带宽还是使用很充分的。
  检查复核
  select * from gp_segment_configuration where status="u"
  select * from gp_segment_configuration where status="u" and role!=preferred_role;
  切换集群节点角色
  gprecoverseg -r
  检查复核
  select * from gp_segment_configuration where status="u" and role!=preferred_role;
  经过测试, 重启节点到数据修复,近50G数据耗时3分钟左右
  6.集群优化问题梳理
  1)部署架构优化和迭代
  对于优化问题,是本次测试中尤其关注,而且争议较多的部分。
  首先在做完初步选型后,数仓体系的部署相对是比较顺利的,采用的是第一套方案。
  数据集市的集群部分因为节点相对较少,所以就选用了第二套方案
  实际测试的过程,因为配置问题导致TPCH的结果没有达到预期。
  所以这个阶段也产生了一些疑问和怀疑,一种就是折回第一种方案,但是节点数会少很多,要不就是第三种采用虚拟机的模式部署,最保底的方案则是单节点部署,当然这是最牵强的方案。
  这个阶段确实很难,而在上面提到的修复了配置之后,集群好像突然开悟了一般,性能表现不错,很快就完成了100G和1T数据量的TPCH测试。
  在后续的改造中,我们也尝试了第三套方案,基于虚拟机的模式,通过测试发现,远没有我们预期的那么理想,在同样的数据节点下,Master和Standby采用物理机和虚拟机,性能差异非常大,这个是出乎我们预料的。比如同样的SQL,方案3执行需要2秒,而方案2则需要80秒,这个差异我们对比了很多指标,最后我个人理解差异还是在网卡部分。
  所以经过对比后,还是选择了方案2的混合部署模式。
  2)SQL性能优化的分析
  此外整个过程的TPCH也为集群的性能表现提供了参考。比如方案2的混合部署模式下,有一条SQL需要18秒,但是相比同类型的集群,可能就只需要2秒钟左右,这块显然是存在问题的。
  在排除了系统配置,硬件配置的差异之后,经典的解决办法还是查看执行计划。
  性能较差的SQL执行计划:
  # explain analyze select count(*)from customer;
  QUERY PLAN
  Aggregate (cost=0.00..431.00 rows=1 width=8) (actual time=24792.916..24792.916 rows=1 loops=1)
  -> Gather Motion 36:1 (slice1; segment s: 36) (cost=0.00..431.00 rows=1 width=1) (actual time=3.255..16489.394 rows=150000000 loops=1)
  -> Seq Scan on customer (cost=0.00..431.00  rows=1  width=1) (actual time=0.780..1267.878 rows=4172607 loops=1)
  Planning time: 4.466 ms
  (slice0) Executor memory: 680K bytes.
  (slice1) Executor memory: 218K bytes avg x 36 workers, 218K bytes max (seg0).
  Memory used: 2457600kB
  Optimizer: Pivotal Optimizer (GPORCA)
  Execution time: 24832.611 ms
  (9 rows)
  Time: 24892.500 ms
  性能较好的SQL执行计划:
  # explain analyze select count(*)from customer;
  QUERY PLAN
  Aggregate (cost=0.00..842.08 rows=1 width=8) (actual time=1519.311..1519.311 rows=1 loops=1)
  -> Gather Motion 36:1 (slice1; segments: 36) (cost=0.00..842.08 rows=1 width=8) (actual time=634.787..1519.214 rows=36 loops=1)
  -> Aggregate (cost=0.00..842.08 rows=1 width=8) (actual time=1473.296..1473.296 rows=1 loops=1)
  -> Seq Scan on customer (cost=0.00..834.33  rows=4166667  width=1) (actual time=0.758..438.319 rows=4172607 loops=1)
  Planning time: 5.033 ms
  (slice0) Executor memory: 176K bytes.
  (slice1) Executor memory: 234K bytes avg x 36 workers, 234K bytes max (seg0).
  Memory used: 2457600kB
  Optimizer: Pivotal Optimizer (GPORCA)
  Execution time: 1543.611 ms
  (10 rows)
  Time: 1549.324 ms
  很明显执行计划是被误导了,而误导的因素则是基于统计信息,这个问题的修复很简单:
  analyze cu sto  mer;
  但是深究原因,则是在压测时,先是使用了100G压测,压测完之后保留了原来的表结构,直接导入了1T的数据量,导致执行计划这块没有更新。
  3)集群配置优化
  此外也做了一些集群配置层面的优化,比如对缓存做了调整。
  gpconfig -c statement_mem -m 2457600 -v 2457600
  gpconfig -c gp_vmem_protect_limit -m 32000 -v 32000
  7.集群优化数据
  最后来感受下集群的性能:
  1)10个物理节点,(6+6)*10+2
  tpch_1t=# iming on
  Timing is on.
  tpch_1t=# select count(*)from customer;
  count
  -----------
  150000000
  (1 row)   Time: 1235.801 ms   tpch_1t=# select count(*)from lineitem;   count   ------------   5999989709
  (1 row)   Time: 10661.756 ms   2)6个物理节点,(6+6)*6   # select count(*)from customer;   count   -----------   150000000
  (1 row)   Time: 1346.833 ms   # select count(*)from lineitem;   count   ------------   5999989709
  (1 row)   Time: 18145.092 ms   3)4个物理节点,(6+6)*4   # select count(*)from customer;   count   -----------   150000000
  (1 row)   Time: 1531.621 ms   # select count(*)from lineitem;   count   ------------   5999989709
  (1 row)   Time: 25072.501 ms   4)TPCH在不通架构模式下的性能比对 ,有19个查询模型,有个别SQL逻辑过于复杂暂时忽略,也是郭运凯同学整理的列表。   在1T基准下的基准测试表现:

新生儿脐带护理的注意事项护理脐部的步骤1准备婴儿脐敷料棉花棒数支浓度95及75的酒精各一瓶纱布一包。2彻底洗手在脐带护理前,一定要使用香皂洗手,而且至少必须搓洗20秒,才可达到杀菌的效果冲洗时,则由指尖冲小儿手足口病症状以及预防护理小儿手足口病症状手足口病是由肠道病毒引起的传染病,多发生于5岁以下儿童,可引起手足口腔等部位的疱疹,少数患儿可引起心肌炎肺水肿无菌性脑膜脑炎等并发症。那么小儿手足口病症状有哪些呢?怎么催乳?怎么催乳奶水分泌不足,是让有志于全母乳喂养宝宝的妈妈们最头痛的事。于是,有的人拼命喝猪蹄汤鲫鱼汤,有的人求助于各种催乳保健品,还有的人四处寻觅民间的下奶偏方。目前催乳的方法主要有中孕前注意事项孕前注意事项1未准妈妈应坚持锻炼身体,抵御因感冒风疹等病毒侵袭造成的胎儿畸形。未准妈妈进行的身体锻炼应适量,避免参加剧烈的运动竞赛,因为激动紧张的竞技心理状态,会影响她们生理机能的安慰奶嘴的利弊安抚奶嘴的利弊1安抚奶嘴的优点心理学专家认为,从宝宝出生到2岁左右进入了口腔期,宝宝通过嘴巴的吸吮,会帮助宝宝转移紧张情绪,提升安全感,除了用吸吮的方式来进食维持生长发育之外,更可婴儿钙和锌能同时补吗?钙和锌能同时补吗钙和锌能同时补吗?为了提高补充营养素的效率,不少家长都将同时给宝宝补充钙和锌。其实,钙和锌是可以同时补充的,只要用对方法,不会对宝宝造成什么不良影响。而且,按照科学宝宝穿纸尿裤好吗?宝宝穿纸尿裤好吗纸尿裤的出现让很多妈妈都从洗尿布的辛苦中解脱出来,但是有的妈妈发现,宝宝的很容易出现红屁股。到底,宝宝穿纸尿裤好吗?1纸尿裤对育儿过程是很有作用的。现代生活的快节奏宝宝多大可以剪指甲宝宝多大可以剪指甲通常并不主张给1个月以内的孩子剪指甲,也就是说让指甲完全形成以后再说。除非孩子到处乱抓或指甲过长而撕裂时,这才需要剪指甲。13个月的婴儿,手非常爱动,经常会无意识受孕的最佳时机受孕的最佳时机年龄人类的最佳生育年龄是25岁左右,最好别超过28岁。随着年龄增长,人的生育能力在不断下降,此外,过晚怀孕,卵子质量下降,胚胎畸形的几率增高。同时,也不利于及时发现问孕酮低的原因孕酮低的原因1曾经受过一些伤害例如先兆流产宫外孕早产闭经不孕症,这些将直接导致孕酮比较低的现象。2黄体功能不全如果黄体的功能不完整的话,卵巢黄体发育不全时,孕酮含量相应降低,孕酮就什么是补锌什么是补锌锌是人体重要的微量元素之一,具有促进人体生长发育的重要作用。孕期补锌不仅改善孕妇消化功能,维持免疫功能,缓解孕期反应,同时还能促进胎儿正常发育。锌对孕妇的主要影响1。促进
1993年3月14日最后一位辛亥革命老人喻育之先生逝世在28年前的今天,1993年3月14日(农历1993年2月22日),最后一位辛亥革命老人喻育之先生逝世。1993年3月14日,参与辛亥革命武昌首义的最后一位老人喻育之先生胸佩天下为唐僧被如来佛封为什么?据说在唐代时,楚地有个文通塔,供奉旃檀佛。吴承恩认为旃檀佛应是一个了不起的佛,于是在创作西游记时,最后运用了生活中鲜活的素材,确定唐僧的佛家封号为旃檀功德佛。旃檀功德佛,是佛经大宝有一个大男子主义的男朋友是什么体验?1总觉得女人就是应该生孩子然后当个家庭妇女2出门的时候不愿意女生掏钱!哪怕买瓶矿泉水也要男生亲自来对,我就这样3把自己的观点强加给别人永远是自己对的对你做了什么事永远算计得很清楚我1947年3月14日美菲军事基地协定签订,租期99年在74年前的今天,1947年3月14日(农历1947年2月22日),美菲军事基地协定签订,租期99年。1947年3月14日,美国与菲律宾在马尼拉签订美在菲继续使用和扩大军事基地的协给大家爆料一下成都相亲机构的收费原则给大家爆料一下成都婚介机构的收费原则。成都相亲机构的收费原则我们以一个女生为例,假如这个女生23岁收2万,25岁收3万,28岁收5万,32岁收8万。35岁收10万以上是这样一个递增99的人不会知道手机上瘾对人的影响有这么大随着智能手机的发展,功能越来越强大,并逐渐成为我们生活中不可或缺的一部分,导致我们每天都会在手机上花费很多时间!最近的研究表明,智能手机会干扰我们的睡眠工作效率心理健康和冲动控制,1897年3月14日国画大师潘天寿诞辰在124年前的今天,1897年3月14日(农历1897年2月12日),国画大师潘天寿诞辰。潘天寿在重庆磐溪国立艺专任校长1897年3月14日,潘天寿出生在浙江宁江县冠庄村。潘天寿先840年3月14日查理大帝传的作者艾因哈德逝世在1181年前的今天,840年3月14日(农历840年2月7日),查理大帝传的作者艾因哈德逝世。欧洲中世纪历史上最有名的封建君主是法兰克加洛林王朝第二代君主查理大帝。在他统治的461988年3月14日越南武装舰船侵入南沙群岛海域在33年前的今天,1988年3月14日(农历1988年1月27日),越南武装舰船侵入南沙群岛海域。中国海军舰船于1988年3月13日到南沙群岛的九章群礁海域对部分岛礁进行考察,并组1962年3月14日联合国裁军委员会会议在日内瓦举行在59年前的今天,1962年3月14日(农历1962年2月9日),联合国裁军委员会会议在日内瓦举行。1962年3月14日,联合国裁军委员会在日内瓦举行。委员会由18个国家组成,其中周冬雨公开呛声黄渤,他这到底是为了什么有一次,黄渤和一帮人一起去录制某档综艺节目。晚上11点多,录制工作还远没有结束,所有人却都已累得心不在焉。黄渤担心冷场,就主动找话题。演员周冬雨年龄最小的周冬雨穿着一双特高的高跟鞋