e-works数字化企业网  »  文章频道  »  基础信息化  »  企业上云

Greenplum在企业生产中的最佳实践

2017/8/4    来源:云栖社区    作者:佚名      
关键字:Greenplum&企业生产  
GP是一个分布式X86架构,是把多台X86服务器组合成一起做一个大的集群。相比传统单机版的Oracle和MySQL,它的特点是使用比较多的服务器做海量数据处理。
    一、GP搭建过程当中硬件的选择和部署建议
 
    GP是一个分布式X86架构,是把多台X86服务器组合成一起做一个大的集群。相比传统单机版的Oracle和MySQL,它的特点是使用比较多的服务器做海量数据处理。
 
    一般在企业客户中,把X86服务器采集过来后会做上机安装,如果企业使用的集群规模比较大,比如国内客户最大的有将近128个节点,数据量有1PB。在部署的时候,X86的服务器会非常多,有超过100台的服务器。为了保证它整个集群的高可用、性能,在部署的时候一般是需要跨多个机柜。
 
    1.服务器部署
 
    (双机柜为一组的部署方式) 
 
    对GP来说建议在部署的时候,把服务器放在多个机柜上面,如果企业客户机器非常多,往往是以两个机柜为一组。
 
    对于X86服务器上架之后,接下来就要把X86服务器组网。对于目前市面上看到的2U的服务器,在一个机架里一般都会部署两个万兆交换机。对于单台服务器来说,一块网卡网口出来都会接入相应的交换机里面,那么在主机X86服务器上一般会使用moved4,也就是双active的方式做绑定。当任意的网络故障,就是网口出现故障或者交换机出现故障的时候,都不会对集群的可用性造成影响。
 
    另外,当集群规模比较大的时候,在接入组交换机端口可能是有限的,会把接入层的交换机接入到汇聚层,在汇聚层交换机接入的方式和底下的接入方式是比较像的。在接入层交换机上会分出两个口,分别接入到上层的汇聚层交换机,汇聚层交换机之间也会采用跨设备链路聚合这种方式做绑定。这样就保证了性能和可靠性。
 
    在企业客户现有的案例中,目前可以看到的交换机基本上都是支持双active的绑定方式,一般要在交换机上简单的把端口做一下设置就可以达到这种模式。
 
    (单个机柜的部署方式) 
 
    对单个的机柜来说,一般的机柜是44U,在部署的时候三个机柜一般会放16台2U的X86服务器,对于GP架构,需要控制节点,因为它只是负责元数据的存放和请求的解析、分发,所以它一般不需要有非常大的空间,一般建议可以有6块600G的SAS盘,可以做RAID10,也可以做RAID5,做元数据的存放。
 
    对于底下的数据节点,就GP数据库来说,一般会做海量数据的处理和分析,因此数据节点往往需要承担大量的数据存储和计算。建议对于计算节点一般采用2U的服务器,可以采用24块600GB或者900GB的SAS 10K或者15K转的盘,根据企业中自己的实际数据去选用磁盘类型。
 
    目前在国内客户用900G的SAS盘居多一些,在一些电信行业,数据量往往比较大,也有一些客户采用单块2T的硬盘。一个机柜里面也会放两台万兆交换机,用于内部的数据互联,同时也会加一台千兆交换机,用于对于服务器进行管理。
 
    在划分网络的时候,千兆和万兆的交换机一般都会划分成不同的网段。对于万兆交换机的接入,一般采用双active这种方式,只给分配一个IP段就可以。
 
    2.GP软件部署
 
    在GP底层实际是使用了数据库,并行的机制是采用了在X86服务器上部署多台数据库,然后通过软件对它们互联组网,完成整个执行。对于GP来说,它的高可用在企业里面首先是要保证数据的安全可靠。在规划时,在GP默认情况下,可以选择有没有备份的数据,就是有没有mirror。GP只有两种方式,要么有mirror,要么没有mirror。有mirror的话,数据摆放的时候就可以指定mirror具体的摆放方式。对于GP来说,默认的摆放方式是采用Group的方式。
 
    举个例子,假如有两个机柜,每个机柜上面有六台X86服务器,在存放的时候,假如在第一台服务器上部署了四个primary实例,会把对应的mirror节点放在相邻的服务器上。第二台primary备份实例就会放在第三台节点。那它就是采用这种轮训打散的方式来做GP的高可用。当任意一台机器挂掉之后,都不会对GP的可用性产生很大的影响。但是带来的问题是,GP在正常情况下,只有primary对外提供服务,假如说这个机器挂掉之后,那它对应的mirror就全部切到另外一台服务器上。这样对于MPP数据库,相当于有一台机器要承担比平时多两倍的计算工作量。
 
    由于MPP这样的短板效应,尤其是在压力比较大的时候,就会发现整个集群因为挂了一个节点,就会对整个集群性能下降40%到50%的影响,因为它受最慢的节点影响。其他节点都已经计算完了,但这个节点没有计算完,它就受这个节点的影响。
 
    另外还有一种方式,这个机器上有四个primary实例,可以把每一个primary实例打散在接下来的四个节点上,相当于每一个机器上只放第一台机器的一个备份数据。这样的好处在于,当这台机器挂了之后,相当于有四台机器分开承担原来一台机器的工作点。整个集群的性能最多情况下相比原来,可能就下降了25%。但是对它来说,采用这种方式,在挂了一个节点之后,如果这四个机器里面再有任意一个节点挂掉,那整个集群就不可用了。就是在GP里面如果是主备数据同时挂掉,那整个集群就会报错,我们发的所有SQL都会异常退出。
 
    一般在企业里面部署的时候,这么去考虑的话,会采用group+spread的方式去部署。举个例子,P1、P2、P3、P4,放在第一个机柜的第一台X86服务器上,可能就是以两个为一组,分开部署在第二个机柜的这两台机器上。这样的话,假如说当第一个机柜的一台服务器挂掉之后,在这边会有两台服务器完成原来有一台机器的工作,对整个集群的性能下降不会造成很大的影响,同时也兼顾了高可用性。
 
    目前在一些大的银行里面,尤其是当集群规模比较多的时候,一般都是采用group+spread的方式。但是在一些只有十几个节点的客户里面,一般还是采用group的方式去做实例的规划。
 
    3.GP硬件选择
 
    刚刚讲过,在X86服务器里,一般企业客户都会采用SAS盘或者SATA盘去做,因为容量会比较大。GP主要的场景是做海量数据的分析。一些电信客户里面也会涉及到一些明细数据的查询,比如说在某省的移动客户,会涉及到用户的一些详单的查询。因为在底层硬件上选用了SATA盘,即使用了24块,它的IOPS还是比较低的,一般SATA盘的IOPS只有100到200左右,当并发的分析,比如跑报表的分析应用和小的并发的查询过来之后,就会发现对于用户详单查询会有很大的影响。当时它做了很多的调优工作,包括底层用了GP的资源队列,甚至还用了操作系统的Cgroup,对IO做了限制。但是效果都不太理想。因为Cgroup也是通用采样的方式,在一个周期里面会控制IO使用。但是对于一些大的查询,如果把IO占满之后,还是会对整个集群使用造成比较大的影响。
 
    一般推荐客户使用一些比较高的并发查询,就是小的IO查询时,一般会推荐使用SSD的设备,在GP层面在建表的时候可以指定哪些表放在SSD上,哪些表放在SATA盘上,真正实现底层的IO隔离,以避免不同的业务之间造成影响。
 
硬件选择--磁盘
 
    硬件选择--磁盘
 
    底下这两个就是SSD和SATA盘,在IOPS尤其是在小的IO上面,SSD比SATA盘有非常大的优势,一般情况下来看对于SSD的设备,它的IOPS往往是SATA盘的几十倍甚至到一百倍,但是对于这样一个大的IO查询,比如像海量数据扫描来说,相比传统的SATA盘并没有非常大的提高。对这个数据来说SSD性能比较差,也是属于比较老的SSD设备。
 
    目前在企业里看到的一般的SSD的吞吐能到600MB/s到900MB/s的速度,但是IOPS基本上在30万左右。如果企业里面确实有对于小IO的高并发的查询类的场景,建议在X86服务器里采用SSD和SATA混搭的方式,然后在GP层面真正在底层硬件上隔离物理资源。
 
    对PCIeflash这种设备,在企业里面、在数仓里面用到的还不多,因为一个是插槽有限,另外成本也非常高。对于网络互联设备来说,GP一般建议使用普通的以太网络,通过使用万兆交换机,把多台服务器组合在一起来使用。
 
    有的客户,比如某电信用户,已经采购了这样的设备,就想看看能不能在数仓系统里把GP接入进来,当时遇到的情况是,因为GP在底层是使用的TCP/IP通信协议,所以即使有高速网络互联设备,要去接入的话,还需要用一层IPOIP的一些协议去做转换。一方面是会带来一些性能的损耗,另外一方面当时的测试也不是特别稳定,因为网卡驱动的问题,导致服务器经常宕机。所以说在GP里面一般都是根据具体的业务场景,主要的场景就是这种海量数据的大的顺序IO的读写操作,一般是建议采用24块盘的SAS盘或者SATA盘,做底层的存储。对于有这种海量的小的并发查询的时候,也可以采用SSD。
 
    4.RAID的划分与性能比较
 
    磁盘选完之后,就要涉及到RAID的划分,在GP软件层面本身的高可用只是保证了最多有一份数据冗余。在底层,GP和Hadoop不一样,GP一般会建议底层的数据节点采用RAID的方式,在企业里面往往使用最多的两个RAID方式,RAID5和RAID10。
 
    在容量上来说,举个例子,下图是某银行客户当时做了非常详细的RAID组的测试,这是在十块SAS盘做了大的RAID5,另外一个是做了RAID10。RAID5和RAID10相比最大的优势,一个是在容量方面,因为RAID5假如有10块900GB的盘,那只需要丢掉一块盘的容量,还有9T的空间。对于RAID10来说,基本上是需要丢掉一半的存储空间。在具体的性能上来看具体的数据,在读写性能上正常情况下十块盘读写数据RAID5都要好于RAID10。
 
 RAID5 VS RAID10 顺序IO测试对比
 
    RAID5 VS RAID10 顺序IO测试对比
 
    但是在真实的业务场景当中就会发现磁盘IO往往不会一直持续100%,繁忙程度不会到100%的程度,所以说根据在企业里具体的观察,跑真正的SQL查询的时候,RAID5和RAID10并没有非常大的明显的差异。
 
    在空间使用率上来说,在底下的磁盘空间,使用率占到70%之后再通过GP check做磁盘性能的检测,就会发现它的性能大概下降了有20%左右,包括读写性能。这是因为在空间使用非常多之后,可能磁盘外侧空间已经使用完,另外一方面,在文件分配上面也会有一些性能的损耗,所以说当你空间使用超过70%之后,对于数仓类的应用也会造成一些影响。所以建议企业客户服务器磁盘空间不要超过70%,一方面是从性能考虑,另外一方面在查询的时候,还会有一些中间的结果也会用一些临时的空间。
 
    二、在企业性能上来说
 
    (1)RAID卡cache对性能的影响
 
    对于做RAID之后,尤其是对企业的性能还是有非常大的影响的,因为RAID卡本身在数据写入的时候,会先写入到RAID卡的cache里面,后面就是通过RAID卡硬件再把它刷到真正的底下的磁盘里面。如果没有RAID卡cache的话,对不管是RAID5还是RAID10,对写的性能都会造成比较大的影响。
 
    比如一个客户它的数据规模比较小,从两个节点扩到四个节点,完成扩容之后发现机器数增加了,并且每个机器上的数据量减少了,但是性能还没有之前两个节点跑得好。原因在于他们新采购的机器没有RAID卡cache,导致新的机器IO性能下降非常严重。因为这个就是MPP短板效应造成了整个集群的性能比较大的下降。
 
    (2)异常情况下对性能的影响
 
    对于RAID5和RAID10来说在坏掉一块盘的情况下,由于在读的时候,RAID5需要通过其他盘去重新构建数据,所以当坏掉一块盘之后,RAID5比RAID10性能会下降非常多。对写的性能也会有一些下降,但没有读的性能下降得厉害。
 
    另外,比如坏了一块盘,又拿了一块新盘顶上去之后,在review的过程当中,对RAID5读和写的性能也会有一些比较大的影响。现在一般的RAID卡做得比较智能,前台有正常的IO操作,后台就会把review的操作暂停掉,等正常的IO下来之后,后台再做。但是对于RAID5和RAID10,以具体的测试情况,大的顺序IO来说,RAID5的读写性能还是要好于RAID10,但在异常情况下,它的性能会掉得比较厉害。所以具体到企业客户,还是根据这样的场景去选择RAID5和RAID10。
 
    如果对性能包括容错性要求比较高,不管在任何情况下都要对性能不会造成非常大的影响,这时候一般建议还是用RAID10;如果没有这样严格的要求,往往是从成本和容量、性能来考虑的话,在GP这边还是推荐使用RAID5。目前国内客户中,采用RAID5是最多的方式。
 
    (3)从不同故障场景下比较性能影响
 
    刚刚对于底层磁盘RAID5和RAID10的性能进行了比较,对于GP来说,具体可以看一下在不同的故障场景下,对性能到底有多大的影响。
 
RAID5 VS RAID10 故障场景下对GP性能的影响
 
    RAID5 VS RAID10 故障场景下对GP性能的影响
 

责任编辑:李欢
本文为授权转载文章,任何人未经原授权方同意,不得复制、转载、摘编等任何方式进行使用,e-works不承担由此而产生的任何法律责任! 如有异议请及时告之,以便进行及时处理。联系方式:editor@e-works.net.cn tel:027-87592219/20/21。
兴趣阅读
相关资料
e-works
官方微信
掌上
信息化
编辑推荐
新闻推荐
博客推荐
视频推荐