INFO-GreenPlum简介
更新时间: 2025-04-01 15:40:19
阅读 65
INFO-GreenPlum简介
功能说明
适用模块
元数据中心、传输
具体说明
1.介绍
Greenplum的高性能得益于其良好的体系结构。Greenplum的架构采用了MPP(大规模并行处理)。
Greenplum是一种基于PostgreSQL的分布式数据库,
其采用的Shared-Nothing架构(MPP),主机、操作系统、内存、存储都是自我控制的,不存在共享。
2.基本特性
GPDB既支持行存,也支持列存。还为不需更新的数据存储和处理进行了专门的优化。
支持多种压缩方法,包括QuickLZ (商业版本),Zlib,RLE 等。
支持多级分区表,分区支持多种模式,包括范围,列表等。
支持B树、bitmap位图和GiST 等索引。
认证机制支持多种方式,包括LDAP和Kerberos等。
扩展语言支持:GPDB 支持使用多种流行语言实现用户自定义函数,包括 Python,R,Java,Perl,C/C++ 等。
地理信息处理:通过集成PostGIS,GPDB支持对地理信息进行存储和分析。
内建数据挖掘算法库:通过MADLib(现在是Apache孵化项目)算法库,可以内建几十种常见的数据分析和挖掘算法到 GPDB数据库中,包括逻辑回归,决策树,随机森林等。不需要写任何算法代码,通过SQL就可以使用其中的所有算法。
文本检索:通过GPText扩展,GPDB可以支持高效灵活丰富的全文检索功能。与 MADLib 合用,可以进行并行文本分析和挖掘。
3.Master介绍
Master服务器是外面用户访问greenplum的入口。用户都是连接master服务器的,对于外部用户来说,并不与 segment host服务器发生任何关系,外部用户的网络只需要与master服务器连通就可以了,不需要访问segment host服务器。
Greenplum数据库是基于PostgreSQL数据库的,所以可以用PostgreSQL数据库的工具来连接Greenplum数据库,如 java程序可以使用PostgreSQL的jdbc驱动来访问Greenplum数据库,也可以使用psql工具或pgadminII来管理Greenplum。
Greenplum的Master数据库也是一个被改造过的PostgreSQL数据库,它包含了整个分布式数据库中的所有元数据,如表结构定义、索引,数据分布信息等等。但其并不存储实际的数据,实际的数据是存储在segment 数据库的。
Master节点接收用户发过来的sql命令,然后解析生成分布式的执行计划,再把执行计划下发到对应的segment节点进行执行。Segment节点执行完的结果会发送到master上,master接收到segment的结果进行汇总并返回执行结果给用户。所以在这种master-slave结构中,master不会成为系统的瓶颈。
4.Segment介绍
Greenplum的节点上可以运行多个segment instance,每个instance可以绑定到一个网卡,这样可以发挥cpu和网络性能。
系统的数据都分布式的存储在segment上。
每个segment同时执行master分发的任务,在执行查询任务或者数据加载的时候可能会涉及数据的移动。在进行数据移动的时候master不参与进来只是segment之间进行。
Segment可以动态扩展,既可以在原有主机上进行增加segment instance的操作,又可以新增主机来增加segment。当扩展segment后,系统里面的数据会进行重分布操作,这个动作消耗时间会比较多。
5.高可用方案
Greenplum的高可用性是通过master和segment的镜像来实现的,镜像是基于服务器级别的所以能提供比较好的安全保证。
Master节点不能和segment节点安装在同一个主机上,standby节点可以和segment节点复用。
Master宕机的话standby master不会自动切换到master,需要手动切换到主设备。Segment如果一个节点坏掉,系统可以自动将mirror切换到primary。
当segment中某台设备出现故障后,mirror会切换成primary。检查出故障的主机恢复后可以使用gprecoverseg命令恢复成之前的主备关系。
6.GreenPlum与PostgreSQL的区别
GreenPlum采用分布式架构,为了实现各个几点并行计算能力,需要在节点间进行广播或者数据重分布,对整体的性能有一定影响,当数据量较小时,计算量小,广播或者重分布耗时占总耗时比例大,影响整体的执行效率,可能会出现GreenPlum不如单机版PostgreSQL效率高。
单批量插入慢的原因,因为是分布式,每条数据进来根据分布键需要存放到不同的Segment上,插入性能不是瓶颈,而是两台服务器数据交互
优化案例
1、Greenplum主要参数
系统配置
Greenplum完成初始化安装后,建议调整以下系统参数:
• net.ipv4.tcp_tw_recycle = 1
如果主机网络是NAT模式(通常虚拟机会采用此模式)时,需要设置为0,在/etc/sysctl.conf中修改。
根据linux手册TCP协议的官方解释。
tcp_tw_recycle (Boolean; default: disabled; since Linux 2.4)Enable fast recycling of TIME_WAIT sockets. Enabling this option is not recommended since this causes problems when working with NAT (Network Address Translation).
• vm.overcommit_memory = 2
这是一个Linux内核参数,在/etc/sysctl.conf中设置。它应该总是被设置为2。它决定OS判断可以给进程分配多少内存时使用的方法,2是对于Greenplum数据库唯一安全的设置。
以下是/etc/sysctl.conf的实例:
Shellkernel.shmmax = 500000000kernel.shmmni = 4096kernel.shmall = 4000000000kernel.sem = 500 2048000 200 4096kernel.sysrq = 1kernel.core_uses_pid = 1kernel.msgmnb = 65536kernel.msgmax = 65536kernel.msgmni = 2048net.ipv4.tcp_syncookies = 1net.ipv4.ip_forward = 0net.ipv4.conf.default.accept_source_route = 0net.ipv4.tcp_tw_recycle = 1net.ipv4.tcp_max_syn_backlog = 4096net.ipv4.conf.all.arp_filter = 1net.ipv4.ip_local_port_range = 1025 65535net.core.netdev_max_backlog = 10000net.core.rmem_max = 2097152net.core.wmem_max = 2097152vm.overcommit_memory = 2
• /etc/security/limits.conf
应该在此文件中增加OS文件和进程的最大数量。
Shell* soft nofile 655360* hard nofile 655360* soft nproc 261072* hard nproc 261072
• /etc/security/limits.d/*-nproc.conf
除了修改/etc/security/limits.conf,还需要注意/etc/security/limits.d/下的文件,这些文件是用户级别的limits设置,最后生效的是用户级别的设置。
Shell[root@node1 ~]# cat /etc/security/limits.d/20-nproc.conf # Default limit for number of user's processes to prevent# accidental fork bombs.# See rhbz #432903 for reasoning.* soft nproc unlimitedroot soft nproc unlimited
文件修改后,可以通过sysctl -p命令使其生效,然后重启Greenplum。
2、GP核心参数调整
内存参数
Greenplum内存使用示意图:
配置Greenplum数据库内存
Greenplum数据库内存是可用于所有Greenplum数据库的Segment实例的内存量。
在设置Greenplum数据库集群时,用户决定每台主机运行的主Segment数量以及为每个Segment分配的内存量。
根据CPU核数、物理RAM的量以及负载特点,Segment的数量通常是介于4和8之间的值。
如果启用了Segment镜像,为失效时执行在一台主机上的最大数量的主Segment分配内存很重要。
例如,如果用户使用默认的组镜像配置,一个Segment主机失效会让拥有失效主机镜像的主机上的活动主Segment数量翻倍。
将每台主机的镜像散布在多台其他主机上的镜像配置可以降低这个最大值,允许为每个Segment分配更多内存。
例如,如果用户使用一种块镜像配置,其中每块有4台主机且每台主机上有8个主Segment,单个主机失效将会导致块中其他主机有11个活动主Segment这一最大值,这比默认的组镜像配置的16个要少。
gp_vmem_protect_limit值是为每个Segment分配的内存量。它通过计算所有Greenplum数据库进程可用的内存并且除以失效时主Segment的最大数量得到。如果gp_vmem_protect_limit被设置得过高,查询可能会失败。使用下面的公式为gp_vmem_protect_limit计算一个安全值。
使用这个公式计算gp_vmem(所有Greenplum数据库进程可用的内存):
对于内存大于等于256GB的主机,使用以下公式
gp_vmem = ((SWAP + RAM) – (7.5GB + 0.05 * RAM)) / 1.17
其中 其中SWAP是主机上的交换空间(以GB为单位),而RAM是安装在主机上的RAM的GB数。
使用这个公式计算gp_vmem_protect_limit:
gp_vmem_protect_limit = gp_vmem / max_acting_primary_segments
其中max_acting_primary_segments=segment主机上的primary segment数量+单点故障时会被启用的mirror segment数量。
另一项重要的Greenplum数据库服务器配置参数是statement_mem。这个参数设置分配来执行查询的最大内存量。
要为这个参数确定值,用每个Segment的内存量(gp_vmem_protect_limit)减去一个10%的安全量,然后除以期望并发执行的最大查询数量。默认的Greenplum书库资源队列允许最多20个并发查询。
这里有一个公式计算statement_mem:
(gp_vmem_protect_limit * .9 ) / max_expected_concurrent_queries
其中max_expected_concurrent_queries取决于预设的并发查询数量。
官方文档
https://docs-cn.greenplum.org/v5/ref_guide/feature_summary.html
作者:华柄印
文档反馈
以上内容对您是否有帮助?