Greenplum部署
1、 安装中所涉及到的操作系统相关参数调整,主要针对Redhat Linux操作系统,其他操作系统(如:SUSE、Solaris等)参数配置上会存在差异,后续逐步补充完善。
2、 安装前在作者csdn资源仓库中下载,greenplum安装脚本zip包,其中有众多方便的安装脚本。(标黄的即是zip包中的脚本)
第一章 安装前准备
1.1 网络规划
Greenplum数据库系统由Master主机和Segment主机组成。Master主机和Segment主机之间会组成一个内部网络(LAN)。为了充分发挥Greenplum数据库并行处理的性能,对网络带宽要求较高。服务器会配置多个网卡(一般是配置NAT网络和host-only网络),内部网需要配置多个网段的IP。需要对外连接的服务器需配置外部IP。
一建议在Greenplum数据库系统安装之前,把网络配置规划好。
1.2 存储空间规划
首先,需要评估目标数据库数据所需要的空间容量。建议了解客户搭建Greenplum数据库的具体应用。
举例:估计数据库所需空间为U,数据库需要启用Mirror,磁盘阵列总可用空间为D(Raid之后)。空间规划服务和如下公式:
2 * U + U / 3 = D * 70%
磁盘空间D平均分配到各个Segment服务器上。
Master需要相应的空间。使用服务器内置硬盘的计算方式类似。
1.3 数据库实例规划
规划每个Segment服务器上建立的数据库实例的数量(instance数量),通常建议每2个CPU内核(core)对应一个数据库实例。
如 :2*4核CPU的服务区,可配置4个实例。
第二章 安装介质
2.1 命令服务
补充:不同操作系统安装镜像不同,安装前确认所有机器上已安装好下列命令或服务:
1:httpd
2:ifconfig
2.2 Greenplum安装介质
GP安装介质需根据实际需要从Download Center上下载对应的版本。
大部分情况下开发时候我们只需要建立greenplum的后台服务,而不需要可视化工具之类,因此我们只需要一个bin或者rpm的gp安装包。
Greenplum安装包可提前执行,可利用其gpscp、gpssh等工具。
2.3 操作系统建议
CentOS7.3
Segment节点建议不安装X-Windows, Gnome, KDE, and Printers。
第三章 操作系统准备
3.1 修改主机名
修改各台主机的主机名称。一般建议的命名规则如下:
Master:mdw
Standby Master:smdw
Segment Host:sdw1、sdw2……sdwn
如果主机名不满足上述规则,脚本中要修改hostname
修改操作:
1、hostname mdw
2、修改 /etc/sysconfig/network 配置文件中的hostname
3、如果不生效,修改/etc/hostname配置文件中的内容为主机名
4、如果还是不生效,hostnamectl set-hostname mdw(可直接执行4步骤)
3.2 修改/etc/hosts文件
通常Master和Standby Master主机都配置外部IP和内部IP。Segment主机可只配置内部IP。所有主机的hosts文件内容必须保持一致。
如下为配置例子:
192.168.1.254 mdw
192.168.1.253 smdw
192.168.1.252 sdw
3.3 关闭相关服务
【涉及机器】:所有服务器
关闭防火墙
Systemctl stop firewalld
Systemctl disable firewalld
3.4 修改系统参数(Redhat)
canrun.sh
执行canrun.sh使当前目录脚本获得可执行权限
gp_system.sh
gp_system-1.sh
【涉及机器】:所有服务器
使用root用户进行修改,可直接执行上述两个脚本,在此之前,如果本机不通外网,则需要部署本地源,这部分内容因为属于linux部署基本操作所以这里不说,对参数的修改重启后生效。
3.5 注意
用脚本修改完毕之后注意,查看/etc/sysctl.conf中的kernel.sem参数
这个参数随着各主机内存配置的增大而增大。
32G时配置250 512000 100 2048合适
256G时配置50100 128256000 50100 2560合适
其他内存配置置中取值
Kernel.sem取值需要满足规则:
第一个值和第三个值相等,第二个值数量级等于第三个和第四个值乘积。
kernel.sem中四个参数表示对信号量的限制,具体含义大家可去自行了解。
第四章 建立数据目录
4.1 Linux系统采用XFS文件系统
mountdisk-挂载盘.txt
此部分建议根据所给的mountdisk-挂载盘.txt自行操作
dataurl.sh
每个节点执行dataurl脚本生成数据目录,执行时后面加上数据目录参数,如:./dataurl.sh /data
第五章 Master安装Greenplum
gp_master_install.sh
Master节点运行,提供一个参数$1为greemplum的版本号,例如:./gp_master_install.sh 5.14.0。
这个官方链接下载二进制包,可以选择版本。最新为6.0版本
Master节点安装GP,安装在/usr/local/greenplum-db/目录下。
choosehostpath.sh
Master节点执行choosehostpath.sh,创建之后所需的文件,/usr/local/greenplum-db/gpconfigs/路径下的hostsfile文件。
看是否生成all_hosts_only、all_segs、gpinitsystem_config、hostfile_exkeys、stby_all_segs这4个文件
第六章 建立多机信任
sshconfig.sh
Master节点执行:修改多机信任相关的参数,执行完之后建议重启
6.1 root用户建立多机信任
建立多机信任:
gpssh-exkeys -f /usr/local/greenplum-db/gpconfigs/hostfile_exkeys
对于RHEL6.x版本,建议先关闭一个环境变量再做多机互信
selinux设置disabled
ps:如建立多机信任时出现permission denied(publickey.gssapi-with-mic)或者类似的错误,需要修改每台机器的/etc/ssh/sshd-config文件,去掉PermitRootLogin前的#,并把对应的值改为yes,
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
默认是用的22端口,如果22端口没开建议先打开22端口
6.2 建立用户和组
createug.sh
所有节点执行修改用户和组,执行时后面加参数,参数值为数据目录./createug.sh /data
6.3 修改gpadmin用户配置
gpadmincg.sh
所有节点使用gpadmin用户操作
执行时候更改脚本中的
MASTER_DATA_DIRECTORY=/data/master/gpseg-1
将值改为你的主机数据目录
6.4 gpadmin用户建立多机信任
使用gpadmin用户在Master主机上操作
gpssh-exkeys -f /usr/local/greenplum-db/gpconfigs/hostfile_exkeys
(提示密码,输入gpadmin)
对于RHEL6.x版本,建议先关闭一个环境变量再做多机互信
unset OPENSSL_CONF
第七章 时钟同步
使用root用户进行操作,涉及所有服务器。
Greenplum推荐使用NTP(Network Time Protocol)同步各台主机的时钟。建议设置一台独立的时钟服务器。
1、Master服务器配置与时钟服务器同步。修改配置文件/etc/ntp.conf后,启动ntpd服务。
举例:
配置文件增加:server 10.6.220.20
启动服务:
service ntpd start
chkconfig ntpd on
如果没有独立的时钟服务器,则应该以Master服务器做内部的时钟服务器,Master就可以不用修改ntp.conf配置文件,直接启动ntpd服务即可。
2、所有Segment服务器优先与Master服务器同步,其次与Standby Master服务器同步。修改配置文件/etc/ntp.conf后,重启ntpd服务。
配置文件增加:
server mdw prefer
server smdw
启动服务:
service ntpd start
chkconfig ntpd on
3、Standby Master服务器优先与Master服务器,其次与始终服务器同步。修改配置文件/etc/ntp.conf后,重启ntpd服务。
配置文件增加:
server mdw prefer
server 10.6.220.20 (时钟服务器举例)
启动服务:
service ntpd start
chkconfig ntpd on
如果没有独立的时钟服务器,第二行不用配置。
4、检查时钟同步结果(需要等几分钟,时钟才会自动同步)
gpssh -f ./all_hosts_only
=>date (查看各台服务器时间是否一致)
(按经验来说,第四步先不忙着执行,等都配置好了再来查看)
第八章 其他机器安装Greenplum
重启所有节点之后,在Master节点上执行
gpseginstall -f /usr/local/greenplum-db/gpconfigs/stby_all_segs -p gpadmin
在其他节点上安装GP。若要提示输入smdw的密码,则输入gpadmin。
第九章 系统检查
在Master上使用gpadmin用户登录执行系统检查
9.1 参数配置检查(非必要)
配置all_hosts_single文件内容如下:
sdw1
sdw2
gpcheck -f /usr/local/greenplum-db/gpconfigs/all_hosts_single -m mdw -s smdw
核对并修改下你感应系统参数。
9.2 性能检查
9.2.1 网络性能检查
网络性能测试需要每个网段分别进行测试,按照4个Segment Host和2个网络为例,首先配置如下两个配置文件:
all_net_1文件:
sdw1-1
sdw2-1
all_net_2文件:
sdw1-2
sdw2-2
然后分别针对两个网段继续测试:
gpcheckperf -f /usr/local/greenplum-db/gpconfigs/all_net_1 -r N -d /tmp > checknetwork.out
gpcheckperf -f /usr/local/greenplum-db/gpconfigs/all_net_2 -r N -d /tmp > checknetwork.out
9.2.2 磁盘性能检查
测试磁盘性能主要针对Segment Host进行测试。因此配置一个all_segs的文件进行测试,并且指定多个目录启动并发测试,测试结果会更好。
all_seg配置文件内容举例如下(与数据库初始化可用同一配置文件):
sdw1-1
sdw1-2
sdw1-3
执行如下命令进行测试:
内存及磁盘:
gpcheckperf -f /usr/local/greenplum-db/gpconfigs/all_hosts_single -r ds -D -d /data1/primary -d /data2/primary -d /data1/mirror -d /data2/mirror > checkio.out
磁盘:
gpcheckperf -f /usr/local/greenplum-db/gpconfigs/all_hosts_single -r d -D -d /data1/primary -d /data2/primary -d /data1/mirror -d /data2/mirror
某台机磁盘检查:
gpcheckperf -h sdw6 -h sdw7 -h sdw8 -h sdw9 -h sdw10 -r d -D -d /data1/primary -d /data2/primary -d /data1/mirror -d /data2/mirror
检查磁盘IO的目标目录是数据库的数据文件目录,测试工具会写入系统内存的两倍大小的数据量。
第十章 初始化数据库
afterinstall.sh
在Master节点上执行afterinstall.sh,并给该脚本提供5个参数,
(1)集群名称(2)Segment主要数据存放目录路径(3)Master节点目录路劲,一般为/data/master(4)Segment镜像数据存放目录路径(5)节点列表文件,一般为/usr/local/greenplum-db/gpconfigs/all_segs。
注意:目录路劲中包含多层路径时,使用""传递相应参数。例如:
./afterinstall.sh dataMPP "/data/data1/primary" "/data/master" "/data/data1/mirror" "/usr/local/greenplum-db/gpconfigs/all_segs"
注意:
两个数据存放路径代表所有机子数据节点的存放路径,比如我有n台机子,每台机子上打算设置6个节点。
其中有3个primary主节点分别放在:
/data/data1/primary、/data/data2/primary、/data/data3/primary
3个mirror主节点分别放在:
/data/data1/mirror、/data/data2/mirror、/data/data3/mirror
那么上述执行参数就填
./afterinstall.sh dataMPP "/data/data1/primary /data/data2/primary /data/data3/primary" "/data/master" "/data/data1/mirror /data/data2/mirror /data/data3/mirror" "/usr/local/greenplum-db/gpconfigs/all_segs"
数据目录间用空格隔开
最后一个值为节点列表文件:里面记录着你希望存放数据的主机的hostname,换行符隔开。
初始化:
gpinitsystem -c /usr/local/greenplum-db/gpconfigs/gpinitsystem_config -s smdw
初始化失败:
这里也是出错最多的地方,我们部署MPP要注意一点,这是一个分布式数据库,我们要关注的不只是master主机更有同集群其他主机上的情况:
1、 我们要学会看日志,如果整个集群报错,在/home/gpadmin/gpAdminLogs/记录着完整的执行日志,可以参考。这种错误一般比较容易找到,因为报错会比较直接。
2、 如果部分segment无法启动,这种错误比较隐蔽,一般日志中可能会有错误出现,我们去报错节点的数据目录查看它的日志,$ MASTER_DATA_DIRECTORY/data*/gpseg*/pg_log/下有丰富冗长而大部分都无用的日志,我们先看启动日志,startup.log,如果出现(SEMMI)字样,那么你的/etc/sysctl.conf中的kernel.sem值不匹配当前的配置和节点数设置,你可以尝试重新修改。(startup.log如果有错误扔出,一般都很好解决,根据错误集中修改即可)
3、 如果部分segment无法启动,而startup.log又没有可参考的信息,那么查看$ MASTER_DATA_DIRECTORY/data*/gpseg*/pg_log/下的其他日志,信息很长很复杂,可以慢慢和正常节点的同一时刻日志作一一对比,查看是否有出入。如果发现出入不大,整个文件只有一句话有区别:
正常节点:receive EOF on connection
异常节点:receive close on connection
那么可以看看是否是异常节点主机上相应端口被占用。
打开master节点上
/usr/local/greenplum-db/gpconfigs/gpinitsystem_config
发现其中有四个端口值,这四个端口是各个节点segment进程的基础端口,随着segment的增加端口值往上加一,所以整个集群跑起来往往会占用数十个端口,为了确保这些端口不被占用,我们修改这四个端口值,改的大一点,奇怪一点就好。
修改访问权限
修改Master数据目录(MASTER_DATA_DIRECTORY)下pg_hba.conf文件。需要了解客户实际情况,有多少客户端的IP地址以及角色需要访问数据库。举例如下:
host | all | gpadmin | 10.32.38.0/16 | trust |
---|---|---|---|---|
主机 | 数据库名 | 角色名 | 客户端IP范围 | 认证方法 |
数据库名:可指定具体的数据库名称,也可使用all 表示所有数据库都允许访问;
角色名:可指定具体的数据库角色名称,也可使用all;
IP范围格式:IP 地址/CIDR,如:10.32.38.0/16;255.0.0.0表示 IPv4 CIDR 掩码长度 8,255.255.255.0表示 IPv4 CIDR 掩码长度 24,而 255.255.255.255 表示 CIDR 掩码长度 32;32就表示指定IP,24就表示小子网。
认证方法:gpmon用户监控时必须填写md5
修改完后数据库重载参数文件:
gpstop -u
第十一章 安装Command Center
11.1 安装Agent
gpadmin用户执行如下步骤。
1、使用gpperfmon_install命令,Greenplum安装完成后已经包含该命令。安装后会建立名为gpperfmon的数据库,默认使用gpmon用户。命令行中红色部分为系统用户gpmon的密码。
gpperfmon_install --enable --password gpmon --port 5432
2、重启GP数据库
gpstop -r
3、确认监控采集进程是否已经启动。
ps -ef |grep gpmmon
4、确认Agent写入的数据是否正常,检查是否有记录写入。
psql -d gpperfmon -c 'select * from system_now;'
5、拷贝Master主机拷贝配置文件到Standby Master的相应目录
scp $MASTER_DATA_DIRECTORY/pg_hba.conf smdw:$MASTER_DATA_DIRECTORY/
scp ~/.pgpass smdw:~/
11.2 安装CommandCenter控制台
第十二章 AIX下安装工具包
如果客户需要在AIX环境中访问和连接GP数据库以及部署ETL应用(需要使用gpfdist)是,则需要安装相应的几个GP工具包:
greenplum-clients-4.2.1.0-build-2-AIX5-powerpc_64:包含psql和pgadmin等客户端工具
greenplum-connectivity-4.2.1.0-build-2-AIX5-powerpc_64:包含ODBC和JDBC接口驱动。另外JDBC的jar版本包含三个列举如下,需要根据主机所使用的JDK版本:
postgresql-8.3-605.jdbc2ee.jar(JDK1.3)
postgresql-8.4-701.jdbc3.jar(JDK1.4、JDK1.5)
postgresql-8.4-701.jdbc4.jar(JDK1.6)
greenplum-loaders-4.2.1.0-build-2-AIX5-powerpc_64:包含gpfdist工具
由于GP工具包的打包方式问题,因此在AIX环境中安装需要有Linux相对应的几个工具包:bash与gtar。否则无法安装bin包。
首先需要在AIX中安装如下版本的rpm包:
bash-3.2-1.aix5.2.ppc.rpm
tar-1.14-2.aix5.1.ppc.rpm
并且GP工具包必须要使用bash运行,执行如下:
bash ./greenplum-loaders-4.2.1.0-build-2-AIX5-powerpc_64.bin
第十三章 附录
13.1 dd测试
有时候需要使用dd命令测试磁盘IO性能。测试命令如下:
并发写测试:
dd if=/dev/zero of=/data1/a.test bs=32k count=520000 &
dd if=/dev/zero of=/data1/b.test bs=32k count=520000 &
并发读测试:
dd if=/data1/a.test of=/dev/null bs=32k count=520000 &
dd if=/data1/b.test of=/dev/null bs=32k count=520000 &
13.2 多次初始化
Greenplum数据库可以多次初始化,前提是每次初始化的数据目录(Master和Segment的数据目录)必须不相同。
gpstart和gpstop可以通过-d参数指定Master数据库目录,启动不同的数据库。如果不指定-d参数,系统则默认使用~/.bashrc文件中所设置的MASTER_DATA_DIRECTORY。
同时只能启动一个GP数据库。
13.3 反复初始化数据库
重新初始化数据库有两种方法:
第一种:如果数据库初始化失败,则使用初始化过程中生成的一个Backout脚本清除安装失败留下垃圾文件和目录(不一定能成功)。
第二种:如果数据库初始化失败,可关闭数据库,删除所有数据目录,再执行一次数据库初始化命令。该方法实践证明定能成功,在这个过程中,可能会出现多机信任key验证不通过的问题,可参考附录“重新建立多机信任密钥问题”章节进行处理。具体步骤如下:
(1)关闭Greenplum数据库(非常关键)
gpstop
(2)删除所有Greenplum数据库目录
Master主机及Standby Master主机:
rm -rf /data/master
Segment主机:
rm -rf /data/primary
如果segment有创建备实例,则还需另删除mirror数据目录
rm -rf /data/mirror
(3)重新创建Greenplum数据库目录
Master主机及Standby Master主机:
mkdir -p /data/master
Segment主机:
mkdir -p /data/primary
如果segment有创建备实例,则还需另创建mirror数据目录
mkdir -p /data/mirror
(4)初始化数据库
gpinitsystem -c /usr/local/greenplum-db/gpconfigs/gpinitsystem_config -s smdw
13.4 安装后修改数据库参数(非必要)
Greenplum数据库正常安装以后,数据库参数配置允许根据客户的实际情况进行修改。一般情况下不建议主动修改数据库参数。因此本步骤暂时放到附录中。
数据库参数修改方法是修改数据目录(MASTER_DATA_DIRECTORY)下的postgresql.conf配置文件。然后根据参数的定义,重新装载配置文件或者重启数据库。
说明:
Local是指每台服务器的配置文件都需要修改;
Master是指只需要在master主机上修改;
Restart是指需要重启数据库;
Reload是指运行gpstop –u重新装载配置参数即可。
参数名称 | 参数类型 | 参考值 | 设置说明 |
---|---|---|---|
max_connections | integer | 200 | Local,restart |
max_prepared_transactions | integer | 200 | Local,restart |
gp_interconnect_setup_timeout | String | 3min | Master,reload |
max_fsm_pages | integer | 200000 | Local,restart |
max_fsm_relations | integer | 1000 | Local,restart |
gp_vmem_protect_limit | integer | 8192 | Local,restart |
work_mem | String | 32MB | Master,reload |
stats_queue_level | boolean | off | Master,reload |
13.5 安装Greenplum clients
【安装机器】:ETL主机
如果是压缩文件则先解压:
unzip greenplum-clients-4.1.1.0-build-4-RHEL5-x86_64.zip
/bin/bash greenplum-clients-4.1.1.0-build-4-RHEL5-x86_64.bin
修改该主机需要用到client和loaders工具的用户的~/.bashrc配置,增加
source /usr/local/greenplum-clients-4.1.1.0-build-4/greenplum_clients_path.sh
13.6 安装Greenplum loader
【安装机器】:ETL主机
如果是压缩文件则先解压:
unzip greenplum-loaders-4.1.1.0-build-4-RHEL5-x86_64.zip
/bin/bash greenplum-loaders-4.1.1.0-build-4-RHEL5-x86_64.bin
修改Master主机需要用到client和loaders工具的用户的~/.bashrc配置,增加
source /usr/local/greenplum-loaders-4.1.1.0-build-4/greenplum_loaders_path.sh
13.7 常见问题处理
13.7.1 字符集问题处理
当加载数据出现如下报错信息:
character 0xd620 of encoding “GB18030” has no equivalent in “UTF8” (seg10 slice1 sdw3:40002 pid=6533) 2012-02-03 09:10:55 - DETAIL: External table
是由于GP(postgreSQL)在字符集转换时遇到非法字符会报错。通过补丁包(更新动态链接库)在遇到非法字符时掠过。
目前补丁包有:
Redhat5.5及GP4.1版本 :utf8_and_gbk.so
Redhat5.5及GP4.2版本 :utf8_and_gb18030.so
该补丁包,在遇到数据导入无法转换的问题后才采用。
操作方法:
替换$GPHOME/lib/postgresql(/usr/local/greenplum-db/lib/postgresql)目录下替换相应文件,注意备份,重启数据库后即可生效。
13.7.2 重新建立多机信任密钥问题
在Greenplum的重新安装或者重新初始化数据库过程中,由于在各主机建立了多机信任机制,所以经常会出现输入正确的主机密码系统却报错,或者在重新初始化数据库过程中,各主机互相通信失败而导致初始化失败。引起该问题主要是Greenplum各主机在建立多机信任时按规则彼此创建了相互通信的密钥对,写入了known_hosts文件中,当主机名被修改,或者重复创建多机信任等,即会出现主机通信密钥出错而失败。
解决该问题步骤:
(1)打开密钥存放文件/root/.ssh/known_hosts,将需要重新建立互信机制的主机的所有密钥信息删除;
(2)重新建立多机信任
Root用户:
gpssh-exkeys -f /usr/local/greenplum-db/gpconfigs/all_hosts
gpadmin用户:
gpssh-exkeys -f /usr/local/greenplum-db/gpconfigs/all_hosts
13.7.3 卸载gpcc
- 停止数据库监控程序perfmon,并删除安装文件目录
$gpperfmon –stop
$rm -rf /usr/local/greenplum-perfmon-web-4.1.X.X
- 编辑postgresql.conf文件,禁用greenplum的perfmon功能
#su – gpadmin
$vi $MASTER_DATA_DIRECTORY/postgresql.conf
gp_enable_gpperfmon = off
- 编辑gp_hba.conf
# local gpperfmon gpmon md5
# host gpperfmon gpmon 0.0.0.0/0 md5
- 删除role和数据库
$psql template1 -c ‘drop role gpmon’
$dropdb gpperfmon
- 最后将gpperfmon的相关安装文件删除 $rm -rf
$MASTER_DATA_DIRECTORY/gpperfmon/data/*
$rm -rf $MASTER_DATA_DIRECTORY/gpperfmon/data/*
- 重启数据库
$gpstop
$gpstart