一、环境准备1.1 机器准备
所有主机:配置ip、修改主机名,将所有节点ip和主机名一 一对应写入/etc/hosts文件。
[root@master ~]# tail -4 /etc/hosts192.168.122.183 master192.168.122.101 standby192.168.122.206 segment1192.168.122.89 segment2效果要求:所有节点之间能够相互ping通。
1.2 系统环境配置(所有节点)
1.2.1 系统内核参数优化配置修改文件/etc/sysctl.conf,使用sysctl -p命令即时生效。
[root@master ~]# sysctl -pkernel.shmmax = 500000000kernel.shmmni = 4096kernel.shmall = 4000000000kernel.sem = 250 512000 100 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 = 2
1.2.2 修改Linux大限制追加到文件/etc/security/limits.conf即可。
[root@master ~]# tail -4 /etc/security/limits.conf* soft nofile 65536* hard nofile 65536* soft nproc 131072* hard nproc 1310721.2.3 设置磁盘预读扇区数
blockdev --setra 16384 /dev/vda1blockdev --setra 16384 /dev/mapper/centos-root并将命令写入/etc/rc.local。1.2.4 调整优化磁盘I/O
echo deadline > /sys/block/vda/queue/scheduler并写入/etc/rc.local。1.2.5 创建数据库用户
[root@master ~]# groupadd -g 530 gpadmin[root@master ~]# useradd -u 530 -g530 -m -d /home/gpadmin -s /bin/bash gpadmin[root@master ~]# passwd gpadmin更改用户 gpadmin 的密码 。新的 密码:无-效的密码: 密码少于 8 个字符重新输入新的 密码:passwd:所有的身份验证令牌已经成功更新。
1.2.6 关闭防火墙和selinux
[root@master ~]# systemctl stop firewalld[root@master ~]# systemctl mask firewalldCreated symlink from /etc/systemd/system/firewalld.service to /dev/null.[root@master ~]# setenforce 0[root@master ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/'/etc/selinux/config1.2.7 创建安装目录(所有主机)
mkdir /opt/greenplum; chown -R gpadmin:gpadmin /opt/greenplum
1.2.8 时间同步master主机:
yum -y install ntp;vim /etc/ntp.confrestrict 192.168.122.0/24 mask 255.255.255.0 nomodifyserver 127.127.1.0 iburstfudge 127.127.1.0 stratum 3注销#默认的serversystemctl start ntpd; systemctl enable ntpd除master外所有主机:
yum -y install ntpdate[root@segment1 ~]# ntpdate master11 May 12:20:54 ntpdate[1213]: adjust time server 192.168.122.183 offset -0.006148 sec二、安装部署Greenplum2.1、master节点安装Greenplum
2.1.1下载greenplum(master主机)地址:https://network.pivotal.io/products/pivotal-gpdb/#/releases/73874/file_groups/929下载文件:greenplum database 5.7.0 binary install for rhel7
2.1.2安装greenplum(master主机)
拷贝下载的greenplum-db-5.7.0-rhel7-x86_64.zip到/tmp下,yum -y install unzip,用unzip解压greenplum-db-5.7.0-rhel7-x86_64.zip。注意,此时开始全部使用gpadmin用户操作!!!!!!!!!!!!!!!!切换到gpadmin用户:su - gpadmin切换到gpadmin用户家目录:cd执行解压后的二进制文件 :./greenplum-db-5.7.0-rhel7-x86_64.bin
[root@master tmp]# unzip greenplum-db-5.7.0-rhel7-x86_64.zipArchive: greenplum-db-5.7.0-rhel7-x86_64.zipinflating: greenplum-db-5.7.0-rhel7-x86_64.bin[root@master tmp]# su - gpadmin上一次登录:五 5月 11 17:11:59 CST 2018从 192.168.122.152pts/4 上[gpadmin@master ~]$ cd /tmp/[gpadmin@master tmp]$ ./greenplum-db-5.7.0-rhel7-x86_64.bin期间按照提示内容, 输入yes和安装目录/opt/greenplum/greenplum-db即可。
********************************************************************************Do you accept the Pivotal Database license agreement? [yes|no]********************************************************************************yes********************************************************************************Provide the installation path for Greenplum Database or press ENTER toaccept the default installation path: /usr/local/greenplum-db-5.7.0**************************************************************************************************************************************************************/opt/greenplum/greenplum-db2.1.3检查安装情况
ls /opt/greenplum/greenplum-db -l[gpadmin@master ~]$ ll /opt/greenplum/greenplum-db/总用量 32drwxr-xr-x 7 gpadmin gpadmin 4096 3月 30 22:41 bindrwxr-xr-x 4 gpadmin gpadmin 37 3月 30 22:23 docsdrwxr-xr-x 2 gpadmin gpadmin 44 3月 30 22:24 etcdrwxr-xr-x 3 gpadmin gpadmin 20 3月 30 22:24 ext-rw-rw-r-- 1 gpadmin gpadmin 743 5月 11 13:57 greenplum_path.shdrwxr-xr-x 6 gpadmin gpadmin 4096 3月 30 22:24 includedrwxr-xr-x 7 gpadmin gpadmin 8192 3月 17 01:52 libdrwxr-xr-x 8 gpadmin gpadmin 107 3月 26 12:02 pxfdrwxr-xr-x 2 gpadmin gpadmin 4096 3月 30 22:27 sbindrwxr-xr-x 6 gpadmin gpadmin 68 5月 11 14:12 share2.1.4 目录和文件说明
greenplum_path.sh:此文件包含Greenplum数据库的环境变量,请参阅设置Greenplum环境变量。bin:此目录包含Greenplum数据库管理程序,此目录还包含PostgreSQL客户端和服务器程序,其中大部分也用于Greenplum数据库。sbin:支持/内部脚本和程序。docs:Greenplum数据库文档(PDF文件)。etc:OpenSSL的示例配置文件。ext:一些Greenplum数据库实用程序使用的捆绑程序(如Python)。include:Greenplum数据库的C语言头文件。lib:Greenplum数据库和PostgreSQL库文件。share:Greenplum数据库的共享文件。2.2 在所有节点安装Greenplum
2.2.1准备安装节点文件
cd ; mkdir conf[gpadmin@master ~]$ cat conf/all_hostmasterstandbysegment1segment2[gpadmin@master ~]$ cat conf/segmentsegment1segment22.2.2建立节点服务器间的信任
gpssh-exkeys -f conf/all_host,期间需要输入gpadmin的密码。[gpadmin@master ~]$ gpssh-exkeys -f conf/all_host[STEP 1 of 5] create local ID and authorize on local host... /home/gpadmin/.ssh/id_rsa file exists ... key generation skipped[STEP 2 of 5] keyscan all hosts and update known_hosts file[STEP 3 of 5] authorize current user on remote hosts... send to standby... send to segment1... send to segment2[STEP 4 of 5] determine common authentication file content[STEP 5 of 5] copy authentication files to all remote hosts... finished key exchange with standby... finished key exchange with segment1... finished key exchange with segment2[INFO] completed successfully[gpadmin@master ~]$
2.2.3批量安装
gpseginstall -f conf/all_host -u gpadmin -p gpadmin这里-u指定用户,-p授予gpadmin的权限
2.2.4检查批量安装结果
gpssh -f conf/all_host -e ls $GPHOME[gpadmin@master ~]$ gpssh -f conf/master -e ls $GPHOME[standby] ls /home/gpadmin/greenplum/greenplum-db[standby] bin docs etc ext greenplum_path.sh include lib pxfsbin share[ master] ls /home/gpadmin/greenplum/greenplum-db[ master] bin docs etc ext greenplum_path.sh include lib pxfsbin share[ segment1] ls /home/gpadmin/greenplum/greenplum-db[ segment1] bin docs etc ext greenplum_path.sh include lib pxfsbin share[ segment2] ls /home/gpadmin/greenplum/greenplum-db[ segment2] bin docs etc ext greenplum_path.sh include lib pxfsbin share2.3 初始化数据库集群
2.3.1 创建数据存放目录(全部在master使用gpadmin用户操作)切换到gpadmin用户家目录:cd创建主服务器目录:gpssh -h master -e 'mkdir gpdata/master -p'创建备服务器目录:gpssh -h standby -e 'mkdir gpdata/master -p'创建数据节点服务器目录:gpssh -f conf/segment -e 'mkdir gpdata/segment/primary -p'
2.3.2 创建初始化文件从安装目录拷贝配置文件到gpadmin用户家目录的conf文件夹:
cp /opt/greenplum/greenplum-db/docs/cli_help/gpconfigs/gpinitsystem_config conf/修改conf/gpinitsystem_config文件参数如下:
[gpadmin@master ~]$ egrep -v '(^$|^#)' conf/gpinitsystem_configARRAY_NAME="Greenplum Data Platform"SEG_PREFIX=gpsegPORT_BASE=40000declare -a DATA_DIRECTORY=(/home/gpadmin/gpdata/segment/primary)MASTER_HOSTNAME=masterMASTER_DIRECTORY=/home/gpadmin/gpdata/masterMASTER_PORT=5432TRUSTED_SHELL=sshCHECK_POINT_SEGMENTS=8ENCODING=UNICODE2.3.3 参数说明ARRAY_NAME:设置阵列名称。SEG_PREFIX:设置segment的前缀,默认gpseg。PORT_BASE:设置segment的起始端口,会从此端口往上增加,默认从40000开始。DATA_DIRECTORY:设置segment primary的数据存储目录,根据实例个数填写。MASTER_HOSTNAME:设置master的主机名。MASTER_DIRECTORY:设置master的存储目录。MASTER_PORT:设置master的端口,默认5432。TRUSTED_SHELL:设置节点之间的信任方式,默认SSH。CHECK_POINT_SEGMENTS:预写日志文件(WAL)数量,默认为8,这意味着为主机上的每个Segment或Master实例分配1088MB的WAL空间。ENCODING=UNICODE:设置初始字符集,默认UNICODE(UTF-8)。
2.3.4创建初始化数据节点列表(如果前面已经创建则忽略)
[gpadmin@master ~]$ cat conf/segmentsegment1segment22.3.5运行初始化工具
gpinitsystem -c conf/gpinitsystem_config -h conf/segment -s standbygpinitsystem命令参数解释:-c:指定初始化文件。-h:指定segment主机文件。-s:指定standby主机,创建standby节点。中间需要输入几次yes,如果不报ERROR,GP数据库就安装好了并且各个节点都启动了。安装过程中一定要注意相关执行的方式和权限,不然可能会失败。如果gpinitsystem实用程序失败,如果系统处于部分安装状态,它将创建以下备用脚本:〜/ gpAdminLogs / backout_gpinitsystem_ _ 您可以使用此脚本清理部分创建的Greenplum数据库系统。此回退脚本将删除任何实用程序创建的数据目录,postgres进程和日志文件。纠正导致gpinitsystem失败并运行退出脚本的错误后,您应该准备重试初始化您的Greenplum数据库数组。
2.3.6分别在每个主机查看postgres运行情况用netstat命令查看每个主机的postgres进程:netstat -ltnp | grep postgres基本就能看出来哪个端口是Master(5432)、哪个端口是Standby(5432)、哪些端口是Segment(40000,40001,40002)。
[gpadmin@master ~]$ gpssh -f conf/master -e netstat -ltnp | grep postgres[ master] tcp 0 0 0.0.0.0:5432 0.0.0.0:*LISTEN 8294/postgres[ master] tcp6 0 0 :::5432 :::*LISTEN 8294/postgres[ master] tcp6 0 0 :::14182 :::*LISTEN 8302/postgres: 543[segment1] tcp 0 0 0.0.0.0:40000 0.0.0.0:*LISTEN 3611/postgres[segment1] tcp 0 0 0.0.0.0:41000 0.0.0.0:*LISTEN 3610/postgres[segment1] tcp6 0 0 :::40000 :::*LISTEN 3611/postgres[segment1] tcp6 0 0 :::41000 :::*LISTEN 4181/postgres....................................
2.3.7 设置环境变量Greenplum数据库管理实用程序还要求设置MASTER_DATA_DIRECTORY环境变量,这应该指向由gpinitsystem程序在主数据目录位置创建的目录。查看MASTER_DATA_DIRECTORY:ls /home/gpadmin/gpdata/master设置环境变量如下,并source .bashrc。写入并将文件拷贝到standby节点。
[gpadmin@master ~]$ tail -3 .bashrcsource /home/gpadmin/greenplum/greenplum-db/greenplum_path.shexport MASTER_DATA_DIRECTORY=/home/gpadmin/gpdata/master/gpseg-1export PGPORT=5432[gpadmin@master ~]$ scp .bashrc standby:/home/gpadmin/2.4添加镜像在添加mirrors的过程中,Greenplum数据库应处于静态状态,工作负载和其他查询不应该运行。
2.4.1 在数据节点服务器上创建mirrors数据存储目录
gpssh -f conf/segment -e 'mkdir gpdata/segment/mirror'如果命令执行报错,请使用cd命令切换当前目录到gpadmin家目录。
2.4.2生成镜像配置文件
gpaddmirrors -o mirror_config_file期间需要输入镜像数据存放目录/home/gpadmin/gpdata/segment/mirror
2.4.3 查看生成的镜像配置文件
[gpadmin@master ~]$ cat conf/mirror_config_filefilespaceOrder=mirror0=0:segment1:41000:42000:43000:/home/gpadmin/gpdata/segment/mirror1/gpseg0mirror1=1:segment2:41001:42001:43001:/home/gpadmin/gpdata/segment/mirror2/gpseg12.4.4开始创建镜像gpaddmirror -i mirror_config_file,期间需要输入yes 确认。完成如果没有报错,可以输入 gpstate -s 查看整个数据库状态。如果报错,请source .bashrc后,再执行gpstate -s。
2.5连接使用Greenplum
2.5.1 远程连接配置
修改配置文件添加信任的网络:
vim /home/gpadmin/gpdata/master/gpseg-1/pg_hba.confHost all all 192.168.122.0/24 trust修改数据库侦听端口:
vim /home/gpadmin/gpdata/master/gpseg-1/postgresql.conflisten_addresses = '*'2.5.2 连接方式psql –helppsql [OPTION]... [DBNAME [USERNAME]]本地连接:psql -d 库名测试连接:psql -d postgres其他工具连接:如navicate
三、Greenplum高可用测试与实现3.1 数据节点高可用测试(通过master上的FTS进程实现)
3.1.1 杀死其中一个segment的postgres进程
3.1.2 查看某个数据节点宕机后集群状态
gpstate -s
3.1.3恢复故障节点
gprecoverseg期间需要输入yes恢复完成后,输入gpstate -m查看mirror状态,等待data status 全部变成Synchronize。从状态可以看出,故障恢复后,primary并没有马上恢复主数据节点,等mirror状态全部Synchronize之后,尝试使用gprecoverseg -r恢复数据节点主备。如果恢复失败,则重启数据库服务 gpstop -r 后恢复正常。
3.2 master高可用实现
3.2.1查看是否部署standby
连接到postgre库:psql -d postgres使用sql命令查看是否部署
db1=# select string_agg(role||'-'||hostname,'|') from gp_segment_configurationwhere content='-1';string_agg--------------------p-master|m-standby(1 row)如果显示结果如上,则表示已经部署standby,否则在master上初始化standby : gpinitstandby -s standby(做主备节点的主机名),建议一开始就部署standby。
3.2.2 master模拟故障
杀死master主节点postgres进程:pkill postgres
3.2.3 master故障处理
master节点:删除master节点5432进程锁:rm -f /tmp/.s.PGSQL.5432*standby节点:切换到gpadmin用户:su gpadmin;source .bashrc激活主备功能:gpactivatestandby -d ${MASTER_DATA_DIRECTORY}测试数据库能否正常连接使用:psql -d postgres
3.2.4 恢复master
原master节点:删除主节点运行目录:rm -rf /home/gpadmin/gpdata/master/*原standby节点:将master节点初始化为主备:gpinitstandby -s master(主机名)关闭数据库主节点:gpstop -m原master:激活主备功能:gpactivatestandby -d $MASTER_DATA_DIRECTORY查看所有节点是否恢复正常:gpstate -f 或 gpstate -s原standby主机:删除主节点运行目录:rm -rf /home/gpadmin/gpdata/master/*原master主机:初始化主备节点:gpinitstandby -s standby(主机名)
3.2.5 验证
连接到postgre库:psql -d postgres使用sql命令查看是否部署standby:
db1=# select string_agg(role||'-'||hostname,'|') from gp_segment_configurationwhere content='-1';string_agg--------------------p-master|m-standbyp-master|m-standby(1 row)-----------------------------------------------------续--------------------------------------------------------------
四、使用gpfdist和外部表4.1 gpfdist介绍
greenplum作为OLAP分析型软件,自然避免不了从外部数据库加载大量的数据,然而传统的ETL数据传输方法(select=>insert)到GP需要经过GP的单点master,效率非常低。下面介绍外部表用gpfdist快速导入数据:
普通外部表和可写外部表区别:1、普通外部表只能select,可写外部表只能insert2、可写外部表没有错误表3、可写外部表可以指定分布键,如果不指定,默认随机分布;普通外部表只能随机分布
gpfdist优势:1、直接由segment并发加载2、直接加载数据文件,并可读写(和选择的外部表类型有关)3、默认数据随机分配,每个节点负载均衡(和选择的外部表类型有关)
4.2 使用gpfdist和只读外部表
4.2.1 启动gpfdist:
[gpadmin@master ~]$ nohup gpfdist -p 8080 -d ./ &[2] 12220[gpadmin@master ~]$ jobs[2]+ 运行中 nohup gpfdist -p 8080 -d ./ &4.2.2 创建普通外部表
[gpadmin@master ~]$ psql -d db1psql (8.3.23)Type "help" for help.db1=# create external table t2(id int,namechar(5))location('gpfdist://master:8080/gpfdist/t2')format 'csv'(delimiter '');CREATE EXTERNAL TABLE注意:其中master:8080代表nohup gpfdist命令-d 指定的目录。
4.2.3 在对应的目录创建写入文件
[gpadmin@master gpfdist]$ pwd/home/gpadmin/gpfdist[gpadmin@master gpfdist]$ vim t2[gpadmin@master gpfdist]$ cat t21 jack2 tom4.2.4 在数据库中查看刚才创建的外部表
db1=# select * from t2;id | name----+-------1 | jack2 | tom(2 rows)
系统性能测试方法验证系统配置:gpcheck -f conf/all_host验证网络性能:gpcheckperf -f conf/all_host -r N -d /tmp并行测试: -r N串行测试: -r n矩阵测试: -r M验证磁盘I/O性能:gpcheckperf -f conf/all_host -r ds -d /tmp验证内存性能:gpcheckperf -f conf/all_host -r s -d /tmp
本文来源:https://blog.csdn.net/Anubis000000/article/details/94769823