logo

木头lbj‘s Blog

首页/关于

Greenplum 集群安装

2021-12-17/# Greenplum

硬件及配置

  • CPU >= 8核
  • 内存 >= 16GB
  • 硬盘 建议系统盘和数据盘分开挂载,系统盘 >= 64GB,数据盘根据实际需要配备
  • 网络 建议千兆及以上
  • 集群规模: master 1台,segment 3台,建议上1台standby

系统准备

操作系统以及版本: CentOS 64bit 7.8 CentOS下软件依赖:

apr apr-util bash bzip2 curl krb5 libcurl libevent libxml2 libyaml zlib openldap openssh openssl openssl-libs (RHEL7/Centos7) perl readline rsync R sed (used by gpinitsystem) tar zip

备注: 查看系统版本命令
cat /etc/issue 或者 cat /etc/redhat-release

主机设置

集群规划,以IP为 192.168.239.215/216/217/218 4台机器为例。

192.168.239.215 mdw Master 管理节点 192.168.239.216 sdw1 Segment1 数据节点1 192.168.239.217 sdw2 Segment2 数据节点2 192.168.239.218 sdw3 Segment3 数据节点3

修改主机名:编辑各台机器的/etc/hostname文件,写入对应的主机名称,修改完成后重启机器。

配置各台机器的/etc/hosts 文件,包含各主机的IP和hostname,如:

192.168.239.215 mdw 192.168.239.216 sdw1 192.168.239.217 sdw2 192.168.239.218 sdw3

禁用SELinux

注: 以下操作均需要root权限

  1. 检查SELinux状态

    # sestatus SELinux status: disab led

    Xnip2020-10-20_09-14-13 如上图,该状态为SELinux开启状态,需要将其改为disabled。

  2. 如果SELinux状态不为disabled状态,通过修改/etc/selinux/config文件,将其设为禁用 Xnip2020-10-20_09-20-13

  3. 如果系统安装了SSSD,修改/etc/sssd/sssd.conf配置文件,将selinux_provider设置为none,若没有安装则无需操作。

    selinux_provider=none
  4. 重启机器完成设置,并检查是否生效。再次执行sestatus,结果如下图则表示配置成功。 Xnip2020-10-20_09-29-41

关闭防火墙软件

  1. 查看防火墙状态

    # systemctl status firewalld

    Xnip2020-10-20_10-13-28 上图所示为防火墙运行中。

  2. 关闭防火墙,并检查是否关闭成功

    # systemctl stop firewalld.service # systemctl disable firewalld.service # systemctl status firewalld

    Xnip2020-10-20_10-16-30

配置 sysctl.conf

  1. 根据实际情况修改 /etc/sysctl.conf 文件配置系统参数,具体参数如下:

    # kernel.shmall = _PHYS_PAGES / 2 kernel.shmall = 2041848 # kernel.shmmax = kernel.shmall * PAGE_SIZE kernel.shmmax = 8363409408 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.swappiness = 10 vm.zone_reclaim_mode = 0 vm.dirty_expire_centisecs = 500 vm.dirty_writeback_centisecs = 100 # 注意:主机内存大于64G需要额外添加如下参数: vm.dirty_background_ratio = 0 vm.dirty_ratio = 0 vm.dirty_background_bytes = 1610612736 # 1.5GB vm.dirty_bytes = 4294967296 # 4GB # 主机内存小于64G需要额外添加如下参数: vm.dirty_background_ratio = 3 vm.dirty_ratio = 10

    其中 kernel.shmallkernel.shmmll 要根据操作系统实际情况配置,具体计算公式如下(上文注释中也有),计算结果四舍五入取整数

    kernel.shmall = _PHYS_PAGES / 2 kernel.shmmax = kernel.shmall * PAGE_SIZE

    _PHYS_PAGESPAGE_SIZE 是操作系统参数,可以通过 getconf 命令获取到具体数值。 Xnip2020-10-21_16-22-02 通过以下命令可以快速获取到两个参数的应该配置的数值。

    $ echo $(expr $(getconf _PHYS_PAGES) / 2) $ echo $(expr $(getconf _PHYS_PAGES) / 2 \* $(getconf PAGE_SIZE))
  2. 配置修改完成后,执行 sysctl -p 重新加载配置

设置资源限定

配置文件 /etc/security/limits.conf 中添加以下配置。

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

XFS挂载选项

GP 需要使用XFS的文件系统,RHEL/CentOS 7 和Oracle Linux将XFS作为默认文件系统。如果使用虚机且只有一个分区,则不需此步操作。

例如挂载新xfs步骤:

[root@mdw ~]# fdisk /dev/sdd 然后跟着n,p,1提示做下去,最后wq保存退出 [root@mdw ~]# mkfs.xfs /dev/sdd1 # 挂载目录 [root@mdw ~]# mount /dev/sdd1 /data/master # 设置自动挂载 [root@mdw ~]# vi /etc/fstab /dev/sdd1 /data xfs rw,noatime,inode64,allocsize=16m 0 0

磁盘I/O设置

查看磁盘挂载信息 lsblk Screen Shot 2020-10-22 at 2.39.31 PM

查看磁盘文件预先读设置,该设置的值需要等于 16384:

/sbin/blockdev --getra /dev/vda

Xnip2020-10-22_14-42-18

设置磁盘文件预读设置为 16384:

/sbin/blockdev --setra 16384 /dev/vda

Xnip2020-10-22_14-45-27

以上命令修改的值会在机器重启后失效,所以必须保证每次重启后设置正确,将该命令写进 /etc/rc.d/rc.local 文件,并保证该文件有可执行权限,通过命令 chmod +x /etc/rc.d/rc.local 添加可执行权限。

Xnip2020-10-22_14-49-31

磁盘I/O有多种调度算法,GP推荐使用deadline,通过以下命令设置,以下示例中的vda为磁盘名,根据实际情况进行修改:

echo deadline > /sys/block/vda/queue/scheduler

同样以上方式只能临时生效,CentOS7 永久修改使用以下命令:

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

可通过 grubby --info=ALL命令查看配置是否生效。
Xnip2020-10-22_14-58-59

关闭系统透明大页(THP)

grubby --update-kernel=ALL --args="transparent_hugepage=never"

该配置修改后需要重启生效,重启后通过以下命令检查是否生效,生效后的结果为 always [never]

# cat /sys/kernel/mm/*transparent_hugepage/enabled always [never]

禁用 IPC Object Removal

修改 /etc/systemd/logind.conf 文件,添加 RemoveIPC=no 配置,并重启 systemd-login 或者重启机器使其生效。
Xnip2020-10-22_15-08-29

使用 service systemd-logind restart 命令重启 systemd-login

修改SSH连接阈值

修改 /etc/ssh/sshd_config 修改以下参数:

MaxStartups 200 MaxSessions 200

修改完成后重启ssh:

# service sshd restart

设置时间同步

  1. 如果有时间服务器,设置Master机器与时间服务器进行同步,如果没有时间服务器,则Master机器将时间修改正确,不需要其他设置,将Segment机器设置与Master同步即可。如果Master需要配置,修改 /etc/ntp.conf 文件。

    # IP为时间服务器IP server 10.6.220.20
  2. 修改每台Segment机器的 /etc/ntp.conf 文件。

    server mdw prefer server smdw # 若没有Standby机器可不添加
  3. 若有Standby机器,Standby机器的配置如下。

    server mdw prefer server 10.6.220.20 # 若没有时间服务器则不加

创建gpadmin用户

  1. 创建 gpadmin 组和用户

    # groupadd gpadmin # useradd gpadmin -r -m -g gpadmin # passwd gpadmin
  2. 切换到 gpadmin 用户并生成ssh 密钥

    $ su gpadmin $ ssh-keygen -t rsa -b 4096 Generating public/private rsa key pair. Enter file in which to save the key (/home/gpadmin/.ssh/id_rsa): Created directory '/home/gpadmin/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again:
  3. 添加 gpadmin 用户 sudo 权限
    使用 visudo 命令进入权限编辑,去掉 %wheel 组的配置的注释:

    %wheel ALL=(ALL) NOPASSWD: ALL

    确保 %wheel 的配置包含 NOPASSWD 设置,然后将 gpadmin 添加进 wheel 组。

    # usermod -aG wheel gpadmin

Greenplum数据库软件安装

  1. gp-6.10.0-install-package.tar.gz 压缩包上传到Master机器,并解压。

    tar -xzvf gp-6.10.0-install-package.tar.gz
  2. 切换到 gpadmin 用户,执行以下命令开始安装

    sudo yum install -y ./greenplum-db-6.10.0-2-rhel7-x86_64.rpm
  3. 修改软件文件所属用户和组为 gpadmin.

    $ sudo chown -R gpadmin:gpadmin /usr/local/greenplum* $ sudo chgrp -R gpadmin /usr/local/greenplum*

配置SSH免密登录

  1. 登录Master机器,切换到 gpadmin 用户

  2. 执行 $ source /usr/local/greenplum-db-<version>/greenplum_path.sh

  3. 使用 ssh-copy-id 命令将Master机器的密钥添加到所有其他机器中

    ssh-copy-id sdw1 ssh-copy-id sdw2 ssh-copy-id sdw3

    命令执行过程中会要求输入对应机器的密码。

  4. 在Master机器的 /home/gpadmin 目录下创建 hostfile_exkeys 文件,并将集群中所有机器名写入文件,注意不要有空行和空格

    mdw sdw1 sdw2 sdw3
  5. 执行以下命令完成免密登录设置

    gpssh-exkeys -f hostfile_exkeys

安装确认

  1. 在Master机器上,切换到 gpadmin 用户。

  2. 执行以下命令看是否有错误,是否要求输入密码

    $ gpssh -f hostfile_exkeys -e 'ls -l /usr/local/greenplum-db-6.10.0'
  3. 如果要求输入密码,则重新执行以下命令

    gpssh-exkeys -f hostfile_exkeys

在Master和Standby Master(若有)上创建数据存储区

依次执行以下命令(root用户执行)

# mkdir -p /data/master # chown gpadmin:gpadmin /data/master # source /usr/local/greenplum-db/greenplum_path.sh # 一下两行命令如果没有Standby Master则不需要执行 # gpssh -h smdw -e 'mkdir -p /data/master' # gpssh -h smdw -e 'chown gpadmin:gpadmin /data/master'

各个数据节点Segment上创建数据存储区

  1. 在Master节点切换到 gpadmin 用户;

  2. /home/gpadmin 目录下创建 hostfile_gpssh_segonly 文件,写入各Segment主机名;

    sdw1 sdw2 sdw3
  3. 依次执行以下命令;

    # source /usr/local/greenplum-db/greenplum_path.sh # gpssh -f /home/gpadmin/hostfile_gpssh_segonly -e 'sudo mkdir -p /data/primary' # gpssh -f /home/gpadmin/hostfile_gpssh_segonly -e 'sudo mkdir -p /data/mirror' # gpssh -f /home/gpadmin/hostfile_gpssh_segonly -e 'sudo chown -R gpadmin /data/*'

网络性能、磁盘I/O和内存校验

  1. 在Master节点使用 gpadmin 用户执行;

  2. /home/gpadmin 目录下创建 hostfile_gpchecknet_ic1hostfile_gpcheckperf 文件,写入各Segment主机名;

  3. 执行以下命令进行校验网络

    $ gpcheckperf -f /home/gpadmin/hostfile_gpchecknet_ic1 -r N -d /tmp > subnet1.out
  4. 执行以下命令校验磁盘I/O和内存

    $ source /usr/local/greenplum-db/greenplum_path.sh $ gpcheckperf -f hostfile_gpcheckperf -r ds -D -d /data/primary -d /data/mirror ==================== == RESULT 2020-10-22T19:22:52.563413 ==================== disk write avg time (sec): 1048.61 disk write tot bytes: 197952274432 disk write tot bandwidth (MB/s): 180.03 disk write min bandwidth (MB/s): 60.00 [sdw1] disk write max bandwidth (MB/s): 60.02 [sdw2] -- per host bandwidth -- disk write bandwidth (MB/s): 60.00 [sdw1] disk write bandwidth (MB/s): 60.02 [sdw2] disk write bandwidth (MB/s): 60.01 [sdw3] disk read avg time (sec): 613.71 disk read tot bytes: 193067614208 disk read tot bandwidth (MB/s): 300.02 disk read min bandwidth (MB/s): 99.99 [sdw2] disk read max bandwidth (MB/s): 100.02 [sdw3] -- per host bandwidth -- disk read bandwidth (MB/s): 100.01 [sdw1] disk read bandwidth (MB/s): 99.99 [sdw2] disk read bandwidth (MB/s): 100.02 [sdw3] stream tot bandwidth (MB/s): 39027.80 stream min bandwidth (MB/s): 12929.20 [sdw3] stream max bandwidth (MB/s): 13115.70 [sdw1] -- per host bandwidth -- stream bandwidth (MB/s): 13115.70 [sdw1] stream bandwidth (MB/s): 12982.90 [sdw2] stream bandwidth (MB/s): 12929.20 [sdw3]
  5. 查看 subnet1.out文件和校验输出结果,看各指标是否正常;

初始化数据库

  1. /home/gpadmin 目录下创建 hostfile_gpinitsystem 文件,写入各Segment主机名;

  2. 配置初始化配置文件

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

    文件内容如下:

    ARRAY_NAME="Greenplum Data Platform" SEG_PREFIX=gpseg PORT_BASE=6000 declare -a DATA_DIRECTORY=(/data/primary /data/primary /data/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=(/data/mirror /data/mirror /data/mirror)
  3. 执行命令进行初始化

    $ gpinitsystem -c gpinitsystem_config -h hostfile_gpinitsystem

初始化过程中会询问是否继续,输入 y 回车后继续。等待初始化结束看到如下日志信息表示安装成功。

20201023:10:18:03:018615 gpinitsystem:mdw:gpadmin-[INFO]:-Greenplum Database instance successfully created 20201023:10:18:03:018615 gpinitsystem:mdw:gpadmin-[INFO]:------------------------------------------------------- 20201023:10:18:03:018615 gpinitsystem:mdw:gpadmin-[INFO]:-To complete the environment configuration, please 20201023:10:18:03:018615 gpinitsystem:mdw:gpadmin-[INFO]:-update gpadmin .bashrc file with the following 20201023:10:18:03:018615 gpinitsystem:mdw:gpadmin-[INFO]:-1. Ensure that the greenplum_path.sh file is sourced 20201023:10:18:03:018615 gpinitsystem:mdw:gpadmin-[INFO]:-2. Add "export MASTER_DATA_DIRECTORY=/data/master/gpseg-1" 20201023:10:18:03:018615 gpinitsystem:mdw:gpadmin-[INFO]:- to access the Greenplum scripts for this instance: 20201023:10:18:03:018615 gpinitsystem:mdw:gpadmin-[INFO]:- or, use -d /data/master/gpseg-1 option for the Greenplum scripts 20201023:10:18:03:018615 gpinitsystem:mdw:gpadmin-[INFO]:- Example gpstate -d /data/master/gpseg-1 20201023:10:18:03:018615 gpinitsystem:mdw:gpadmin-[INFO]:-Script log file = /home/gpadmin/gpAdminLogs/gpinitsystem_20201023.log 20201023:10:18:03:018615 gpinitsystem:mdw:gpadmin-[INFO]:-To remove instance, run gpdeletesystem utility 20201023:10:18:03:018615 gpinitsystem:mdw:gpadmin-[INFO]:-To initialize a Standby Master Segment for this Greenplum instance 20201023:10:18:03:018615 gpinitsystem:mdw:gpadmin-[INFO]:-Review options for gpinitstandby 20201023:10:18:03:018615 gpinitsystem:mdw:gpadmin-[INFO]:------------------------------------------------------- 20201023:10:18:03:018615 gpinitsystem:mdw:gpadmin-[INFO]:-The Master /data/master/gpseg-1/pg_hba.conf post gpinitsystem 20201023:10:18:03:018615 gpinitsystem:mdw:gpadmin-[INFO]:-has been configured to allow all hosts within this new 20201023:10:18:03:018615 gpinitsystem:mdw:gpadmin-[INFO]:-array to intercommunicate. Any hosts external to this 20201023:10:18:03:018615 gpinitsystem:mdw:gpadmin-[INFO]:-new array must be explicitly added to this file 20201023:10:18:03:018615 gpinitsystem:mdw:gpadmin-[INFO]:-Refer to the Greenplum Admin support guide which is 20201023:10:18:03:018615 gpinitsystem:mdw:gpadmin-[INFO]:-located in the /usr/local/greenplum-db-6.10.0/docs directory 20201023:10:18:03:018615 gpinitsystem:mdw:gpadmin-[INFO]:-------------------------------------------------------

根据日志提示,确保 source /usr/local/greenplum-db/greenplum_path.shexport MASTER_DATA_DIRECTORY=/data/master/gpseg-1 已经添加进gpadmin用户下的 .bashrc 文件。

  1. 设置时区
gpconfig -s TimeZone # 查看时区,若时区正确(为Asia/Shanghai)则不需要修改 gpconfig -c TimeZone -v 'Asia/Shanghai' # 将时区修改为上海时区

安装失败后重新安装

可能因为配置错误或者安装出错需要重新安装,可使用 gpdeletesystem -d /data/master 卸载后重新安装。如果 gpdeletesystem 无法正常执行,可手工杀死各节点的进程、删除对应存储文件后修改配置重新初始化。

  1. Kill掉各节点的greenplum进程,可使用 ps -ef | grep greenplum 找到对应进程;
  2. Master节点删除 /data/master/ 目录下的所有文件;
  3. Segment节点删除 /data/primary 目录下所有文件;
  4. 查看各节点 /tmp 目录下是否有包含 .s.PGSQL 的文件,如 .s.PGSQL.5432.s.PGSQL.5432.lock ,若存在全部删除;
  5. 检查配置是否有错,调整后重新执行 gpinitsystem -c gpinitsystem_config -h hostfile_gpinitsystem 进行初始化。

集群操作相关命令

  1. 查看集群状态 gpstate -d /data/master/gpseg-1
  2. 启动集群 gpstart ;
  3. 关闭集群 gpstop ;
  4. 更多管理工具和详情参见文档