暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Greenplum6.8.1安装

原创 easonhyj 2025-02-25
255

前言: 单位有套年代久远的Greenplum集群,接手后一直没怎么处理(也不知道怎么处理)。最近业务系统频繁出现访问卡顿,于是便想着搭建一套环境用于测试

Greenplum简介

Greenplum是一款基于分布式架构的开源数据库;采用无共享(no shareing)的MPP架构(每个数据节点拥有独立的CPU、IO和内存等资源);其具有良好的线性扩展能力,具有高效的并行运算、并行存储特性。拥有独特的高效的ORCA优化器。非常适合用于PB数据量级的存储、处理和实时分析能力。Greenplum是基于PostgreSQL数据库发展而来,本质上是多个PostgreSQL面向磁盘的数据库实例一起工作形成的一个紧密结合的数据库管理系统(DBMS),同时支持涵盖OLTP型业务混合负载,数据节点和主节点均可设计备份节点,进而提供数据库的高可用性。

Greenplum架构

Greenplum由Master节点<协调节点>和Segment节点<数据节点>以及高速网络层三部分组成

  • Master Host: 又称协调节点,是整个Greenplum数据库系统的入口。负责接受来自客户端连接请求,对SQL语句生成查询计划,并将查询计划分发至涉及的Segment实例上,收集Segment实例返回的结果并呈现给客户端。同时Master记录集群中的元数据信息,包括各种全局系统系统表,但Master上不存储任何用户数据,数据只存在于Segment之上。
  • Standby: Master的备库,在Master 发生故障不可提供服务时可promote Standby继续提供服务,保证集群的高可用,正常情况下Standby上进行只读操作,且时时同步Master的元数据。
  • Primary segment: 数据节点,其功能是存放并管理数据库中的数据,接收Master分发下来的执行计划,执行返回结果给Master节点。
  • Mirror segment: Primary segment节点的备库以保障高可用性;通常跟对应的Primary segment节点不在同一台机器上。在segment节点出现故障,mirror segment自动接管进行工作。但是为了数据库平稳;尽快恢复出现故障的segment。
  • Interconnet: Interconect是Greenplum数据库架构中的网络层,是Segment之间的进程间通信以及这种通信所依赖的网络基础设施。 Greenplum的Interconnect使用带流控制的用户数据包协议(UDPIFC)在网络上发送消息,可靠性和可扩展性超于TCP。之所以采用UDP,是因为Interconnect改为TCP,当Segment实例超过1000个时其可扩展性会受到限制,而对于Interconnect的默认协议UDPIFC则不存在这种限制。

Greenplum集群部署

本次采用的是4台机器组成的集群,操作系统版本为Centos7.9

服务器IP地址 节点名称
192.168.124.175 minio1
192.168.124.176 minio2
192.168.124.177 minio3
192.168.124.178 minio4

其中175为master节点,176为standby节点,175-178共4台为segment节点

环境准备

关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

关闭selinux

sed -ri '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config
setenforce 0    (临时关闭)

配置hosts解析文件

192.168.124.175 minio1
192.168.124.176 minio2
192.168.124.177 minio3
192.168.124.178 minio4

安装依赖包

直接生成需要安装的依赖包命令

rpm -q apr apr-util bash bzip2 curl krb5 libcurl libevent libxml2 libyaml zlib openldap openssh-client openssl openssl-libs perl readline rsync R sed tar zip krb5-devel | grep "is not installed" | awk '{print $2}' | xargs echo yum install -y

sysctl参数配置

共享内存
kernel.shmall = ( _PHYS_PAGES / 2)
kernel.shmmax = ( _PHYS_PAGES / 2) * PAGE_SIZE
通过以下命令计算

echo $(expr $(getconf _PHYS_PAGES) / 2) 
echo $(expr $(getconf _PHYS_PAGES) / 2 \* $(getconf PAGE_SIZE))

segment主机内存

vm.overcommit_memory 系统使用该参数来确定可以为进程分配多少内存。对于GP数据库,此参数应设置为2。  
vm.overcommit_ratio 以为进程分配内的百分比,其余部分留给操作系统。默认值为50。建议设置95(根据主机内存大小自行设置)

系统内存
对于内存超过 64GB 的主机系统,建议采用以下设置:

vm.dirty_background_ratio = 0
vm.dirty_ratio = 0
vm.dirty_background_bytes = 1610612736 # 1.5GB
vm.dirty_bytes = 4294967296 # 4GB

对于内存为 64GB 或更少的主机系统,删除vm.dirty_background_bytesvm.dirty_bytes,并将两个ratio参数设置为以下值:

vm.dirty_background_ratio = 3
vm.dirty_ratio = 10

增加vm.min_free_kbytes以确保PF_MEMALLOC轻松满足来自网络和存储驱动程序的请求。这对于具有大量系统内存的系统尤其重要。这些系统的默认值通常太低

awk 'BEGIN {OFMT = "%.0f";} /MemTotal/ {print "vm.min_free_kbytes =", $2 * .03;}' /proc/meminfo >> /etc/sysctl.conf 

IP Fragmentation设置

net.ipv4.ipfrag_high_thresh = 41943040
net.ipv4.ipfrag_low_thresh = 31457280
net.ipv4.ipfrag_time = 60

systectl.conf完整参数配置

#共享内存设置
kernel.shmall = 485033
kernel.shmmax = 1986695168 # 这里的俩个参数为该节点第一步分别计算出的数据
kernel.shmmni = 4096

# See Segment Host Memory           
vm.overcommit_memory = 2
vm.overcommit_ratio = 90

# 系统内存
vm.dirty_background_ratio = 3
vm.dirty_ratio = 10
vm.dirty_expire_centisecs = 500
vm.dirty_writeback_centisecs = 100
vm.zone_reclaim_mode = 0
vm.min_free_kbytes = 116408

# See Port Settings 端口设定
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 = 2097152
net.core.wmem_max = 2097152
vm.swappiness = 10

sysctl -p使配置生效

资源限制

在文件中设置以下参数/etc/security/limits.conf:

* soft nofile 524288
* hard nofile 524288
* soft nproc 131072
* hard nproc 131072

在rhel系的系统中,/etc/security/limits.d/目录下的配置文件,会覆盖/etc/security/limits.conf文件中的配置。设置完可重新登陆系统,使用ulimit -a查看配置是否生效

内核转储

/etc/sysctl.conf添加以下内容并加载内核 sysctl -p

kernel.core_pattern=/var/core/core.%h.%t

/etc/security/limits.conf添加以下内容:

* soft  core unlimited

磁盘I/O设置

I/O预读

#获取预读值
/sbin/blockdev --getra <devname>
#设置预读值
/sbin/blockdev --setra 16384 /dev/sda

# 永久设置
vim /etc/rc.d/rc.local
/sbin/blockdev --setra 16384 /dev/sda

chmod +x /etc/rc.d/rc.local

I/O调度

grubby --update-kernel=ALL --args="elevator=deadline"

列出所有内核参数: grubby --info=ALL

THP

  • 方法1
vim /etc/rc.local         //添加如下内容
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
 echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
 echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
  • 方法2
# 在GRUB_CMDLINE_LINUX加入选项 transparent_hugepage=never
vim etc/default/grub      
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="rd.lvm.lv=fedora/swap rd.lvm.lv=fedora/root rhgb quiet transparent_hugepage=never"
GRUB_DISABLE_RECOVERY="true"
# 根据启动方式,重新生成grub配置文件
grub2-mkconfig -o /boot/grub2/grub.cfg      //bios
grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg       //uefi
#重启
reboot
# 确认结果,显示为never
cat /sys/kernel/mm/transparent_hugepage/enabled
cat /sys/kernel/mm/transparent_hugepage/defrag

SSH连接阈值

调大ssh连接数

vim /etc/ssh/sshd_config
MaxSessions 200
MaxStartups 100:30:1000

重启ssh:systemctl restart sshd

IPS设置

vim /etc/systemd/logind.conf
RemoveIPC=no

systemctl restart systemd-logind.service
service systemd-logind restart

修改字符集

echo $LANG
# 如果不是en_US.UTF-8的,执行下面语句
localectl set-locale LANG=en_US.UTF-8

安装Greenplum

除特殊指出的步骤,以下操作都在master节点上进行

创建用户

在每个节点上创建gpadmin用户,确保gpadmin用户在每个主机上具有相同的用户 ID (uid) 和组 ID (gid) 编号

groupadd -g 1530 gpadmin

useradd -u 1530 gpadmin -r -m -g gpadmin

passwd gpadmin

生成密钥

su - gpadmin
ssh-keygen -t rsa 

授权sudo权限

给gpadmin设置用户具有root权限,方便后期加sudo执行root权限的命令

visudo
gpadmin         ALL=(ALL)       NOPASSWD: ALL

安装软件

在所有节点安装数据软件,并更改数据库目录为gpadmin用户

sudo yum install ./greenplum-db-<version>-<platform>.rpm
sudo chown -R gpadmin:gpadmin /usr/local/greenplum*
sudo chgrp -R gpadmin /usr/local/greenplum*

ssh免密

gpadmin用户登陆mastter主机

source /usr/local/greenplum-db-<version>/greenplum_path.sh

ssh-copy-id minio1
ssh-copy-id minio2
ssh-copy-id minio3
ssh-copy-id minio4

创建主机列表文件

vim hostfile_exkeys
minio1
minio2
minio3
minio4

互免密登陆

gpssh-exkeys -f hostfile_exkeys

确认安装环境

gpadmin用户登陆master节点,运行下面命令,能正常显示各节点的gp目录和权限

gpssh -f hostfile_exkeys -e 'ls -l /usr/local/greenplum-db-<version>'

配置环境变量

vim /home/gpadmin/.bashrc
source /usr/local/greenplum-db/greenplum_path.sh
export PGPORT=5432
export MASTER_DATA_DIRECTORY=/gpdata/master/gpseg-1
export PGDATABASE=zndb

source /home/gpadmin/.bashrc

创建数据目录

master

mkdir -p /gpdata/master
chown gpadmin:gpadmin /gpdata/master

standby master

source /usr/local/greenplum-db/greenplum_path.sh 
mkdir -p /gpdata/master
chown gpadmin:gpadmin /gpdata/master

segment节点

source /usr/local/greenplum-db/greenplum_path.sh 
mkdir -p /gpdata/primary
mkdir -p /gpdata/mirror
chown -R gpadmin:gpadmin /gpdata/*

初始化数据

以gpadmin用户登陆master,并设置环境变量

su - gpadmin
source /usr/local/greenplum-db/greenplum_path.sh

创建初始化主机文件

vim hostfile_gpinitsystem
minio1
minio2
minio3
minio4

创建初始化配置文件

复制示例文件

cp $GPHOME/docs/cli_help/gpconfigs/gpinitsystem_config  /home/gpadmin/gpconfigs/gpinitsystem_config

编辑配置文件

vim gpinitsystem_config # FILE NAME: gpinitsystem_config # Configuration file needed by the gpinitsystem ################################################ #### REQUIRED PARAMETERS ################################################ #### Name of this Greenplum system enclosed in quotes. ARRAY_NAME="Greenplum Data Platform" #### Naming convention for utility-generated data directories. SEG_PREFIX=gpseg #### Base number by which primary segment port numbers #### are calculated. PORT_BASE=16000 #### File system location(s) where primary segment data directories #### will be created. The number of locations in the list dictate #### the number of primary segments that will get created per #### physical host (if multiple addresses for a host are listed in #### the hostfile, the number of segments will be spread evenly across #### the specified interface addresses). declare -a DATA_DIRECTORY=(/gpdata/primary /gpdata/primary) #### OS-configured hostname or IP address of the master host. MASTER_HOSTNAME=minio1 #### File system location where the master data directory #### will be created. MASTER_DIRECTORY=/gpdata/master #### Port number for the master instance. MASTER_PORT=5432 #### Shell utility used to connect to remote hosts. TRUSTED_SHELL=ssh #### Maximum log file segments between automatic WAL checkpoints. CHECK_POINT_SEGMENTS=8 #### Default server-side character set encoding. ENCODING=UNICODE ################################################ #### OPTIONAL MIRROR PARAMETERS ################################################ #### Base number by which mirror segment port numbers #### are calculated. MIRROR_PORT_BASE=17000 #### File system location(s) where mirror segment data directories #### will be created. The number of mirror locations must equal the #### number of primary locations as specified in the #### DATA_DIRECTORY parameter. declare -a MIRROR_DATA_DIRECTORY=(/gpdata/mirror /gpdata/mirror) ################################################ #### OTHER OPTIONAL PARAMETERS ################################################ #### Create a database of this name after initialization. DATABASE_NAME=zndb #### Specify the location of the host address file here instead of #### with the -h option of gpinitsystem. #MACHINE_LIST_FILE=/home/gpadmin/gpconfigs/hostfile_gpinitsystem

初始化

gpinitsystem -c gpinitsystem_config -h hostfile_gpinitsystem -s minio2 --mirror-mode=spread

如果初始化发生错误,建议查看日志,路径:~/gpAdminLogs/gpinitsystem_202XXXX.log

如果存在需要清理后再重新安装的,请检查是否存在回退脚本~/gpAdminLogs/backout_gpinitsystem_<user>_<timestamp>,执行后再重新运行初始化脚本;不存在该脚本,可以删除创建的数据目录后重新初始化

设置时区

gpconfig -s TimeZone
gpconfig -c TimeZone -v 'Asia/Shanghai'

允许客户端连接

修改master节点pg_hba.conf文件,添加允许远程登陆权限

vim /gpdata/master/gpseg-1/pg_hba.conf
...

host all    all  192.168.124.0/24 md5


# 重新加载配置文件
gpstop -u 

至此,Greenplum的安装已经完成。以上过程有不足之处,请参考官方文档

验证集群

登陆数据库并查看复制状态

操作系统成查看集群状态

远程登陆数据库

修改密码

psql -d postgres

alter user gpadmin with password 'gpadmin';

dbeaver登陆数据库

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论