Greenplum在企业生产中的最佳实践在企业生产中的最佳实践
一、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服务器上,可能就是以两个为一组,分开部署在第二个机柜的这两台机器上。这样的话,假如说当第一
个机柜的一台服务器挂掉之后,在这边会有两台服务器完成原来有一台机器的工作,对整个集群的性能下降不会造成很大的影