描述如何为Greenplum Database软件安装准备操作系统环境。
按顺序执行以下任务:
除非另有说明,否则应对Greenplum数据库阵列中的所有主机(master主机,备用master主机和segment主机)执行这些任务。
master的Greenplum数据库主机命名约定为 mdw,备用master是 smdw。
segment主机的命名约定为sdwN,其中sdw是前缀,N是整数。例如,segment主机名应为 sdw1、 sdw2等等。对于具有多个接口的主机,建议使用NIC绑定,但是当未绑定接口时,约定是在主机名称后加一个连接符破折号(-)。例如,sdw1-1 和 sdw1-2 是主机sdw1的两个接口名称。
有关在云中运行Greenplum数据库的信息,请参阅 Pivotal Greenplum合作伙伴市场中的Cloud Services。
重要提示:如果对于Greenplum数据库集群而言,数据丢失是不可接受的,则建议使用Greenplum master镜像和segment镜像。如果未启用镜像,则Greenplum仅存储数据的一个副本,因此,在发生硬件故障时,底层的存储介质将为数据可用性和正确性提供唯一保证。
Kubernetes能够从Pod和主机故障中快速恢复,并且Kubernetes存储服务为基础数据提供了高级别的可用性。此外,虚拟化环境很难确保Greenplum镜像解决方案所需的反关联性保证。由于这些原因,Greenplum for Kubernetes完全支持无镜像部署。除非同时启用了Greenplum master镜像和segment镜像,否则通常不支持将其他部署环境用于生产。
注意:有关从早期版本升级Pivotal Greenplum数据库的信息,请参阅Greenplum数据库发行说明以了解要安装的发行版。
注意:本主题中描述的自动执行配置步骤,以及使用资源配置工具(例如Ansible,Chef或Puppet)安装Greenplum数据库软件,可以节省时间,并确保可靠且可重复的Greenplum数据库安装。
# sestatus
SELinuxstatus: disabled
SELINUX=disabled
selinux_provider=none
有关禁用SELinux的信息,请参见SELinux文档。
您还应该禁用防火墙软件,例如 iptables (在RHEL 6.x和CentOS 6.x等系统上), firewalld (在RHEL 7.x和CentOS 7.x等系统上),或 ufw (在Ubuntu系统上,默认情况下禁用)。
如果您为了Greenplum数据库安全起见,决定启用 iptables,请参考"启用iptables(可选)"。
# /sbin/chkconfig --list iptables
如果 iptables 禁用,命令输出为:
iptables 0:off 1:off 2:off 3:off 4:off 5:off 6:off
/sbin/chkconfig iptables off
应用更改后,您将需要重新引导系统。
# systemctl status firewalld
如果firewalld 被禁用,命令输出为:
* firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
# systemctl stop firewalld.service
# systemctl disable firewalld.service
有关配置防火墙软件的更多信息,请参阅防火墙或操作系统的文档。
Greenplum要求在Greenplum数据库系统中的所有主机(master和segment)上设置某些Linux操作系统(OS)参数。
通常,需要更改以下类别的系统参数:
更具体地说,您需要编辑以下Linux配置设置:
编辑 /etc/hosts 文件,并确保它包括构成Greenplum数据库系统的每台服务器的主机名和所有接口的地址名称。
本主题中列出的sysctl.conf参数,是用于在各种环境中的性能、优化和一致性。根据您的具体情况和设置更改这些设置。
在/etc/sysctl.conf 文件中设置以下参数,并使用sysctl -p重新加载 :
# kernel.shmall = _PHYS_PAGES / 2 # See Shared Memory Pages
kernel.shmall = 197951838
# kernel.shmmax = kernel.shmall * PAGE_SIZE
kernel.shmmax = 810810728448
kernel.shmmni = 4096
vm.overcommit_memory = 2 # See Segment Host Memory
vm.overcommit_ratio = 95 # See Segment Host Memory
net.ipv4.ip_local_port_range = 10000 65535 # See Port Settings
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
vm.dirty_background_ratio = 0 # See System Memory
vm.dirty_ratio = 0
vm.dirty_background_bytes = 1610612736
vm.dirty_bytes = 4294967296
Greenplum数据库使用共享内存在属于同一postgres实例的postgres进程之间进行通信。kernel.shmall设置了可以在系统范围内使用的共享内存总量(以页为单位)。kernel.shmmax设置了单个共享内存段的最大大小(以字节为单位)。
kernel.shmall和kernel.shmax取决于系统的物理内存和页面大小。通常,两个参数的值都应为系统物理内存的一半。
使用操作系统变量 _PHYS_PAGES 和PAGE_SIZE来设置参数。
kernel.shmall = ( _PHYS_PAGES / 2)
kernel.shmmax = ( _PHYS_PAGES / 2) * PAGE_SIZE
要计算的kernel.shmall 和kernel.shmax的值,请使用 getconf(该命令返回操作系统变量的值),并运行以下命令:
$ echo $(expr $(getconf _PHYS_PAGES) / 2)
$ echo $(expr $(getconf _PHYS_PAGES) / 2 \* $(getconf PAGE_SIZE))
作为最佳实践,我们建议您在 /etc/sysctl.conf文件中使用计算结果。例如,主机系统安装了1583 GB的内存,并返回以下值:_PHYS_PAGES = 395903676和PAGE_SIZE = 4096。这些值可设置给kernel.shmall 和kernel.shmmax:
kernel.shmall = 197951838
kernel.shmmax = 810810728448
如果Greeplum数据库master主机的共享内存配置与segment主机不同,则_PHYS_PAGES和PAGE_SIZE值可能会有所不同,并且kernel.shmall 和kernel.shmax master机上的值也会与segment主机上的值不同。
Segment主机内存
OS使用Linux内核参数vm.overcommit_memory,来确定可以为进程分配多少内存。对于Greenplum数据库,此参数应始终设置为2。
vm.overcommit_ratio是用于应用程序进程的RAM的百分比,其余部分保留给操作系统。在Red Hat Enterprise Linux上,默认值为50。
针对vm.overcommit_ratio有关基于资源组或队列的资源管理的调优和计算的推荐,请参阅《Geenplum数据库管理员指南》中的“ 配置segment主机内存的选项”。另请参阅“ Greenplum数据库参考指南”中的Greenplum数据库服务器配置参数 gp_vmem_protect_limit。
端口设定
为避免在Greenplum初始化期间Greenplum数据库与其他应用程序之间的端口冲突,请记下操作系统参数指定的端口范围 net.ipv4.ip_local_port_range。使用gpinitsystem集群配置文件初始化Greenplum时,请不要在该端口范围内指定Greenplum数据库的端口。例如,如果net.ipv4.ip_local_port_range = 10000 65535,将Greenplum数据库基本端口号设置为这些值:
PORT_BASE = 6000
MIRROR_PORT_BASE = 7000
有关的信息 gpinitsystem集群配置文件,请参阅初始化Greenplum数据库系统。
net.ipv4.ip_local_reserved_ports=65330
有关云部署的其他要求和建议,请参阅《Greenplum数据库云技术建议》。
系统内存
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_bytes 和 vm.dirty_bytes,并设置这些值给两个ratio参数:
vm.dirty_background_ratio = 3
vm.dirty_ratio = 10
增加 vm.min_free_kbytes,来确保 PF_MEMALLOC 从网络和存储驱动程序的请求能轻松满足。这对于具有大量系统内存的系统尤其重要。在这些系统上,默认值通常太低。使用awk命令,设置vm.min_free_kbytes 为系统物理内存的3%(建议值):
awk 'BEGIN {OFMT = "%.0f";} /MemTotal/ {print "vm.min_free_kbytes =", $2 * .03;}'
/proc/meminfo >> /etc/sysctl.conf
不要将 vm.min_free_kbytes 设置为超过系统内存的5%,因为这样做可能会导致内存不足。
在/etc/security/limits.conf 文件中设置以下参数:
* soft nofile 524288
* hard nofile 524288
* soft nproc 131072
* hard nproc 131072
对于Red Hat Enterprise Linux(RHEL)和CentOS系统,/etc/security/limits.d/90-nproc.conf文件(RHEL/CentOS 6)或 /etc/security/limits.d/20-nproc.conf 文件(RHEL/CentOS 7)中的参数值,会覆盖limits.conf文件中的这些值。确保覆盖文件中的所有参数均设置为所需值。Linux模块pam_limits 通过读取limits.conf文件、然后读取覆盖文件中的参数值,来设置用户限制。有关PAM和用户限制的信息,请参阅PAM和 pam_limits。
在每个segment主机上执行命令ulimit -u,来显示每个用户可用的最大进程数。返回值应为131072。
rw,nodev,noatime,nobarrier,inode64
rw,nodev,noatime,inode64
参考 mount 手册页(man mount 可打开手册页)以获取有关使用此命令的更多信息。
也可以在 /etc/fstab文件设置XFS选项。此示例条目来自fstab文件,它指定了XFS选项。
/dev/data /data xfs nodev,noatime,nobarrier,inode64 0 0
预读值
每个磁盘设备文件的预读(blockdev)值应为16384。要验证磁盘设备的预读值,请执行以下操作:
# /sbin/blockdev --getra devname
例如:
# /sbin/blockdev --getra /dev/sdb
要在设备上设置blockdev(预读):
# /sbin/blockdev --setra bytes devname
例如:
# /sbin/blockdev --setra 16384 /dev/sdb
请参见手册页(man) blockdev 命令,以获取有关使用该命令的更多信息(man blockdev 可打开手册页)。
在系统启动时,一种设置 blockdev 值的方法是,通过在 rc.local 文件中,添加/sbin/blockdev --setra 命令。例如,将此行添加到rc.local 文件以设置磁盘sdb的预读值。
/sbin/blockdev --setra 16384 /dev/sdb
在使用systemd的系统上,还必须在 rc.local文件中设置执行权限,以使其能够在启动时运行。例如,在RHEL/CentOS 7系统上,此命令设置文件的执行权限。
# chmod +x /etc/rc.d/rc.local
重新启动系统以使设置生效。
磁盘I/O调度程序
用于磁盘访问的Linux磁盘I/O调度程序支持不同的策略,例如 CFQ、AS和 deadline。
建议使用deadline 调度程序选项。要在下一次系统重新引导之前指定调度程序,请运行以下命令:
# echo schedulername > /sys/block/devname/queue/scheduler
例如:
# echo deadline > /sys/block/sbd/queue/scheduler
在启动时设置I/O调度程序策略的一种方法是使用内核参数elevator。添加参数elevator=deadline到/boot/grub/grub.conf文件中的内核命令,该文件是GRUB引导加载程序配置文件。以下是一个内核命令的示例,它来自RHEL 6.x或CentOS 6.x上的文件grub.conf。该命令排列成多行,以提高可读性。
kernel /vmlinuz-2.6.18-274.3.1.el5 ro root=LABEL=/
elevator=deadline crashkernel=128M@16M quiet console=tty1
console=ttyS1,115200 panic=30 transparent_hugepage=never
initrd /initrd-2.6.18-274.3.1.el5.img
要在使用grub2的系统(例如RHEL 7.x或CentOS 7.x)启动时指定I/O调度程序,请使用系统实用程序grubby。当以root身份运行时,此命令将添加如下参数:
# grubby --update-kernel=ALL --args="elevator=deadline"
添加参数后,重新引导系统。
# grubby --info=ALL
有关 grubby 实用程序的更多信息,请参阅您的操作系统文档。如果grubby 的命令没有更新内核,请参阅本节末尾的“ 注意 ”。
禁用透明大页面(THP),因为它会降低Greenplum数据库的性能。RHEL 6.0或更高版本默认情况下启用THP。在RHEL 6.x上禁用THP的一种方法是,添加参数transparent_hugepage=never到/boot/grub/grub.conf文件中的内核命令,该文件是GRUB引导加载程序的配置文件。以下是来自grub.conf文件的内核命令的一个示例。该命令排列成多行,以提高可读性:
kernel /vmlinuz-2.6.18-274.3.1.el5 ro root=LABEL=/
elevator=deadline crashkernel=128M@16M quiet console=tty1
console=ttyS1,115200 panic=30 transparent_hugepage=never
initrd /initrd-2.6.18-274.3.1.el5.img
# grubby --update-kernel=ALL --args="transparent_hugepage=never"
添加参数后,重新引导系统。
# hugeadm --thp-never
$ cat /sys/kernel/mm/*transparent_hugepage/enabled
always [never]
有关“THP或“ 实用程序grubby的更多信息,请参阅您的操作系统文档。如果grubby 命令没有更新内核,请参阅本节末尾的“ 注意 ”。
禁用RHEL 7.2或CentOS 7.2或Ubuntu的IPC对象删除。systemd默认地设置 RemoveIPC=yes,使得非系统用户帐户在注销时删除IPC连接。这将导致Greenplum数据库实用程序 gpinitsystem因信号错误而失败。请执行以下操作之一,以避免出现此问题。
RemoveIPC=no
重启systemd-login服务或重启系统后,设置生效。要重启服务,请以root用户身份运行此命令:
service systemd-logind restart
某些Greenplum数据库管理实用程序包括 gpexpand、gpinitsystem和 gpaddmirrors,请使用系统连接之间的安全shell(SSH),来执行其任务。在大型Greenplum数据库部署、云部署或每台主机具有大量segment的部署中,这些实用程序可能会超出主机的未认证连接的最大阈值。发生这种情况时,您会收到以下错误:ssh_exchange_identification:连接被远程主机关闭。
要增加Greenplum数据库系统的SSH连接阈值,请更新/etc/ssh/sshd_config 或/etc/sshd_config SSH守护程序配置文件二者之一中的配置参数SSH MaxStartups 和 MaxSessions 。
MaxStartups 200
MaxSessions 200
如果使用“ start:rate:full”语法来指定 MaxStartups,则启用了SSH守护程序的随机早期连接删除。start确定了允许的最大未经身份验证的SSH连接尝试次数。一旦达到未经身份验证的连接尝试的起始次数,SSH守护程序将按rate百分比拒绝后续的连接尝试。“full ”确定了未认证连接尝试的最大数量,达到之后所有尝试都将被拒绝。例如:
MaxStartups 10:30:200
MaxSessions 200
# service sshd restart
有关SSH配置选项的详细信息,请参阅Linux发行版的SSH文档。
注意:如果grubby命令没有更新RHEL 7.x或CentOS 7.x系统的内核,您可以手动更新系统上的所有内核。例如,添加参数transparent_hugepage =never 到系统上的所有内核。
- 在文件/etc/default/grub中的GRUB_CMDLINE_LINUX这一行,添加上述参数:
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="crashkernel=auto rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet transparent_hugepage=never" GRUB_DISABLE_RECOVERY="true"
- 以root身份运行 grub2-mkconfig 命令来更新内核。
# grub2-mkconfig -o /boot/grub2/grub.cfg
- 重启系统。
您应该使用NTP(网络时间协议)来同步组成Greenplum数据库系统的所有主机上的系统时钟。有关NTP的更多信息,请参见www.ntp.org。
segment主机上的NTP应该配置为将master主机作为主要时间源,将备用master主机作为辅助时间源。在主master和备用master主机上,将NTP配置为指向你的时间服务器。
server 10.6.220.20
server mdw prefer
server smdw
server mdw prefer
server 10.6.220.20
# gpssh -f hostfile_gpssh_allhosts -v -e 'ntpd'
在每个节点上创建一个专用的操作系统用户帐户,以运行和管理Greenplum数据库。该用户帐户按照惯例取名为gpadmin。
重要提示:您不能以root身份运行Greenplum数据库服务器。
gpadmin 用户必须有权访问安装和运行Greenplum数据库所需的服务和目录。
每个Greenplum主机上的gpadmin用户,必须有一个已安装的SSH密钥对,并且能够从群集中的任何主机SSH到群集中的任何其他主机,而无需输入密码或口令(称为“免密码SSH”)。如果您启用了从master主机到群集中其他主机的免密码SSH (“ 1- n免密码SSH”),则可以使用Greenplum数据库命令行实用程序gpssh-exkeys,稍后可启用从每台主机到其他主机的免密码SSH (“ n - n免密码SSH”)。
您可以选择给 gpadmin 用户sudo特权,以便您作为gpadmin来使用sudo, ssh/scp, and gpssh/gpscp等命令,可以轻松地管理Greenplum数据库集群中的所有主机。
以下步骤显示了如何设置 gpadmin主机上的用户,设置密码,创建SSH密钥对以及(可选)启用sudo功能。这些步骤必须在每个Greenplum数据库群集主机上以root用户身份执行。(对于大型Greenplum数据库集群,您将需要使用系统配置工具来自动执行这些步骤。)
注意:请参见Ansible Playbook示例中的一个示例,其中显示了如何自动创建gpadmin 用户,并在群集中的所有主机上安装Greenplum数据库软件。
注意:如果您想通过创建gpadmin用户作为系统帐户,要在RHEL 7.2或CentOS 7.2上安装Greenplum数据库,并想要禁用IPC对象删除,请同时提供 -r 选项(将用户创建为系统帐户)和 -m 选项(创建home目录) 给user add 命令。在Ubuntu系统上,您必须使用 带 -m 选项的user add 命令,来为用户创建home目录。
# groupadd gpadmin
# useradd gpadmin -r -m -g gpadmin
# passwd gpadmin
New password:
Retype new password:
注意:请确保gpadmin用户在每台主机上具有相同的用户ID(uid)和组ID(gid)号,以防止使用脚本或服务进行身份验证或许可的问题。例如,如果gpadmin 用户在不同的segment主机上具有不同的uid或gid号,当备份Greenplum数据库到基于网络的文件系统或存储设备,则可能会失败。当您创建 gpadmin 组和用户时,您可以使用 groupadd -g 选项来指定gid号,以及 useradd -u选项来指定uid编号。使用命令id gpadmin,可以查看当前主机的用户gpadmin 的uid和gid 。
$ 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:
在密码短语提示下,按Enter键,这样SSH连接将不需要输入密码短语。%wheel ALL=(ALL) NOPASSWD: ALL
确保取消注释的那一行具有 NOPASSWD 关键词。
使用以下命令,添加 gpadmin 用户到 wheel 分组。
# usermod -aG wheel gpadmin