Greenplum 实时数据仓库实践——Greenplum安装部署
Posted wzy0623
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Greenplum 实时数据仓库实践——Greenplum安装部署相关的知识,希望对你有一定的参考价值。
目录
1. 在Master和Standby Master主机创建数据存储区
Greenplum是一个MPP分布式数据库软件,本质上是并行利用硬件使其充分发挥能力以达到最佳性能。Greenplum可以运行在多种环境中,如物理机、虚拟机、云服务器等等,但无论哪种环境,要保证高可用、高性能和稳定性,必须以选择适当的硬件、操作系统、文件系统为基础。对底层系统和数据库的合理配置,也是获得一个强力Greenplum集群的重要前提条件。本篇详细论述Greenplum 6安装部署所涉及的各方面问题。
4.1 平台需求
4.1.1 操作系统
Greenplum 6可以运行在以下主流操作系统之上:
- Red Hat Enterprise Linux 64-bit 7.x
- Red Hat Enterprise Linux 64-bit 6.x
- CentOS 64-bit 7.x
- CentOS 64-bit 6.x
- Ubuntu 18.04 LTS
RedHat 6.x和CentOS 6.x的一个已知问题是,启动资源组时Greenplum性能明显下降。这是由Linux cgroup内核错误引起,已在CentOS 7.x和Red Hat 7.x系统中修复。对于安装在7.3之前版本的Greenplum,可能由于Linux内核问题导致高工作负载的Greenplum数据库挂起,7.3版本解决了该问题。建议操作系统选择CentOS 64-bit 7.3或以上版本。另外,不要在Greenplum主机上安装防病毒软件,这可能会导致额外的CPU和IO负载,从而干扰Greenplum数据库操作。
Greenplum 6需要在RHEL/CentOS 7系统上安装以下软件包(在安装Greenplum RPM包时,这些软件包将作为依赖项自动安装):apr、apr-util、bash、bzip2、curl、krb5、libcurl、libevent、libxml2、libyaml、zlib、openldap openssh、openssl、openssl-libs、perl、readline、rsync、R、sed、tar、zip。如果使用PL/Java或PXF,需要安装Open JDK 8或Open JDK 11。
4.1.2 硬件和网络
Greenplum数据库系统中的所有主机服务器应该具有相同的硬件和软件配置。数据库整体性能依赖于硬件的性能和各种硬件资源的均衡。对于OLAP应用来说,最大的瓶颈是磁盘性能,因此所有其他资源都应围绕磁盘性能来均衡配置。这些资源包括CPU主频与核数、内存容量、网络带宽、RAID性能等,但基本宗旨是,IO资源必须有富余,CPU资源被充分利用。
1. CPU主频与核数
就目前来说,一个SQL语句的执行性能,取决于单核的计算能力和有多少个Primary段参与计算。通常对于一个Primary来说,在执行一个任务时,只能利用一个CPU核的计算能力。
现在主流的两路X86服务器,CPU一般都配置64核甚至更高核数。相同核数情况下追求高主频需要很高的成本,性价比很低,基本没有什么选择的空间。所以,要提升集群的整体计算能力,核数是个非常重要的因素。如果有可能,尽量增加CPU核数,配置96核甚至128核以上的CPU,将会带来更好的计算能力。
2. 内存容量
单机最小物理内存需求为16G。随着近年来大规模数据分析需求的上升,主流配置单机内存至少256GB,很多已经达到512GB甚至更高。Greenplum的很多算子,比如Hash、AGG、Sort等都属于内存密集型算子,可能需要消耗大量内存。
活跃内存的消耗量与计算的数据量、计算的类型、并发数都有关系。只能说配置的内存多,Greenplum在处理内存需求量很大的场景时会更高效,但不能保证活跃内存的使用率就一定很高。因此,如果极少有内存密集型计算,可以适当降低内存配置,不过建议每个Primary段的最低内存配置不要低于30GB。如前所述,Greenplum集群中的IO是最珍贵的资源,如果内存不足,就要从内存溢出到磁盘文件,把压力转移到磁盘上,这种情况是不应该出现的。
3. 内联网络
内联网络的带宽及其重要。MPP架构带来了一个无法避免的数据移动问题。虽然数据移动不是总会发生,但如果发生时受带宽限制,数据移动操作就会卡在网络层。好在已经普遍存在的万兆网卡和万兆交换机提供了强大的网络能力。
强烈建议集群中所有主机在同一局域网内,连接万兆交换机。另外,为了实现网络的高可用,每台主机建议至少两块万兆网卡。如果可以选择,要采用mode4的bond,而不是mode1。从安全角度来看,mode4和mode1是完全一样的,都有多个通道,只要不是全部通道故障,不影响连通性。而从带宽角度考虑,正常情况下mode4的带宽更高,而mode1的带宽就相当于故障了的mode4。
一定要确保网络的健康,长期大量错包丢包必定影响集群的稳定性甚至性能。对于超大规模集群,应该考虑为Master服务器配置更多的网口做链路聚合,因为随着Master管理的机器增多,Master本身的网络压力会随之上升。100台以上的集群,可以考虑增加Master的网络带宽为4个万兆口做mode4的链路聚合。
4. RAID卡性能
如果使用机械盘,RAID卡是缓解磁盘压力的关键,其最大作用是,将离散IO操作缓存并合并为连续IO操作。普通机械盘的随机读写能力较差,一个10K/Min转速的机械盘,连续的磁盘读写性能不会超过200MB/S,随机读写性能更差,一般IOPS能力都达不到200。
对于OLAP型应用,主要是大尺寸的连续读写。如果RAID卡有Cache功能,不管读写,都可以经过RAID卡的Cache进行IO合并,充分发挥机械盘的连续读写能力。一般要求24块机械盘,起码要配置2GB以上Cache的双通道RAID卡,否则RAID卡可能成为性能瓶颈。根据经验,24块机械盘,采用12块一组的RAID-5方案,条带一般选择256KB大小。
5. 磁盘配置
磁盘性能对Greenplum尤为重要。对OLAP型应用,目前主流的配置方案是,Segment节点主机配置24块机械盘,Master节点主机配置8~12块机械盘。如果选择SSD或NVMe,可以根据容量和性能评估硬盘数量。
不能只是单纯地追求容量,要综合考虑性能指标,单块磁盘的容量越大,故障恢复的时间越长。一般来说,如果选择机械盘,目前主流的选择是单盘不超过1.8TB。
4.1.3 文件系统
应该在XFS文件系统上运行Greenplum数据库。原厂未明确支持其他文件系统,所以Greenplum数据库的数据目录应该使用XFS文件系统。
对于网络文件系统或共享存储,也必须挂载为本地XFS文件系统。非本地磁盘的文件系统,虽然支持,但不推荐。对Greenplum来说,都是本地目录,不会区分对待不同的存储。网络文件系统或共享存储,虽然可以运行,但性能和可靠性无法保证。
4.2 容量评估
本节是估算Greenplum数据库系统可以容纳多少数据的指南。除此之外,可能还希望在每个Segment主机上有额外的空间,来放置备份文件和需要加载的外部数据文件。
4.2.1 可用磁盘空间
要估算Greenplum数据库系统可以容纳的数据量,必须从计算每个Segment主机上可用于数据存储的物理磁盘的原始容量开始,然后用每个Segment主机的可用磁盘容量,乘以Greenplum集群中的Segment主机数。原始容量等于磁盘大小乘以磁盘数量,而磁盘数量要考虑使用的RAID级别,例如使用带有Hotspare的RAID-5的原始容量计算如下:
原始容量 = 磁盘大小 * (磁盘总数 - RAID数量 - Hotspare数量)
下一步计算格式化后的磁盘容量,这时要考虑文件系统格式化开销(大约10%):
格式化后的磁盘容量 = 原始容量 * 0.9
磁盘使用率不能是100%,为保障性能,Greenplum建议磁盘使用率不要超过70%,因此可用磁盘空间为:
可用磁盘空间 = 格式化后的磁盘容量 * 0.7
假设24块1.2TB的磁盘,做两组RAID-5,带有两块Hotspare,则可用磁盘空间为:
1.2TB * (24 - 2 - 2) * 0.9 * 0.7 = 15.12TB
Greenplum可以将其余30%用于相同磁盘上的临时文件和事务文件。如果主机系统有一个单独的磁盘系统用于临时文件和事务文件,则可以指定一个使用这些文件的表空间。根据磁盘系统的性能,移动文件的位置可能会提高性能。
在计算用户数据(U)的实际可用存储量时,通常使用Mirror实现数据冗余是生产环境的必选项,那么用户数据的大小将增加一倍(2*U)。Greenplum还需要保留一些空间作为活动查询的工作区(work space),应约为用户数据大小的三分之一:
(2 * U) + U/3 = 15.12TB
用户数据可用空间(U)= 6.48TB
这里的计算公式针对典型的分析型应用。高并发工作负载或需要大量临时空间的查询可以从保留较大的工作区中获益。通过适当的负载管理,可以提高总体系统吞吐量,同时降低工作区使用率。此外,通过指定临时空间和用户空间位于不同的表空间上,可以将它们彼此隔离。
4.2.2 用户数据容量
与其他数据库类似,原始数据一旦被装载到数据库中,将比原始数据文件稍大一些,平均而言,约为原始大小的1.4倍。根据使用的数据类型、表存储类型和数据是否压缩等因素,情况可能有所不同。计算用户数据容量要考虑以下因素:
- 页开销:数据被装载到Greenplum数据库中时,被划分为32KB的页,每页有20字节的开销。
- 行开销:在常规堆表中,每行数据有24字节的行开销,AO表只有4字节的行开销。
- 列开销:对于数据值本身,与每个属性值关联的大小取决于所选的数据类型。一般来说,希望使用尽可能小的数据类型来存储数据。
- 索引:在Greenplum数据库中,索引以表数据的形式分布在Segment主机上,默认为B树索引。由于索引大小取决于索引中唯一值的数量和要插入的数据,因此不可能预先计算索引的确切大小,但可以使用下面的公式进行粗略估计:
B树索引: 唯一值个数 * (数据类型字节数 + 24字节) 位图索引: (唯一值个数 * 行数 * / 8 * 压缩率) + (唯一值个数 * 32)
4.2.3 元数据和日志空间需求
在每个Segment主机上,还有一些Greenplum数据库日志文件和系统元数据,相对于用户数据来说,它们所占空间很小。
- 系统元数据:每个Segment实例(Primary或Mirror)或Master实例的元数据约有20MB。
- 预写日志:对于每个Segment实例(Primary或Mirror)或Master实例,为预写日志(WAL)分配空间。WAL被划分为每个64MB的段文件,文件数量最多为:2 * checkpoint_segments + 1。可以使用它来估计WAL的空间需求,Greenplum数据库实例的默认checkpoint_segments为8,这意味着为主机上的每个实例分配1088MB的WAL空间。
- 数据库日志文件:每个Segment实例和Master实例生成的数据库日志文件将随时间增长。应为这些日志文件分配足够的空间,并使用日志轮换功能以确保日志文件不会增长过大。
4.2.4 RAID划分最佳实践
机械盘建议做RAID-5,一方面可以提高数据安全性,另一方面能缓解倾斜的影响。对于机械盘RAID-5一般采取如下方式配置:
- StripSize:Master建议32KB ~ 128KB,准确的选择可以根据测试情况来确定。如果无法确定,可以选择128KB。Segment建议256KB,这是经验值,具体设备的最优值可以根据测试来确定。
- WritePolicy:选择[Always Write Back]或称为[Force Write Back]。
- ReadPolicy:选择[Read Ahead]。
- Raid Cache比例:不建议调整,因为调整了反而综合性能往往会下降。
- Drive Cache:选择[Disable]。
- IO Policy:选择[Direct]。
- 系统盘:操作系统建议安装在单独的两块盘的RAID-1上。
- Hotspare:如果需要,建议做Global Hotspare。如果更换磁盘的流程不是很长,比如一两天就能更换故障磁盘,建议可以不配置Hotspare。Hotspare不是一定会带来好处,因为出现故障时,RAID的性能会有很大下降,且这个过程是自动的,无法根据业务情况灵活安排。
Master类主机的RAID划分参考如表4-1所示。
磁盘 | RAID类型 | 磁盘数量 | 设备号 | 可用容量 | 挂载点 | 用途 |
本地盘 | RAID-1 | 2 | /dev/sda | 2048MB | /boot | 操作系统 |
剩余尺寸 | / | |||||
RAID-5 | X+1+1 | /dev/sdb | 内存尺寸 | swap | SWAP | |
/dev/sdc | 剩余尺寸 | /data | 数据盘 |
表4-1 Master类主机RAID划分
Segment类主机的RAID划分参考如表4-2所示。
磁盘 | RAID类型 | 磁盘数量 | 设备号 | 可用容量 | 挂载点 | 用途 |
本地盘 | RAID-1 | 2 | /dev/sda | 2048MB | /boot | 操作系统 |
剩余尺寸 | / | |||||
RAID-5 | Y+1+1 | /dev/sdb | 内存尺寸/2 | swap | SWAP | |
/dev/sdc | 剩余尺寸 | /data1 | 数据盘 | |||
Y+1+1 | /dev/sdd | 内存尺寸/2 | swap | SWAP | ||
/dev/sde | 剩余尺寸 | /data2 | 数据盘 |
表4-2 Segment类主机RAID划分
生产环境一般都需要配置Mirror,一旦出现故障切换,Mirror被激活的主机将会消耗更多的内存资源,因此SWAP是对故障切换的一种保护。在配置Greenplum数据库时,在健康状态下不应该使用SWAP。如果镜像模式是group mirroring,SWAP尺寸应该与物理内存相同,如果是spread mirroring,一般可以设置SWAP尺寸为物理内存的1/N,N为单台主机上所有Segment实例数,包括Primary和Mirror。
由于SWAP的性能会极大影响计算效率,Greenplum要求将SWAP设置在性能最好的磁盘上。两块盘组成的RAID-1用作操作系统安装,其性能与数据盘的RAID-5相比差很多,因此不能将SWAP设置在操作系统盘上。
对于SSD或NVMe盘来说,以上关于性能的问题需要重新衡量,比如SWAP放在哪里,是否要做RAID等。一般来说,在不考虑安全要求的情况下,建议不做RAID,因为RAID的校验计算对于RAID卡的计算能力来说,会约束磁盘的性能发挥。如果条件允许,可能SSD或NVMe是更好的选择,这也是硬盘技术的未来趋势。机械盘在长期高压力下,故障率会很高,而SSD技术则会更稳定。
4.3 操作系统配置
本节说明如何为Greenplum数据库软件安装准备操作系统环境。安装环境的主机、软硬件信息如下:
- 主机信息如表4-3所示,所有主机在一个局域网内通过万兆网连接。
别名 | IP地址 | Greenplum角色 |
mdw | 114.112.77.198 | master、segment |
smdw | 114.112.77.199 | standby master、segment |
sdw3 | 114.112.77.200 | segment |
表4-3 主机信息
- 硬件配置:每台主机CPU 2 * 12核;内存128G;SSD用作Segment数据盘,可用空间7.4TB,机械盘用于Master数据盘,可用空间1.4T。
- 软件版本如表4-4所示。
名称 | 版本 |
操作系统 | CentOS Linux release 7.9.2009 (Core) |
JDK | openjdk version "1.8.0_282" |
Greenplum | 6.14.1 |
表4-4 系统软件版本
本专题后面的实践部分都是在本节描述主机环境中进行的。注意这只是个实验环境,生产环境中,Greenplum的Master、Standby Master、Segment应该部署在独立主机上,并且硬件配置,尤其是CPU核数与物理内存应该有所增加。
4.3.1 安装操作系统
根据实践总结,建议按照表4-5所示方式安装Linux操作系统,这也是目前的主流选择。
选项 | 要求 | |||
操作系统版本 | 7.3以上X86 64位服务器 | |||
目录及尺寸 | 挂载点 | 设备名 | 文件系统格式 | 尺寸 |
/boot | /sda1 | XFS | 2048MB | |
/ | /sda2 | XFS | 剩余全部 | |
SWAP | /sdb | SWAP | 内存尺寸/2 | |
SWAP | /sdd | SWAP | 内存尺寸/2 | |
语言选择 | English(United States) | |||
时区选择 | Asia/Shanghai | |||
软件选择 | File and Print Server | |||
附加组件选择 | Development Tools |
表4-5 Linux安装
如果在安装操作系统时,图形化引导界面中无法配置超过128GB的SWAP,可以先不配置,留在操作系统装好之后再配。Greenplum数据库使用的数据盘不需要在安装操作系统时配置(表4-5中未列出数据盘),可以在装好操作系统之后,在准备安装部署Greenplum数据库时再统一按照文件系统挂载要求进行配置。按本实验环境的主机规划,Master类主机只需要一个数据分区/data,存储介质为机械盘,可用空间1.4TB;Segment类主机需要两个数据分区/data1、/data2,分别用作Primary和Mirror,存储介质是SSD,可用空间各为3.7TB。
最好为Greenplum数据库的操作系统配置yum源。在部署Greenplum集群时,可能会有少量的软件包需要安装,对于未按照建议安装的操作系统,可能会有大量的软件包需要安装。
4.3.2 禁用SELinux和防火墙
对于运行RHEL或CentOS的主机系统,必须禁用SELinux,或将其配置为允许对Greenplum进程、目录和gpadmin用户进行无限制访问。在所有主机用root用户执行以下步骤禁用SELinux。
1. 检查SELinux状态
sestatus
2. 如果SELinux状态不是disabled,编辑/etc/selinux/config文件修改SELINUX参数值为disabled。
SELINUX=disabled
完成以上操作后需要重启系统以使配置生效。我们将在完成所有操作系统配置后再重启系统,一次性使所有配置生效。如要临时禁用SELinux,可执行下面的命令:
setenforce 0
还应该禁用Linux 6.x上的iptables,或7.x的firewalld等防火墙软件。如果未禁用防火墙,则必须将其配置为允许Greenplum主机之间进行所需的通信。在所有主机用root用户执行以下步骤禁用防火墙软件。
1. 检查防火墙状态
systemctl status firewalld
如果已禁用则输出如下:
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
2. 如果需要,禁用防火墙服务
systemctl stop firewalld.service
systemctl disable firewalld.service
4.3.3 操作系统推荐配置
Greenplum要求在系统的所有主机(Master类和Segment类)上设置某些Linux操作系统参数。通常需要更改以下类别的系统参数:
- 共享内存:除非内核的共享内存段大小合适,否则Greenplum数据库实例将无法工作。对于Greenplum数据库,大多数默认操作系统安装的共享内存值设置得太低。在Linux系统上还必须禁用OOM killer。
- 网络:在大容量Greenplum数据库系统上,必须设置某些与网络相关的参数,以优化Greenplum互连网络连接。
- 用户限制:用户限制控制由用户shell启动进程的可用资源。Greenplum数据库要求单个进程可以打开的文件描述符数值更高。默认设置可能会导致某些Greenplum数据库查询失败,因为它们将耗尽处理查询所需的文件描述符。
在所有主机用root用户执行以下步骤。
1. 设置主机名
编辑/etc/hosts文件,添加Greenplum系统中的所有IP、主机名、别名。Master别名为mdw,Standby Master别名为smdw,Segment别名为sdw1、sdw2 ...。
114.112.77.198 mdw
114.112.77.199 smdw
114.112.77.200 sdw3
2. 设置系统参数
编辑/etc/sysctl.conf文件,添加如下参数设置,然后执行sysctl -p使配置生效。
# 共享内存页
kernel.shmall = 32912094
kernel.shmmax = 134807937024
kernel.shmmni = 4096
# Segment主机内存溢出策略
vm.overcommit_memory = 2
vm.overcommit_ratio = 95
# 禁用端口范围
net.ipv4.ip_local_port_range = 10000 65535
kernel.sem = 500 2048000 200 4096
kernel.sysrq = 1
kernel.core_uses_pid = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.msgmni = 2048
net.ipv4.tcp_syncookies = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.conf.all.arp_filter = 1
net.core.netdev_max_backlog = 10000
net.core.rmem_max=33554432
net.core.wmem_max=33554432
vm.swappiness = 0
vm.zone_reclaim_mode = 0
vm.dirty_expire_centisecs = 500
vm.dirty_writeback_centisecs = 100
# 对于大于64GB内存的主机系统,推荐以下配置
vm.dirty_background_ratio = 0
vm.dirty_ratio = 0
vm.dirty_background_bytes = 1610612736 # 1.5GB
vm.dirty_bytes = 4294967296 # 4GB
vm.min_free_kbytes = 7898906
Greenplum数据库使用共享内存在属于同一postgres实例的postgres进程之间进行通信。shmall设置可在系统范围内使用的共享内存总量(以页为单位)。shmmax以字节为单位设置单个共享内存段的最大大小。根据系统的物理内存和页面大小设置kernel.shmall和kernel.shmmax值。通常这两个参数的值应为系统物理内存的一半。使用操作系统变量 _PHYS_PAGES和PAGE_SIZE设置参数:
kernel.shmall 设置为echo $(expr $(getconf _PHYS_PAGES) / 2)的值
kernel.shmmax 设置为echo $(expr $(getconf _PHYS_PAGES) / 2 \\* $(getconf PAGE_SIZE))的值
如果Greeplum的Master类主机和Segment类主机的物理内存大小不同,则对应主机上的kernel.shmall和kernel.shmmax值也将不同。
操作系统使用vm.overcommit_memory内核参数来确定可以为进程分配多少内存。对于Greenplum数据库,此参数应始终设置为2。vm.overcommit_ratio是用于应用程序进程的内存百分比,其余部分保留给操作系统。
为避免Greenplum数据库和其他应用程序发生端口冲突,Greenplum集群初始化时,不要指定参数net.ipv4.ip_local_port_range范围内的端口作为Greenplum数据库端口。
增加vm.min_free_kbytes以确保满足来自网络和存储驱动程序的PF_MEMALLOC请求,这对于具有大量系统内存的系统尤其重要。不要将vm.min_free_kbytes设置为高于系统内存的5%,这样做可能会导致内存不足。使用下面的awk命令将vm.min_free_kbytes设置为系统物理内存的3%:
awk 'BEGIN OFMT = "%.0f"; /MemTotal/ print "vm.min_free_kbytes =", $2 * .03;' /proc/meminfo >> /etc/sysctl.conf
3. 设置资源限制
Linux模块pam_limits通过读取limits.conf文件或20-nproc.conf文件(Linux 7)中的值来设置用户限制,确保文件中的所有参数都设置为所需值。编辑/etc/security/limits.d/20-nproc.conf文件,添加(或修改)如下参数设置。执行ulimit -a确认当前配置。
* soft nofile 524288
* hard nofile 524288
* soft nproc 131072
* hard nproc 131072
4. 设置XFS文件系统mount选项
编辑/etc/fstab文件,添加XFS文件系统mount选项为rw,nodev,noatime,nobarrier,inode64,例如:
/dev/data /data xfs rw,nodev,noatime,nobarrier,inode64 0 0
/dev/data1 /data1 xfs rw,nodev,noatime,nobarrier,inode64 0 0
/dev/data2 /data2 xfs rw,nodev,noatime,nobarrier,inode64 0 0
重新mount使配置生效,例如:
mount -o remount /data
mount -o remount /data1
mount -o remount /data2
# 查看
mount
5. 设置预读值
每个磁盘设备文件的预读(blockdev)值应为16384。
# 获取值,例如:
/sbin/blockdev --getra /dev/sdb1
# 设置值,例如:
/sbin/blockdev --setra 16384 /dev/sdb1
将设置命令添加到/etc/rc.d/rc.local文件,并将该文件设置为可执行,使得系统重启自动执行。
chmod +x /etc/rc.d/rc.local
6. 设置磁盘IO调度策略
用于磁盘访问的Linux磁盘IO调度程序支持不同的策略,如CFQ、AS和deadline。建议使用deadline scheduler选项,例如:
echo deadline > /sys/block/sdb/queue/scheduler
echo mq-deadline > /sys/block/nvme0n1/queue/scheduler
echo mq-deadline > /sys/block/nvme1n1/queue/scheduler
将设置命令添加到/etc/rc.d/rc.local文件,使得系统重启时自动执行。按照以下官方文档中描述的方法,在我的环境中重启后无效:
# 设置
grubby --update-kernel=ALL --args="elevator=mq-deadline"
# 查看
grubby --info=ALL
7. 禁用透明大页面
RHEL 6.0或更高版本默认启用透明大页面(Transparent Huge Pages,THP),它会降低Greenplum数据库的性能。
# 查看当前配置
cat /sys/kernel/mm/transparent_hugepage/enabled
# 设置
echo never > /sys/kernel/mm/transparent_hugepage/enabled
# 使得系统重启自动生效
grubby --update-kernel=ALL --args="transparent_hugepage=never"
# 查看
grubby --info=ALL
8. 禁止IPC对象删除
禁用RHEL 7.2或CentOS 7.2的IPC对象删除。当非系统用户帐户注销时,默认的systemd设置RemoveIPC=yes会删除IPC连接,这会导致gpinitsystem程序因信号量错误而失败。执行以下操作以避免此问题。
编辑/etc/systemd/logind.conf文件,设置RemoveIPC参数:
RemoveIPC=no
重启服务使配置生效:
service systemd-logind restart
9. 设置SSH连接数阈值
某些Greenplum数据库管理实用程序,如gpexpand、gpinitsystem和gpaddmirrors,在系统之间使用SSH连接来执行其任务。在大型Greenplum数据库部署、云部署或每个主机具有大量Segment的部署中,这些实用程序可能会超过主机未经身份验证连接的最大阈值,发生这种情况时会收到错误:
ssh_exchange_identification: Connection closed by remote host.
更新/etc/ssh/sshd_config文件中的MaxStartups和MaxSessions配置参数增加连接阈值。
MaxStartups 10:30:200
MaxSessions 200
使用“start:rate:full”语法指定MaxStartups,可以通过SSH守护进程启用随机早期连接断开。start标识在断开连接前允许的最大未经验证的SSH连接尝试次数。一旦达到未经验证的连接尝试的开始次数,SSH守护进程将拒绝后续连接尝试的百分比。full标识未经验证的连接尝试的最大次数,在此之后所有尝试都被拒绝。
重启服务使配置生效:
systemctl reload sshd.service
10. 确认或配置时区
date命令的输出应该为东八区,例如:Thu Feb 25 08:13:00 CST 2021。如果在安装操作系统时设置的时区有误,可以执行tzselect命令更改时区,依次选择 Asia -> China -> Beijing Time -> YES。一定要在安装Greenplum前确保时区设置正确,因为在Greenplum系统初始化后,LC_COLLATE、LC_CTYPE的值不能再更改。
4.3.4 时钟同步
应该使用NTP网络时间协议同步构成Greenplum集群的所有主机的系统时钟。Segment主机上的NTP应配置为使用Master主机作为主时间源,Standby Master主机作为辅助时间源。在Master主机和Standby Master主机上,将NTP配置为指向首选时间服务器。
1. 在mdw主机的/etc/ntp.conf文件中添加NTP服务器
server 101.251.209.250
2. 在smdw主机的/etc/ntp.conf文件中添加NTP服务器
server mdw prefer
server 101.251.209.250
3. 在sdw3主机的/etc/ntp.conf文件中添加NTP服务器
server mdw prefer
server smdw
4. 在所有主机启动ntpd服务并查看时间同步状态
systemctl disable chronyd
systemctl enable ntpd
systemctl start ntpd
ntpstat
4.3.5 创建Greenplum管理员账号
不能以root用户身份运行Greenplum数据库服务器,因此需要在每个节点上创建专用的操作系统用户帐户,以运行和管理Greenplum数据库,按照惯例,此用户帐户名为gpadmin。gpadmin用户必须具有访问安装和运行Greenplum数据库所需的服务和目录的权限。
每个Greenplum主机上的gpadmin用户必须配置SSH密钥对,并且集群中的任何主机都能够免密SSH到群集中的任何主机。可以选择授予gpadmin用户sudo权限,以便可以使用sudo、ssh、scp、gpssh、gpscp命令以gpadmin身份管理Greenplum数据库集群中的所有主机。
以下步骤显示如何在主机上设置gpadmin用户、设置密码、创建SSH密钥对以及启用可选的sudo功能。
1. 建立组和用户
注意确保gpadmin用户在每个主机上具有相同的用户id(uid)和组id(gid),以防止使用它们进行标识的脚本或服务出现问题。如果gpadmin用户在不同的Segment主机上具有不同的uid或gid,则将Greenplum数据库备份到某些网络文件系统或存储设备时可能会失败。创建gpadmin组和用户时,可以使用groupadd -g选项指定gid,使用useradd -u选项指定uid。使用命令id gpadmin查看当前主机上gpadmin用户的uid和gid。
groupadd -r -g 1001 gpadmin
useradd gpadmin -r -m -g gpadmin -u 1001
passwd gpadmin
chown -R gpadmin:gpadmin /data
chown -R gpadmin:gpadmin /data1
chown -R gpadmin:gpadmin /data2
2. 生成SSH密钥对
切换到gpadmin用户并为gpadmin用户生成SSH密钥对。在提示输入passphrase时按会车,以便SSH连接不需要输入密码短语。
su gpadmin
ssh-keygen -t rsa -b 4096
3. 授予gpadmin用户sudo访问权限
执行visudo命令,去掉下行的注释:
# %wheel ALL=(ALL) NOPASSWD: ALL
将gpadmin用户添加到wheel组:
usermod -aG wheel gpadmin
4.3.6 安装JDK(可选)
# 查找yum资源库中的java包
yum search java | grep -i --color JDK
# 安装Java 1.8
yum install -y java-1.8.0-openjdk.x86_64 java-1.8.0-openjdk-devel.x86_64
# 验证安装
java -version
重启主机使所有配置生效。
4.4 安装Greenplum软件
本节说明如何在构成Greenplum集群的所有主机上安装Greenplum数据库软件二进制文件,如何为gpadmin用户启用免密SSH,以及如何验证安装。
4.4.1 安装Greenplum软件包
在所有主机用root用户执行以下步骤。
1. 下载安装包
wegt https://github.com/greenplum-db/gpdb/releases/download/6.14.1/open-source-greenplum-db-6.14.1-rhel7-x86_64.rpm
2. 安装
yum -y install ./open-source-greenplum-db-6.14.1-rhel7-x86_64.rpm
3. 修改安装目录的属主和组
chown -R gpadmin:gpadmin /usr/local/greenplum*
chgrp -R gpadmin /usr/local/greenplum*
在RHEL/CentOS系统上,可以使用带有--prefix选项的rpm命令将Greenplum安装到非默认目录(而不是在/usr/local下)。但是使用rpm不会自动安装Greenplum数据库依赖项,所以必须手动将依赖项安装到每个主机系统。要将Greenplum安装到指定目录,在所有主机用root用户执行以下步骤。
# 手动安装依赖
yum install apr apr-util bash bzip2 curl krb5 libcurl libevent libxml2 libyaml zlib openldap openssh openssl openssl-libs perl readline rsync R sed tar zip
# 使用带有--prefix选项的rpm命令指定安装目录
rpm --install ./open-source-greenplum-db-6.14.1-rhel7-x86_64.rpm
# 修改安装目录的属主和组
chown -R gpadmin:gpadmin <directory>/greenplum*
4.4.2 配置免密SSH
在Greenplum集群中的任何主机上的gpadmin用户,必须能够通过SSH免密连接到集群中的任何主机。如果启用了从Master主机到集群中其他每台主机的免密SSH(“1-n免密SSH”),则可以使用Greenplum的gpssh exkeys命令行实用程序启用从每台主机到其他每台主机的免密SSH(“n-n免密SSH”)。
在mdw主机用gpadmin用户执行以下步骤。
1. 设置Greenplum环境
source /usr/local/greenplum-db/greenplum_path.sh
2. 启用1-n 免密SSH
# 将当前用户的公钥拷贝到集群中其他主机的authorized_hosts文件中
ssh-copy-id mdw
ssh-copy-id smdw
ssh-copy-id sdw3
3. 在gpadmin用户主目录创建名为all_host的文件,内容为所有Greenplum主机名。
mdw
smdw
sdw3
4. 启用n-n 免密SSH
gpssh-exkeys -f all_host
4.4.3 确认软件安装
要确保Greenplum软件已正确安装和配置,在mdw主机执行以下确认步骤。如有必要,在继续执行下一项任务之前纠正所有问题。
su - gpadmin
gpssh -f all_host -e 'ls -l /usr/local/greenplum-db-6.14.1'
如果安装成功,应该能够在没有密码提示的情况下登录到所有主机。所有主机都应该显示Greenplum安装目录中有相同的内容,并且这些目录的属主都是gpadmin用户。
Greenplum安装目录下包含以下文件或目录:
- greenplum_path.sh:此文件包含greenplum数据库的环境变量。
- bin:此目录包含Greenplum数据库管理实用程序,还包含PostgreSQL客户端和服务器程序,其中大多数程序也用于Greenplum。
- docs/cli_help:此目录包含Greenplum命令行实用程序的帮助文件。
- docs/cli_help/gpconfigs:此目录包含示例gpinitsystem配置文件和主机文件,可在安装和初始化Greenplum数据库系统时修改和使用这些文件。
- ext:一些Greenplum数据库实用程序使用的捆绑程序(如Python)。
- include:C头文件。
- lib:Greenplum和PostgreSQL库文件。
- sbin:支持/内部脚本和程序。
- share:Greenplum数据库的共享文件。