对于运行RHEL或CentOS的所有Greenplum数据库主机系统,必须禁用SELinux
1.以root用户身份检查SELinux的状态:
# sestatus
SELinuxstatus: disabled
2.如果未禁用SELinux,请通过编辑/etc/selinux/config文件。以root身份更改SELINUX中的参数配置文件如下:
SELINUX=disabled
3.如果系统上安装了系统安全服务守护程序(SSSD),请编辑SSSD配置文件并设置 selinux_provider 参数以防止即使禁用SELinux也可能发生与SELinux相关的SSH身份验证被拒绝的情况。以root身份编辑/etc/sssd/sssd.conf 并添加以下参数:selinux_provider=none
没有该文件
4.重新引导系统以应用所做的所有更改,并确认SELinux已禁用。
您还应该禁用防火墙软件,例如 iptables (在RHEL 6.x和CentOS 6.x等系统上),firewalld(在RHEL 7.x和CentOS 7.x等系统上),或ufw(在Ubuntu系统上,默认情况下禁用)。
如果您决定启用 iptables为了安全起见,在Greenplum数据库中使用iptables(可选)。
1.请按照以下步骤禁用 iptables:
以root用户身份检查 iptables:# /sbin/chkconfig --list iptables
如果 iptables 禁用,命令输出为:iptables 0:off 1:off 2:off 3:off 4:off 5:off 6:off
2.如有必要,以root用户身份执行此命令以禁用 iptables:/sbin/chkconfig iptables off
应用更改后,您将需要重新引导系统。
1.对于具有firewalld,检查状态firewalld使用命令:# 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)
2.如有必要,以root用户身份执行这些命令以禁用firewalld:
# systemctl stop firewalld.service
# systemctl disable firewalld.service
有关配置防火墙软件的更多信息,请参阅防火墙或操作系统的文档。
Greenplum要求在Greenplum数据库系统中的所有主机(masters and segments)上设置某些Linux操作系统(OS)参数。通常,需要更改以下类别的系统参数:
编辑/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 and 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 = 197951838
kernel.shmmax = 810810728448
如果Greeplum数据库主数据库的共享内存配置与段主机不同,则_PHYS_PAGES和PAGE_SIZE值可能会有所不同,并且 kernel.shmall and kernel.shmax主机上的值将与段主机上的值不同。
1976971264
Segment Host Memory 段主机内存
vm.overcommit_memory使用Linux内核参数来确定可以为进程分配多少内存。对于Greenplum数据库,此参数应始终设置为2。
vm.overcommit_ratio是用于应用程序进程的RAM的百分比,其余部分保留给操作系统。在Red Hat Enterprise Linux上,默认值为50。
对于 vm.overcommit_ratio有关基于资源组的资源管理或基于资源队列的资源管理的调整和计算建议,请参阅《Geenplum数据库管理员指南》中的“ 配置段主机内存的选项”。另请参阅Greenplum数据库服务器配置参数 gp_vmem_protect_limit在“ Greenplum数据库参考指南”中。
Port Settings 端口设定
为避免在Greenplum初始化期间Greenplum数据库与其他应用程序之间的端口冲突,请记下操作系统参数指定的端口范围 net.ipv4.ip_local_port_range。使用初始化Greenplum时gpinitsystem群集配置文件,请不要在该范围内指定Greenplum数据库端口。例如,如果net.ipv4.ip_local_port_range = 10000 65535,将Greenplum数据库基本端口号设置为这些值。
PORT_BASE = 6000
MIRROR_PORT_BASE = 7000
有关的信息 gpinitsystem群集配置文件,请参阅初始化Greenplum数据库系统。
对于具有Greenplum数据库的Azure部署,请避免使用端口65330;将以下行添加到sysctl.conf中:net.ipv4.ip_local_reserved_ports = 65330
有关云部署的其他要求和建议,请参阅《Greenplum数据库云技术建议》。
System Memory 系统记忆体
对于内存超过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_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。
执行 ulimit -u每个段主机上的命令显示每个用户可用的最大进程数。验证返回值为131072。
XFS挂载选项
XFS是Linux平台上的首选数据存储文件系统。使用 mount命令,并为RHEL和CentOS系统提供以下建议的XFS挂载选项:
rw,nodev,noatime,nobarrier,inode64
Ubuntu系统不支持nobarrier选项。仅使用以下选项:rw,nodev,noatime,inode64
See the mount manual page (man mount opens the man page) for more information about using this command.
XFS选项也可以在 / etc / fstab文件。此示例条目来自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
该blockdev --setra命令不是持久的。您必须确保在系统重新启动时设置预读值。设置值的方式因系统而异。
一种设置 blockdev 系统启动时的价值是通过添加 / sbin / blockdev --setra 在命令 rc.local 文件。例如,将此行添加到rc.local 文件以设置磁盘的预读值 数据库。/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
注意:使用echo用于设置磁盘I / O调度程序策略的命令不是持久性的,因此,必须确保在系统重新引导时运行该命令。该命令的运行方式因系统而异。
在启动时设置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
在使用以下系统例如RHEL 7.x或CentOS 7.x引导时指定I / O调度程序 grub2,请使用系统实用程序grubby。当以root身份运行时,此命令将添加参数。# grubby --update-kernel=ALL --args="elevator=deadline"
添加参数后,重新引导系统。grubby命令可以显示内核参数设置。# grubby --info=ALL
有关的更多信息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
在使用的系统例如RHEL 7.x或CentOS 7.x上 ,请使用系统实用程序grub2的。当以root身份运行时,此命令将添加参数。# grubby --update-kernel=ALL --args="transparent_hugepage=never"
添加参数后,重新引导系统。
对于Ubuntu系统,请安装hugepages package并以根用户身份执行此命令:# hugeadm --thp-never
cat命令检查THP的状态。输出表明THP已禁用。
$ cat /sys/kernel/mm/*transparent_hugepage/enabled
always [never]
禁用RHEL 7.2或CentOS 7.2或Ubuntu的IPC Object Removal。默认系统设置(systemd setting) RemoveIPC =yes 非系统用户帐户注销时删除IPC连接。The default systemd setting RemoveIPC=yes removes IPC connections when non-system user accounts log out. 这将导致Greenplum数据库实用程序 gpinitsystem因信号错误而失败。请执行以下任一操作来避免此问题。
当您添加 gpadmin操作系统用户帐户到“ 创建Greenplum管理用户”中的主节点,将用户创建为系统帐户。
禁用 RemoveIPC。在此设置参数 /etc/systemd/logind.conf 在Greenplum数据库主机系统上。RemoveIPC=no
重启systemd-login service或重新启动系统后生效。要重新启动服务,请以root用户身份运行此命令service systemd-logind restart
。
某些Greenplum数据库管理实用程序包括 gpexpand, gpinitsystem和 gpaddmirrors,请使用secure shell (SSH) 连接来执行其任务。在大型Greenplum数据库部署,云部署或每个主机具有大量segments部署其中。这些实用程序可能会超出主机的未认证连接的最大阈值。发生这种情况时,您会收到以下错误:ssh_exchange_identification: Connection closed by remote host.、
要增加Greenplum数据库系统的此连接阈值,请配置/etc/ssh/sshd_config或/etc/sshd_config守护程序配置文件来更新 MaxStartups 和 MaxSessions 。
如果指定 MaxStartups和MaxSessions使用单个整数值,您可以确定并发未认证连接的最大数量(MaxStartups)以及每个网络连接所允许的最大的open shell,登录或子系统会话数(MaxSessions)。例如:
MaxStartups 200
MaxSessions 200
如果指定 MaxStartups使用“ start:rate:full ”语法,可以通过SSH守护程序启用随机的早期连接删除。start标识允许的最大未经身份验证的SSH连接尝试次数。一旦达到未认证连接尝试的开始次数,SSH守护程序将拒绝后续连接尝试的速率百分比。“完整”标识未经身份验证的连接尝试的最大数量,之后所有尝试都将被拒绝。例如:
Max Startups 10:30:200
MaxSessions 200
更新后重新启动SSH守护程序 MaxStartups 和 MaxSessions。例如,在CentOS 6系统上,root用户运行以下命令:# service sshd restart
有关SSH配置选项的详细信息,请参阅Linux发行版的SSH文档。
注意:如果grubby命令不会更新RHEL 7.x或CentOS 7.x系统的内核,您可以手动更新系统上的所有内核。例如,添加参数transparent_hugepage=never到系统上的所有内核。
1.将参数添加到 / 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"
2.以超级用户身份运行 grub2-mkconfig 命令来更新内核 # grub2-mkconfig -o /boot/grub2/grub.cfg
3.重新启动系统。
您应该使用NTP(网络时间协议)来同步组成Greenplum数据库系统的所有主机上的系统时钟。有关NTP的更多信息,请参见www.ntp.org。段主机上的NTP应该配置为将主控主机用作主要时间源,将备用主控机用作辅助时间源。在主备主机上,将NTP配置为指向首选时间服务器。
配置NTP
1.在主控主机上,以root用户身份登录并编辑 /etc/ntp.conf文件。设置服务器指向数据中心的NTP时间服务器的参数。例如(如果 10.6.220.20 是您的数据中心NTP服务器的IP地址):server 10.6.220.20
2.在每个segment主机上,以root用户身份登录并修改 /etc/ntp.conf文件。设置第一个服务器参数指向主控主机,第二个服务器参数指向备用主控主机。例如:
server mdw prefer
server smdw
3.在备用主控主机上,以root用户身份登录并编辑 /etc/ntp.conf文件。设置第一个服务器参数指向主要主控主机,第二个服务器参数指向数据中心的NTP时间服务器。例如:
server mdw prefer
server 10.6.220.20
4.在主控主机上,使用NTP守护程序同步所有Greenplum主机上的系统时钟。例如,使用gpssh:# gpssh -f hostfile_gpssh_allhosts -v -e 'ntpd'
在每个节点上创建一个专用的操作系统用户帐户,以运行和管理Greenplum数据库。按照惯例该用户帐户名为gpadmin 。不能以下root用户运行Greenplum数据库服务器。gpadmin 用户必须有权访问安装和运行Greenplum数据库所需的服务和目录。
gpadmin用户在每个GP主机上必须安装SSH密钥对,并且能够从群集中的任何主机SSH到群集中的任何其他主机,而无需输入密码或口令(称为“无密码SSH”)。如果您启用了从主主机到群集中其他所有主机的无 密码SSH (“ 1- n无密码SSH”),则可以使用Greenplum数据库gpssh-exkeys 命令行实用程序,以启用从每个主机到其他主机的无密码SSH (“ n - n无密码SSH”)。
您可以选择给 gpadmin 用户sudo特权,以便您可以轻松地管理Greenplum数据库集群中的所有主机 gpadmin 使用 sudo, ssh / scp和 gpssh / gpscp 命令。
以下步骤说明了如何设置 gpadmin主机上的用户,设置密码,创建SSH密钥对以及(可选)启用sudo功能。这些步骤必须在每个Greenplum数据库群集主机上以root用户身份执行。(对于大型Greenplum数据库集群,您将需要使用系统配置工具来自动执行这些步骤。)
1.创建 gpadmin 组和用户
如果您要在RHEL 7.2或CentOS 7.2上安装Greenplum数据库,并通过创建gpadmin 用户作为系统帐户(同时提供 -r 选项(将用户创建为系统帐户)和 -m 选项(创建主目录) 用户给usradd命令)来关闭IPC object removal。在Ubuntu系统上,您必须使用 -m 与选项 用户添加 命令为用户创建主目录。
本示例创建了 gpadmin 组,创建 gpadmin 用户作为具有主目录的系统帐户,并且是 gpadmin 组,并为用户创建密码。
# groupadd gpadmin
# useradd gpadmin -r -m -g gpadmin
# passwd gpadmin
New password: <changeme>
Retype new password: <changeme>
请确保gpadmin用户在每个主机上具有相同的用户ID(uid)和组ID(gid)号,以防止使用脚本或服务进行身份验证或许可的问题。例如,如果将Greenplum数据库备份到某些联网的文件干或存储设备,则可能会失败。gpadmin 用户在不同的段主机上具有不同的uid或gid号。当您创建 gpadmin 组和用户,您可以使用 groupadd -g 指定gid号和 useradd -u选项以指定uid编号。使用命令id gpadmin 看到的uid和gid gpadmin 当前主机上的用户。
2.切换到 gpadmin 用户并为 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:
在密码短语提示下,按Enter键,以便SSH连接不需要输入密码短语。
# usermod -aG wheel gpadmin