1.部署环境
服务器版本为CentOS Linux release 7.9.2009 (Core)
,最新版本的安装文件是20220408年发布的open-source-greenplum-db-6.20.3-rhel7-x86_64.rpm
,Greenplum下载地址 https://github.com/greenplum-db/gpdb/releases。
2.安装前配置
2.1 修改hostname
echo "hostname" > /etc/hostname
2.2 关闭防火墙,禁止使用selinux
# 检查防火墙的状态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)# 1.防火墙停止禁用systemctl stop firewalld && systemctl disable firewalld# 查看selinux状态cat /etc/selinux/config # 以下是配置信息 # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=disabled # SELINUXTYPE= can take one of three two values: # targeted - Targeted processes are protected, # minimum - Modification of targeted policy. Only selected processes are protected. # mls - Multi Level Security protection. SELINUXTYPE=targeted# 2. 可用于未关闭vim 修改配置文件 //etc/selinux/config 或执行下列命令sed -i "s#^SELINUX=.*#SELINUX=disabled#g" /etc/selinux/config
2.3 修改内核参数
单机测试版不能配置,内核参数说明见文末。
# 覆盖原配置信息cat <<EOF > /etc/sysctl.confkernel.shmmax = 5000000000000kernel.shmmni = 32768kernel.shmall = 40000000000kernel.sem = 2000 4096000 2000 2048kernel.sysrq = 1kernel.core_uses_pid = 1kernel.msgmnb = 65536kernel.msgmax = 65536kernel.msgmni = 2048net.ipv4.tcp_syncookies = 1net.ipv4.ip_forward = 0net.ipv4.conf.default.accept_source_route = 0net.ipv4.tcp_tw_recycle = 1net.ipv4.tcp_max_syn_backlog = 4096net.ipv4.conf.all.arp_filter = 1net.ipv4.ip_local_port_range = 1025 65535net.core.netdev_max_backlog = 10000net.core.rmem_max = 2097152net.core.wmem_max = 2097152vm.overcommit_memory = 2vm.overcommit_ratio = 95vm.dirty_background_ratio = 0vm.dirty_ratio = 0vm.dirty_background_bytes = 1610612736vm.dirty_bytes = 4294967296EOF# 使配置生效sysctl -p
2.4 修改/etc/hosts
# 查询ifconfig# 写入cat <<EOF >> /etc/hostsxx.xx.xxx.xx hostnameEOF
2.5 关闭RemoveIPC
RemoveIPC默认开启会影响 的使用the shared memory segments 和 semaphores 所有应用程序必须编辑 logind.conf 文件并设置 RemoveIPC=no。
# 1.编辑 /etc/systemd/logind.conf 文件设置 RemoveIPC=no# 2.使配置生效echo "RemoveIPC=no" >> /etc/systemd/logind.confservice systemd-logind restart
2.6 设置network
每个节点机器的设置内容不同。
# 覆盖原有配置信息cat <<EOF > /etc/sysconfig/networknetworking=yeshostname=当前节点机器的hostnameEOF
2.7 修改打开文件限制
# 覆盖原有配置信息cat <<EOF > /etc/security/limits.conf* soft nofile 524288* hard nofile 524288* soft nproc 131072* hard nproc 131072EOF
2.8 修改ssh连接数
# 追加配置信息cat <<EOF >> /etc/ssh/sshd_configMaxStartups 200MaxSessions 200EOF
2.9 磁盘配置
# 查询调度模式dmesg | grep -i scheduler# 永久生效的修改# 1.修改磁盘调度模式# 2.禁用透明大内存grubby --update-kernel=ALL --args="elevator=deadline"grubby --update-kernel=ALL --args="transparent_hugepage=never"
# 查看硬盘及分区信息fdisk -l # 硬盘及分区信息 Disk /dev/vda: 53.7 GB, 53687091200 bytes, 104857600 sectors# 3.修改磁盘读取块大小# 【根据分区信息修改】注意: /block后的vda 及 /dev后的vda 要与查询的磁盘信息一致# /etc/rc.local是/etc/rc.d/rc.local的快捷方式 均需要有执行权限echo deadline > /sys/block/vda/queue/schedulerecho /sbin/blockdev --setra 16384 /dev/vda >> /etc/rc.d/rc.localchmod +x /etc/rc.d/rc.localchmod +x /etc/rc.local
2.10 重启
# 集群配置完成后重启服务器reboot
3.GP数据库安装
3.1 添加组及用户
groupadd gpadminuseradd -r -m -g gpadmin gpadmin# 为gpadmin用户设置密码passwd gpadmin
3.2 单机ssh免密
# 1.生成秘钥对ssh-keygen -t rsa# 2.分发公钥ssh-copy-id gpadmin@localhost
3.3 安装GPDB
# 本次安装文件为`open-source-greenplum-db-6.20.3-rhel7-x86_64.rpm`。# 1.安装(默认安装到/usr/local)目录下yum install -y ./open-source-greenplum-db-6.20.3-rhel7-x86_64.rpm# 2.赋权给 gpadmimchown -R gpadmin:gpadmin /usr/local/greenplum*
3.4 环境变量配置
# 切换到 gpadmin 用户su gpadmin# 1.添加配置文件 .bashrc# 2.使配置文件生效cat <<EOF >> /home/gpadmin/.bashrc source /usr/local/greenplum-db/greenplum_path.shexport PGPORT=5432export PGUSER=gpadminexport MASTER_DATA_DIRECTORY=/home/gpadmin/data/master/gpseg-1export PGDATABASE=gpdbexport LD_PRELOAD=/lib64/libz.so.1 psEOFsource /home/gpadmin/.bashrc
3.5 ssh权限互通设置
# 1.创建所有主机文件cat <<EOF > /home/gpadmin/hostfile_exkeystcloudEOF# 2.ssh权限互通设置gpssh-exkeys -f /home/gpadmin/hostfile_exkeys
3.6 创建数据文件夹
在/home/gpadmin
下创建 data目录,data目录下创建master、primary、mirror文件夹。
mkdir datacd datamkdir mastermkdir primarymkdir mirror
3.7 配置数据节点的主机列表文件
# 设置节点服务器(单机版就是master节点)cat <<EOF > /home/gpadmin/hostfile_gpinitsystemhostnameEOF
3.8 数据库初始化文件
# 1.复制初始化文件cp /usr/local/greenplum-db/docs/cli_help/gpconfigs/gpinitsystem_config /home/gpadmin/gpinitsystem_config# 2.修改初始化文件vim /home/gpadmin/gpinitsystem_config# ------------------------以下为配置内容------------------------# 该项配置设置主节点数据存储位置,括号里边有几个代表每台主机创建几个postgresql数据库实例,即segment的实例数,示例是2个。# 推荐2核配一个节点。declare -a DATA_DIRECTORY=(/home/gpadmin/data/primary /home/gpadmin/data/primary)# 该项配置设置主节点机器名字MASTER_HOSTNAME=hostname# 该项配置设置主节点数据存储位置MASTER_DIRECTORY=/home/gpadmin/data/master# 该项配置设置是备节点数据存储位置,规则同DATA_DIRECTORY,括号里边数量和DATA_DIRECTORY保持一致。# greenplum数据分主节点和备节点,主节点挂掉时候备节点数据会启用。(单机版无需配置)# declare -a MIRROR_DATA_DIRECTORY=(/home/gpadmin/data/primary /home/gpadmin/data/primary)# 该项配置设置默认数据库名字,和环境变量数据库名字保持一致,不然会失败。DATABASE_NAME=gpdb# 该项配置数据节点的主机列表文件位置MACHINE_LIST_FILE=/home/gpadmin/hostfile_gpinitsystem
3.9 初始化数据库
# 数据库初始化命令gpinitsystem -c gpinitsystem_config [-h hostfile_gpinitsystem] [-B parallel_processes] [-p postgresql_conf_param_file] [-s standby_master_host] [--max_connections=number] [--shared_buffers=size] [--locale=locale] [--lc-collate=locale] [--lc-ctype=locale] [--lc-messages=locale] [--lc-monetary=locale] [--lc-numeric=locale] [--lc-time=locale] [--su_password=password] [-S] [-a] [-q] [-l logfile_directory] [-D]# 单机版初始化gpinitsystem -c /home/gpadmin/gpinitsystem_config
3.10 设置远程登录
# 设置远程登录,重新加载数据库配置echo "host all gpadmin 0.0.0.0/0 md5" >> /home/gpadmin/data/master/gpseg-1/pg_hba.confgpstop -u
3.11 登录验证
# 进入命令行界面[gpadmin@tcloud ~]$ psqlpsql (9.4.26)Type "help" for help.gpdb=## 设置管理员密码alter user gpadmin with password 'gpadmin';
4.内核配置参数说明
# 是否启用kernel.sysrq(在大多数服务已无法响应的情况下,还能通过按键组合来完成一系列预先定义的系统操作,1启用,0禁用)kernel.sysrq = 0# 可以控制core文件的文件名中是否添加pid作为扩展(文件内容为1,表示添加pid作为扩展名,生成的core文件格式为core.xxxx;为0则表示生成的core文件同一命名为core)kernel.core_uses_pid = 1# 限制一个队列的最大长度kernel.msgmnb = 65536# 限制一条消息的最大长度kernel.msgmax = 65536# 最大共享内存段大小kernel.shmmax = 68719476736# 可以使用的共享内存的总量kernel.shmall = 4294967296# 整个系统共享内存段的最大数目kernel.shmmni = 4096# 每个信号对象集的最大信号对象数;系统范围内最大信号对象数;每个信号对象支持的最大操数;系统范围内最大信号对象集数。kernel.sem = 250 32000 100 128# 决定了系统中同时运行的最大的消息队列的个数kernel.msgmni = 256# 系统级打开最大文件句柄的数量fs.file-max = 65536# (0代表禁止进行IP转发;1代表可以进行IP转发)net.ipv4.ip_forward = 0# 控制系统是否开启对数据包源地址的校验net.ipv4.conf.default.rp_filter = 1# 禁用icmp源路由选项net.ipv4.conf.default.accept_source_route = 0# 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭。net.ipv4.tcp_syncookies = 1# 0代表不转发源路由帧,若做NAT建议开启。net.ipv4.conf.all.forwarding = 0# 系统中的程序会选择这个范围内的端口来连接到目的端口(目的端口当然是用户指定的)net.ipv4.ip_local_port_range = 9000 65000# 表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间,默认是60,降低这个值以提高系统性能。net.ipv4.tcp_fin_timeout = 30# 定义backlog队列容纳的最大半连接数,如果配置高可以设置的更高。net.ipv4.tcp_max_syn_backlog = 8192# 套接字接收缓冲区大小的缺省值net.core.rmem_default = 262144# 套接字接收缓冲区大小的最大值net.core.rmem_max = 4194304# 套接字发送缓冲区大小的缺省值net.core.wmem_default = 262144# 套接字发送缓冲区大小的最大值net.core.wmem_max = 262144
5.初始化参数说明
-a# 不提示用户进行确认。-B parallel_processes# 要并行创建的Segment数。如果未指定,该工具一次最多启动4个并行进程。-c gpinitsystem_config# 需。配置文件的完整路径和文件名称,其中包括所有已经定义的参数,用于配置和初始化新的Greenplum数据库系统。有关此文件的说明,请参见初始化配置文件格式。-D# 设置日志输出等级为debug。-h hostfile_gpinitsystem# 可选。包含Segment主机地址的文件的完整路径和文件名。如果未在命令行中指定,则可以使用gpinitsystem_config文件中的MACHINE_LIST_FILE参数指定主机文件。--locale=locale | -n locale# 设置Greenplum数据库使用的默认区域。如果未指定,则Master主机的LC_ALL、LC_COLLATE或LANG 环境变量决定区域。如果这些没有设置,则默认的区域是C(POSIX)。区域标识符由语言标识符、地区标识符和可选的字符集编码组成。例如,sv_SE是瑞典语,en_US是
美国英语,fr_CA是加拿大法语。如果不止一个字符集可以用于一个区域,则规范如下所示:en_US.UTF-8(区域规范和字符集编码)。在大多数系统中,命令locale将显示区域环境设置,locale -a将会显示所有可用的区域的列表。--lc-collate=locale# 类似于--locale,但是设置用于排序规则(排序数据)的区域。Greenplum数据库初始化后无法更改排序顺序,因此有必要选择与用户计划用于数据的字符集编码兼容的排序规则区域。C或POSIX有一个特殊的排序规则名称(字节顺序排序而不是字典顺序排序)。C排序规则可以用于任何字符编码。--lc-ctype=locale# 类似于--locale,但设置用于字符分类的语言环境(哪些字符序列是有效的,以及它们如何被解释)。在Greenplum数据库初始化之后,这是不能更改的,因此有必要选择一个与用户计划存储在Greenplum数据库中的数据兼容的字符分类区域。--lc-messages=locale# 类似于--locale,但设置用于Greenplum数据库输出消息的语言环境。当前版本的Greenplum数据库不支持输出消息的多种区域(所有消息均为英文),所以更改此设置不会有任何效果。--lc-monetary=locale# 类似--locale,但是设置用于格式化货币金额的区域。--lc-numeric=locale# 类似--locale,但是设置用于格式化数字的区域。--lc-time=locale# 类似--locale,但设置用于格式化日期和时间的区域。-l logfile_directory# 写入日志文件的目录,默认为~/gpAdminLogs。--max_connections=number | -m number# 设置Master允许的最大客户端连接数。默认值是250。-p postgresql_conf_param_file# 可选。包含用户想要为Greenplum数据库设置的postgresql.conf参数设置的文件名称。 这些设置将在初始化单个Master和Segment实例时使用。 用户也可以在初始化后使用gpconfig工具来设置参数。-q# 以静默模式运行。命令行输出不显示在屏幕上,但仍然写入日志文件。--shared_buffers=size | -b size# 设置Greenplum服务器实例用于共享内存缓冲区的内存量。用户可以指定以千字节(KB)、兆字节(MB)或千兆字节(GB)为单位的大小。默认值是125MB。-s standby_master_host# 可选。如果用户希望配置备份Master主机,请使用此选项指定主机名称。 Greenplum数据库软件必须已经在该主机上安装和配置。--su_password=superuser_password | -e superuser_password# 使用此选项可指定为Greenplum数据库超级用户帐户(例如gpadmin)设置的密码。 如果未指定此选项,则默认密码gparray会分配给超级用户。用户以后可以使用ALTER ROLE命令更改密码。# 推荐的最佳安全实践:不要生产环境中使用默认密码选项。安装之后立即更改密码。-S# 指定了镜像参数,在可用主机上散布镜像Segment。默认情况下,将镜像Segment集合起来放在与其主Segment集合不同的后补主机上。镜像散布将每个镜像放置在Greenplum数据库阵列内的不同主机上。只有当主机数量大于Segment实例数量时,才允许进行散布。-v | —version# 该工具的版本。--help# 显示在线帮助。
6.更新日志
2022-05-16 添加ssh权限互通设置。