Greenplum 6 安装配置详解
时间:2023-05-06 12:37:00
目录
一、主机规划
二、平台需求
三、操作系统配置
1. 禁用SELinux和防火墙
2. 系统配置
3. 同步系统时钟
4. 创建gpadmin账户
5. 安装Java(可选)
四、安装Greenplum数据库软件
1. 安装Greenplum数据库
2. 配置免密SSH
3. 确认软件安装
五、创建数据存储区
1. 在master和standby master创建数据存储区的主机
2. 在segment创建数据存储区的主机
六、验证系统
1. 验证网络性能
2. 验证磁盘I/O内存带宽性能
七、初始化Greenplum数据库系统
1. 初始化Greenplum数据库
2. 设置Greenplum环境变量
3. 允许客户端连接
4. 修改参数
八、后续
参考:
一、主机规划
114.112.77.199 master、segment
210.73.209.103 standby master、segment
140.210.73.67 segment
2.平台需求
1. 操作系统
CentOS 64-bit 7.3及以上版本,将swap设置和内存一样大。
2. 依赖软件包
apr apr-util bash bzip2 curl krb5 libcurl libevent libxml2 libyaml zlib openldap openssh openssl openssl-libs perl readline rsync R sed tar zip
3. Java
Open JDK 8 or Open JDK 11
4. 硬件和网络
(1)最小物理内存16G
(2)集群中所有主机在同一局域网内(连接万兆交换机),建议每台主机至少制作两张万兆网卡bonding mode4。
(3)使用数据分区XFS文件系统。master、standby master主机只需要一个数据分区/data,segment主机需要两个数据分区/data1、/data2,用作primary和mirror。
官方文档:http://docs.greenplum.org/6-12/install_guide/platform-requirements.html
5. 用户数据空间计算
磁盘空间 * 0.7 = 可用空间 = (2 * 用户数据空间
其中:
2 * 用户数据空间 primary mirror 所需空间。
用户数据空间/3 (work space)所需空间。
举例:
磁盘空间=2T,用户数据的可用空间=2T*0.7*3/7=600G。
官方文档:http://docs.greenplum.org/6-12/install_guide/capacity_planning.html
3.操作系统配置
1. 禁用SELinux和防火墙
在所有主机用root用户执行以下步骤。
(1)检查SELinux状态
sestatus
(2)如果SELinux状态不是disabled,编辑/etc/selinux/config文件修改SELINUX参数值为disabled。
SELINUX=disabled
# 禁用SELinux
setenforce 0
(3)检查防火墙状态
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)
(4)如果需要,禁用防火墙服务
systemctl stop firewalld.servicesystemctl disable firewalld.service
2. 系统配置
在所有主机用root用户执行以下步骤。
(1)设置主机名
编辑/etc/hosts文件,添加Greenplum中的所有IP、主机名、别名。master别名为mdw,standby master别名为smdw,segment别名为sdw1、sdw2 ...。
(2)设置系统参数
编辑/etc/sysctl.conf文件,添加如下参数设置:
kernel.shmall = 197951838 # 设置为echo $(expr $(getconf _PHYS_PAGES) / 2)的值kernel.shmmax = 810810728448 # 设置为echo $(expr $(getconf _PHYS_PAGES) / 2 \* $(getconf PAGE_SIZE))的值kernel.shmmni = 4096vm.overcommit_memory = 2vm.overcommit_ratio = 95net.ipv4.ip_local_port_range = 10000 65535kernel.sem = 500 2048000 200 4096kernel.sysrq = 1kernel.core_uses_pid = 1kernel.msgmnb = 65536kernel.msgmax = 65536kernel.msgmni = 2048net.ipv4.tcp_syncookies = 1net.ipv4.conf.default.accept_source_route = 0net.ipv4.tcp_max_syn_backlog = 4096net.ipv4.conf.all.arp_filter = 1net.core.netdev_max_backlog = 10000net.core.rmem_max = 2097152net.core.wmem_max = 2097152vm.zone_reclaim_mode = 0vm.dirty_expire_centisecs = 500vm.dirty_writeback_centisecs = 100# 大于64G内存推荐vm.dirty_background_ratio = 0 # See System Memoryvm.dirty_ratio = 0vm.dirty_background_bytes = 1610612736 # 1.5GBvm.dirty_bytes = 4294967296 # 4GB
配置vm.min_free_kbytes
awk 'BEGIN {OFMT = "%.0f";} /MemTotal/ {print "vm.min_free_kbytes =", $2 * .03;}' /proc/meminfo >> /etc/sysctl.conf
使配置生效:
sysctl -p
(3)设置资源限制
编辑/etc/security/limits.d/20-nproc.conf文件,添加(或修改)如下参数设置:
* soft nofile 524288* hard nofile 524288* soft nproc 131072* hard nproc 131072
# 查看
ulimit -a
(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 -o remount /datamount -o remount /data1mount -o remount /data2
# 查看
mount
(5)设置预读值为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调度策略
例如:
echo deadline > /sys/block/sdb/queue/schedulerecho mq-deadline > /sys/block/nvme0n1/queue/schedulerecho mq-deadline > /sys/block/nvme1n1/queue/scheduler
将设置命令添加到/etc/rc.d/rc.local文件,使得系统重启自动执行。
# 以下方法重启后无效grubby --update-kernel=ALL --args="elevator=mq-deadline"grubby --info=ALL
(7)禁用透明大页面(THP)
# 查看当前配置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对象删除
编辑/etc/systemd/logind.conf文件,设置RemoveIPC参数:
RemoveIPC=no
重启服务使配置生效:
service systemd-logind restart
(9)设置SSH连接数阈值
编辑/etc/ssh/sshd_config文件,设置以下参数:
MaxStartups 10:30:200MaxSessions 200
重启服务使配置生效:
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的值不能再更改。
3. 同步系统时钟
(1)在master主机的/etc/ntp.conf文件中添加NTP服务器
server 101.251.209.250
(2)在standby master主机的/etc/ntp.conf文件中添加NTP服务器
server mdw prefer
server 101.251.209.250
(3)在所有segment主机的/etc/ntp.conf文件中添加NTP服务器
server mdw prefer
server smdw
(4)在所有主机启动ntpd服务并查看时间同步状态
systemctl disable chronydsystemctl enable ntpdsystemctl start ntpdntpstat
4. 创建gpadmin账户
(1)建立组和用户
groupadd -r -g 1001 gpadminuseradd gpadmin -r -m -g gpadmin -u 1001passwd gpadminchown -R gpadmin:gpadmin /datachown -R gpadmin:gpadmin /data1chown -R gpadmin:gpadmin /data2
(2)生成SSH密钥对
su gpadminssh-keygen -t rsa -b 4096
(3)授予gpadmin用户sudo访问权限
visudo
去掉下行的注释:
# %wheel ALL=(ALL) NOPASSWD: ALL
将gpadmin用户添加到wheel组:
usermod -aG wheel gpadmin
5. 安装Java(可选)
# 查找yum资源库中的java包yum search java | grep -i --color JDK# 安装Java 1.8yum install -y java-1.8.0-openjdk.x86_64 java-1.8.0-openjdk-devel.x86_64 # 验证安装java -version
重启主机使所有配置生效。
官方文档:http://docs.greenplum.org/6-12/install_guide/prep_os.html
四、安装Greenplum数据库软件
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*
2. 配置免密SSH
在master主机用gpadmin用户执行以下步骤。
(1)设置Greenplum环境
source /usr/local/greenplum-db/greenplum_path.sh
(2)启用1-n SSH免密
# 将当前用户的公钥拷贝到集群中其它主机的authorized_hosts文件中ssh-copy-id mdwssh-copy-id smdwssh-copy-id sdw1ssh-copy-id sdw2ssh-copy-id sdw3...
(3)在gpadmin用户主目录创建名为all_host的文件,内容为所有Greenplum主机名,例如:
mdwsmdwsdw3
(4)启用n-n SSH免密
gpssh-exkeys -f all_host
3. 确认软件安装
在master主机用gpadmin用户执行以下步骤。
gpssh -f all_host -e 'ls -l /usr/local/greenplum-db-'
如果Greenplum安装成功,应该能够在没有密码提示的情况下登录到所有主机。
官方文档:http://docs.greenplum.org/6-12/install_guide/install_gpdb.html
五、创建数据存储区
1. 在master和standby master主机创建数据存储区
在master主机用gpadmin用户执行以下命令。
mkdir -p /data/masterchown gpadmin:gpadmin /data/mastersource /usr/local/greenplum-db/greenplum_path.sh gpssh -h smdw -e 'mkdir -p /data/master'gpssh -h smdw -e 'chown gpadmin:gpadmin /data/master'
2. 在segment主机创建数据存储区
在master主机用gpadmin用户执行以下步骤。
(1)创建名为seg_host的文件,内容为所有segment主机名,例如:
sdw1sdw2sdw3sdw4
(2)一次在所有segment主机上创建主和镜像数据目录位置
source /usr/local/greenplum-db/greenplum_path.sh gpssh -f seg_host -e 'mkdir -p /data1/primary'gpssh -f seg_host -e 'mkdir -p /data1/mirror'gpssh -f seg_host -e 'mkdir -p /data2/primary'gpssh -f seg_host -e 'mkdir -p /data2/mirror'gpssh -f seg_host -e 'chown -R gpadmin /data1/*'gpssh -f seg_host -e 'chown -R gpadmin /data2/*'
官方文档:http://docs.greenplum.org/6-12/install_guide/create_data_dirs.html
六、验证系统
1. 验证网络性能
在master主机用gpadmin用户执行以下步骤。
(1)设置Greenplum环境
source /usr/local/greenplum-db/greenplum_path.sh
(2)检查点对点网络传输速度:
# 双向同时发包,适合偶数个网口的情况gpcheckperf -f all_host -r N -d /tmp > subnet.out# 单向顺序发包,适合奇数或偶数个网口的情况gpcheckperf -f all_host -r n -d /tmp > subnet.out
gpcheckperf -f all_host -r M -d /tmp > subnet.out
结果应该大于100MB/s。
2. 验证磁盘I/O和内存带宽性能
在master主机用gpadmin用户执行以下步骤。
(1)设置Greenplum环境
source /usr/local/greenplum-db/greenplum_path.sh
(2)检查磁盘I/O(dd)和内存带宽(stream)性能
gpcheckperf -f seg_host -r ds -D -d /data1/primary -d /data2/primary -d /data1/mirror -d /data2/mirror > io.out
官方文档:http://docs.greenplum.org/6-12/install_guide/validate.html
七、初始化Greenplum数据库系统
1. 初始化Greenplum数据库
在master主机用gpadmin用户执行以下步骤。
(1)设置Greenplum环境
source /usr/local/greenplum-db/greenplum_path.sh
(2)创建Greenplum数据库配置文件
# 复制Greenplum数据库配置文件cp $GPHOME/docs/cli_help/gpconfigs/gpinitsystem_config /home/gpadmin/gpinitsystem_config# 编辑/home/gpadmin/gpinitsystem_config文件内容如下ARRAY_NAME="Greenplum Data Platform"SEG_PREFIX=gpsegPORT_BASE=6000declare -a DATA_DIRECTORY=(/data1/primary /data1/primary /data1/primary /data2/primary /data2/primary /data2/primary)MASTER_HOSTNAME=mdwMASTER_DIRECTORY=/data/masterMASTER_PORT=5432TRUSTED_SHELL=sshCHECK_POINT_SEGMENTS=8ENCODING=UNICODEMIRROR_PORT_BASE=7000declare -a MIRROR_DATA_DIRECTORY=(/data1/mirror /data1/mirror /data1/mirror /data2/mirror /data2/mirror /data2/mirror)
(3)执行初始化
cd ~gpinitsystem -c gpinitsystem_config -h seg_host -s smdw -S /data/master/ -O config_template
gpinitsystem应用程序将验证系统配置,确保可以连接到每个主机并访问配置中指定的数据目录。如果所有检查都成功,程序将提示确认配置,例如:
=> Continue with Greenplum creation? Yy/Nn
键入y开始执行初始化。安装成功结束时,程序将启动Greenplum数据库系统,应该看到:
=> Greenplum Database instance successfully created.
20210308:13:18:39:082622 gpinitstandby:vvml-z2-greenplum:gpadmin-[INFO]:-Validating environment and parameters for standby initialization...
20210308:13:18:39:082622 gpinitstandby:vvml-z2-greenplum:gpadmin-[ERROR]:-Parent directory does not exist on host smdw
20210308:13:18:39:082622 gpinitstandby:vvml-z2-greenplum:gpadmin-[ERROR]:-This directory must be created before running gpactivatestandby
20210308:13:18:39:082622 gpinitstandby:vvml-z2-greenplum:gpadmin-[ERROR]:-Failed to create standby
20210308:13:18:39:082622 gpinitstandby:vvml-z2-greenplum:gpadmin-[ERROR]:-Error initializing standby master: Parent directory does not exist
gpinitstandby -s smdw
(4)排错
如果初始化过程中遇到任何错误,整个过程将失败,并且可能留下一个部分创建的系统。此时应查看错误消息和日志,以确定故障原因以及故障发生的位置。日志文件在~/gpAdminLogs中创建。
根据发生错误的时间,可能需要进行清理,然后重试gpinitsystem程序。例如,如果创建了一些段实例,但有些失败,则可能需要停止postgres进程,并从数据存储区域中删除任何由gpinitsystem创建的数据目录。如果需要,将创建一个backout脚本来帮助清理。
如果gpinitsystem程序失败,并且系统处于部分安装状态,将会创建以下备份脚本:
~/gpAdminLogs/backout_gpinitsystem_
可以使用此脚本清理部分创建的Greenplum数据库系统。此回退脚本将删除任何gpinitsystem创建的数据目录、postgres进程和日志文件。
sh backout_gpinitsystem_gpadmin_20071031_121053
更正导致gpinitsystem失败的错误并运行backout脚本后,重新初始化Greenplum数据库。
2. 设置Greenplum环境变量
在master主机用gpadmin用户执行以下步骤。
(1)编辑资源文件~/.bashrc,在文件中添加如下环境变量
source /usr/local/greenplum-db/greenplum_path.shexport MASTER_DATA_DIRECTORY=/data/master/gpseg-1export PGPORT=5432export PGUSER=gpadminexport PGDATABASE=postgresexport LD_PRELOAD=/lib64/libz.so.1 ps
(2)使配置生效
source ~/.bashrc
(3)将环境文件复制到standby master
cd ~scp .bashrc smdw:`pwd`
3. 允许客户端连接
(1)编辑/data/master/gpseg-1/pg_hba.conf文件,添加如下客户端ip或网段,允许任意地址访问。
host all all 0.0.0.0/0 md5
pg_hba.conf中的条目会按顺序进行匹配。通用原则是越靠前的条目匹配条件越严格,但认证方法越弱;越靠后的条目匹配条件越松散,但认证方法越强。本地socket连接使用ident认证方式。
4. 修改参数
根据具体硬件配置,postgresql.conf中的属性值可参考https://pgtune.leopard.in.ua/#/。
(1)检查状态
gpstategpstate -egpstate -f
(2)设置参数
gpconfig -c max_connections -v 2500 -m 500gpconfig -c max_prepared_transactions -v 500gpconfig -c shared_buffers -v 5GB -m 32GBgpconfig -c effective_cache_size -v 16GB -m 96GBgpconfig -c maintenance_work_mem -v 1280MB -m 2GBgpconfig -c checkpoint_completion_target -v 0.9gpconfig -c wal_buffers -v 16MB -m 16MB# gpconfig -c checkpoint_segments -v 32 --skipvalidationgpconfig -c effective_io_concurrency -v 200gpconfig -c default_statistics_target -v 100gpconfig -c random_page_cost -v 1.1gpconfig -c log_statement -v nonegpconfig -c gp_enable_global_deadlock_detector -v ongpconfig -c gp_workfile_compression -v ongpconfig -c gp_max_partition_level -v 1# 物理内存 * 0.9 / (primary+mirror数量),单位MB。例如,256G内存,6个primary,6个mirror,设置为19660。gpconfig -c gp_vmem_protect_limit -v 19660# 专用master、standby主机上设置为CPU核数,segment主机上设置为CPU核数/(primary+mirror数量)。例如64核,6 primary 6 mirror,设置如下:gpconfig -c gp_resqueue_priority_cpucores_per_segment -v 5.3 -m 64
(3)执行检查点
psql -c "CHECKPOINT"
(4)重启greenplum
gpstop -r
官方文档:http://docs.greenplum.org/6-12/install_guide/init_gpdb.html
八、后续
1. 创建临时表空间
create tablespace tmptbs location '/data/tmptbs';
alter role all set temp_tablespaces='tmptbs';
2. 创建用户
create role dwtest with password '123456' login createdb;
3. 测试登录
psql -U dwtest -h mdw
参考:
1. 官方文档
http://docs.greenplum.org/6-12/install_guide/install_guide.html
2. greenplum安装详细过程
[原]greenplum安装详细过程 - 勇哥的部落格 - 博客园
3.《greenplum服务器安装-20201123.docx》
4. Greenplum安装部署参考手册
Greenplum安装部署参考手册 - 百度文库