Greenplum 6 安装配置详解
Posted wzy0623
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Greenplum 6 安装配置详解相关的知识,希望对你有一定的参考价值。
目录
1. 在master和standby master主机创建数据存储区
一、主机规划
114.112.77.199 master、segment
210.73.209.103 standby master、segment
140.210.73.67 segment
二、平台需求
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 * 用户数据空间) + 用户数据空间/3
其中:
2 * 用户数据空间 为 primary + mirror 所需空间。
用户数据空间/3 为工作区(work space)所需空间。
举例:
磁盘空间=2T,则用户数据可用空间=2T*0.7*3/7=600G。
官方文档:http://docs.greenplum.org/6-12/install_guide/capacity_planning.html
三、操作系统配置
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.service
systemctl 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 = 4096
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 = 2097152
net.core.wmem_max = 2097152
vm.zone_reclaim_mode = 0
vm.dirty_expire_centisecs = 500
vm.dirty_writeback_centisecs = 100
# 大于64G内存推荐
vm.dirty_background_ratio = 0 # See System Memory
vm.dirty_ratio = 0
vm.dirty_background_bytes = 1610612736 # 1.5GB
vm.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 /data
mount -o remount /data1
mount -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/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)禁用透明大页面(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:200
MaxSessions 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 chronyd
systemctl enable ntpd
systemctl start ntpd
ntpstat
4. 创建gpadmin账户
(1)建立组和用户
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密钥对
su gpadmin
ssh-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.8
yum 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 mdw
ssh-copy-id smdw
ssh-copy-id sdw1
ssh-copy-id sdw2
ssh-copy-id sdw3
...
(3)在gpadmin用户主目录创建名为all_host的文件,内容为所有Greenplum主机名,例如:
mdw
smdw
sdw3
(4)启用n-n SSH免密
gpssh-exkeys -f all_host
3. 确认软件安装
在master主机用gpadmin用户执行以下步骤。
gpssh -f all_host -e 'ls -l /usr/local/greenplum-db-<version>'
如果Greenplum安装成功,应该能够在没有密码提示的情况下登录到所有主机。
官方文档:http://docs.greenplum.org/6-12/install_guide/install_gpdb.html
五、创建数据存储区
1. 在master和standby master主机创建数据存储区
在master主机用gpadmin用户执行以下命令。
mkdir -p /data/master
chown gpadmin:gpadmin /data/master
source /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主机名,例如:
sdw1
sdw2
sdw3
sdw4
(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
(3)检查全矩阵多对多网络传输速度:
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=gpseg
PORT_BASE=6000
declare -a DATA_DIRECTORY=(/data1/primary /data1/primary /data1/primary /data2/primary /data2/primary /data2/primary)
MASTER_HOSTNAME=mdw
MASTER_DIRECTORY=/data/master
MASTER_PORT=5432
TRUSTED_SHELL=ssh
CHECK_POINT_SEGMENTS=8
ENCODING=UNICODE
MIRROR_PORT_BASE=7000
declare -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_<user>_<timestamp>
可以使用此脚本清理部分创建的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.sh
export MASTER_DATA_DIRECTORY=/data/master/gpseg-1
export PGPORT=5432
export PGUSER=gpadmin
export PGDATABASE=postgres
export 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)检查状态
gpstate
gpstate -e
gpstate -f
(2)设置参数
gpconfig -c max_connections -v 2500 -m 500
gpconfig -c max_prepared_transactions -v 500
gpconfig -c shared_buffers -v 5GB -m 32GB
gpconfig -c effective_cache_size -v 16GB -m 96GB
gpconfig -c maintenance_work_mem -v 1280MB -m 2GB
gpconfig -c checkpoint_completion_target -v 0.9
gpconfig -c wal_buffers -v 16MB -m 16MB
# gpconfig -c checkpoint_segments -v 32 --skipvalidation
gpconfig -c effective_io_concurrency -v 200
gpconfig -c default_statistics_target -v 100
gpconfig -c random_page_cost -v 1.1
gpconfig -c log_statement -v none
gpconfig -c gp_enable_global_deadlock_detector -v on
gpconfig -c gp_workfile_compression -v on
gpconfig -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安装部署参考手册 - 百度文库
以上是关于Greenplum 6 安装配置详解的主要内容,如果未能解决你的问题,请参考以下文章