greenplum基本知识
- Greenplum数据库是一种大规模并行处理(MPP)数据库服务器,其架构特别针对管理大规模分析型数据仓库以及商业智能工作负载而设计。
- Greenplum数据库是基于PostgreSQL开源技术的。它本质上是多个PostgreSQL面向磁盘的数据库实例一起工作形成的一个紧密结合的数据库管理系统(DBMS)。 它基于PostgreSQL 9.4开发,其SQL支持、特性、配置选项和最终用户功能在大部分情况下和PostgreSQL非常相似。 与Greenplum数据库交互的数据库用户会感觉在使用一个常规的PostgreSQL DBMS。
高层的Greenplum数据库架构

关键组件
Master
-
Greenplum数据库的Master是整个Greenplum数据库系统的入口,它接受连接和SQL查询并且把工作分布到Segment实例上;
-
Master上不包含任何用户数据,数据只存在于Segment之上;
-
Master会认证客户端连接、处理到来的SQL命令、在Segment之间分布工作负载、协调每一个Segment返回的结果以及把最终结果呈现给客户端程序。
-
收集 Segment 的执行结果
Segment
- Greenplum数据库的Segment实例是独立的PostgreSQL数据库,每一个都存储了数据的一部分并且执行查询处理的主要部分;
- 当一个用户通过Greenplum的Master连接到数据库并且发出一个查询时,在每一个Segment数据库上都会创建一些进程来处理该查询的工作;
- 一台Segment主机通常运行2至8个Greenplum的Segment实例。
- 执行 Master 分发的 SQL 语句
- 负责对应数据的存储和计算
Interconnect
- Interconect是Greenplum数据库架构中的网络层;
- Interconnect指的是Segment之间的进程间通信以及这种通信所依赖的网络基础设施;
- Interconnect采用了一种标准的以太交换网络;
- 默认情况下,Interconnect使用UDP在网络上发送消息。
集群部署
版本说明
- 版本:centos7.2+greenplum-db-6.2.1-rhel7-x86_64.rpm
主机列表(所有服务器)
-
规划说明,hosts解析,最好主机名等于角色名,最好这样规划,主机名不要超过10个字节,后续主机名不要动,要不后续好多麻烦:
-
例如
192.168.110.81 gp-master1 192.168.110.82 gp-node1 192.168.110.83 gp-node2
内网ip 主机名 角色
-
192.168.110.81 gp-master1 Master
-
192.168.110.82 gp-node1 Segment
-
192.168.110.83 gp-node2 Segment
注意:ssh服务端口需要监听内网ip的22端口,主备master还需要监听在127.0.0.1:22
环境初始化(所有服务器)
-
安装依赖
yum install apr apr-util bash bzip2 curl krb5 libcurl libevent libxml2 libyaml zlib openldap openssh openssl openssl-libs perl readline rsync R sed tar zip -y
-
关闭iptables 和 selinux
systemctl stop iptables systemctl disable iptables sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config setenforce 0
-
添加hosts解析
# cat >> /etc/hosts << EOF 192.168.110.81 gp-master1 192.168.110.82 gp-node1 192.168.110.83 gp-node2 # EOF
-
修改内核参数
cat > /etc/sysctl.conf << EOF ## kernel.shmall = _PHYS_PAGES / 2 # See Shared Memory Pages kernel.shmall = 4000000000 ## kernel.shmmax = kernel.shmall * PAGE_SIZE kernel.shmmax = 500000000 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 40960 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 ## 64GB of memory or less, remove vm.dirty_background_bytes and vm.dirty_bytes and set the two ratio parameters to these values vm.dirty_background_ratio = 3 # See System Memory vm.dirty_ratio = 10 ## vm.dirty_background_bytes = 1610612736 ## vm.dirty_bytes = 4294967296 EOF awk 'BEGIN {OFMT = "%.0f";} /MemTotal/ {print "vm.min_free_kbytes =", $2 * .03;}' /proc/meminfo >> /etc/sysctl.conf sysctl -p
-
配置文件连接数和进程数
cat >> /etc/security/limits.conf << EOF * soft nofile 524288 * hard nofile 524288 * soft nproc 131072 * hard nproc 131072 EOF cat > /etc/security/limits.d/20-nproc.conf <
-
挂载XFS文件系统
# cat >> /etc/fstab << EOF /dev/data /data xfs nodev,noatime,nobarrier,inode64 0 0 EOF 注释:/data文件系统必须是xfs格式的 mkdir /data
-
设置disk I/O
/sbin/blockdev --setra 16384 /dev/sda chmod +x /etc/rc.d/rc.local echo deadline > /sys/block/sda/queue/scheduler grubby --update-kernel=ALL --args="elevator=deadline" grubby --info=ALL
-
设置THP
grubby --update-kernel=ALL --args="transparent_hugepage=never" cat /sys/kernel/mm/*transparent_hugepage/enabled ## 检查,有输出表示正常
-
禁用IPC 和创建系统用户gpadmin
cat >> /etc/systemd/logind.conf << EOF RemoveIPC=no EOF /bin/systemctl restart systemd-logind.service groupadd -r -g 420 gpadmin useradd -r -u 420 -g gpadmin -m -s /bin/bash gpadmin echo gpadmin | passwd gpadmin --stdin usermod -aG wheel gpadmin # visudo %wheel ALL=(ALL) NOPASSWD: ALL
-
配置动态库
cat >> /etc/ld.so.conf << EOF /usr/local/lib EOF
Master端搭建(Master)
-
安装greenplum的rpm包(Master)
su - gpadmin用户下 ### 后面操作需要在gpadmin用户下 ##GP发行版本下载:https://network.pivotal.io/products/pivotal-gpdb/#/releases/526878/file_groups/2331 ## 官方文档 https://gpdb.docs.pivotal.io/6-2/main/index.html $ sudo yum install greenplum-db-6.2.1-rhel7-x86_64.rpm -y $ sudo chown -R gpadmin:gpadmin /usr/local/greenplum* $ source /usr/local/greenplum-db-6.2.1/greenplum_path.sh
-
在Master创建密钥对以及分发公钥(Master)
$ sudo yum install expect -y $ cat >ssh-keygen.exp << EOF #!/usr/bin/expect spawn ssh-keygen -t rsa expect { "(/home/gpadmin/.ssh/id_rsa):" {send "\r";exp_continue} "empty for no passphrase):" {send "\r";exp_continue} "Enter same passphrase again:" {send "\r"} } expect eof EOF $ cat > fenfa_sshkey.exp <
fenfa_sshkey.sh << EOF #!/bin/sh . /etc/init.d/functions [ ! -d /home/gpadmin/.ssh ] && /usr/bin/expect ssh-keygen.exp for ip in \ cat /etc/hosts|grep node|awk '{print \$2}'\
do /usr/bin/expect fenfa_sshkey.exp /home/gpadmin/.ssh/id_rsa.pub \$ip &>/dev/null if [ \$? -eq 0 ] then action "\$ip is ok" /bin/true else action "\$ip is fail" /bin/false fi done EOF ### 分发公钥到node ### $ sh fenfa_sshkey.sh # 适用于第一次分发公钥 -
创建主机hostlist 和 seg_hosts(Master)
$ mkdir /home/gpadmin/conf $ cd /home/gpadmin/conf $ cat > hostlist <
seg_hosts < -
打通所有服务器服务器之间的ssh连接(Master)
$ cd /home/gpadmin/conf $ gpssh-exkeys -f hostlist
-
创建数据库目录(Master)
### 创建主master的数据目录 ### $ sudo mkdir -p /data/master $ sudo chown gpadmin:gpadmin /data/master ### 创建segment的数据目录 ### $ source /usr/local/greenplum-db/greenplum_path.sh $ gpssh -f /home/gpadmin/conf/seg_hosts -e 'sudo mkdir -p /data/primary' $ gpssh -f /home/gpadmin/conf/seg_hosts -e 'sudo mkdir -p /data/mirror' $ gpssh -f /home/gpadmin/conf/seg_hosts -e 'sudo chown -R gpadmin /data/primary' $ gpssh -f /home/gpadmin/conf/seg_hosts -e 'sudo chown -R gpadmin /data/mirror'
-
测试内存和磁盘(Master)
$ gpcheckperf -f /home/gpadmin/conf/seg_hosts -r ds -D -d /data/primary -d /data/mirror ### 该实用程序可能需要一段时间来执行测试,因为它正在主机之间复制非常大的文件。完成后,您将看到磁盘写、磁盘读和流测试的汇总结果。 ###
-
分发软件包(Master)
$ cd /usr/local/ $ tar -cf ~/gp6.tar greenplum-db-6.2.1/ $ chown -R gpadmin:gpadmin ~/gp6.tar $ gpscp -f /home/gpadmin/conf/seg_hosts ~/gp6.tar =:/home/gpadmin/ $ gpssh -f /home/gpadmin/conf/seg_hosts => cd /home/gpadmin => sudo cp ~/gp6.tar /usr/local/ => cd /usr/local => sudo tar -xf gp6.tar => sudo ln -s greenplum-db-6.2.1 greenplum-db => sudo chown -R gpadmin:gpadmin /usr/local/greenplum* => exit
-
初始化数据库(Master)
$ cat >> /home/gpadmin/.bash_profile << EOF source /usr/local/greenplum-db/greenplum_path.sh export MASTER_DATA_DIRECTORY=/data/master/gpseg-1 export PGPORT=5432 export PGUSER=gpadmin export PGDATABASE=postgres export LD_PRELOAD=/lib64/libz.so.1 ps EOF $ source ~/.bash_profile $ mkdir /home/gpadmin/gpconfigs $ cd /home/gpadmin/gpconfigs $ cp $GPHOME/docs/cli_help/gpconfigs/gpinitsystem_config /home/gpadmin/gpconfigs/gpinitsystem_config $ cat > /home/gpadmin/gpconfigs/gpinitsystem_config << EOF ARRAY_NAME="Greenplum Data Platform" SEG_PREFIX=gpseg PORT_BASE=10000 # primary端口起始 ### 三个相同的目录表示在一个Segment机器上创建三个Segment实例 ### declare -a DATA_DIRECTORY=(/data/primary /data/primary /data/primary) MASTER_HOSTNAME=gp-master1 MASTER_DIRECTORY=/data/master MASTER_PORT=5432 ### 监听端口 TRUSTED_SHELL=ssh CHECK_POINT_SEGMENTS=8 ENCODING=UNICODE MIRROR_PORT_BASE=11000 ### mirror端口起始 declare -a MIRROR_DATA_DIRECTORY=(/data/mirror /data/mirror /data/mirror) EOF $cat > hostfile_gpinitsystem << EOF gp-node1 gp-node2 EOF $ cd .. $ gpinitsystem -c gpconfigs/gpinitsystem_config -h gpconfigs/hostfile_gpinitsystem
-
配置gpadmin数据库用户密码
$ psql -d postgres postgres=# alter role gpadmin with password 'gpadmin';
-
允许本地远程用户登录和进制本地空密码登录
$ vim /data/master/gpseg-1/pg_hba.conf host all gpadmin 0.0.0.0/0 md5 local all gpadmin md5 $ gpstop -u
卸载重装Greenplum
卸载
停掉服务
# su - gpadmin #master
$ gpstop -M fast
# 卸载
# yum remove greenplum-db-6.2.1
删除用户
# userdel -r -f gpadmin
删除目录
# rm /data/master -rf
# rm /data/primary -rf
# rm /data/mirror -rf
# rm /usr/local/greenplum-db* -rf
重装
# 配置用户
groupadd -r -g 420 gpadmin
useradd -r -u 420 -g gpadmin -m -s /bin/bash gpadmin
echo gpadmin | passwd gpadmin --stdin
usermod -aG wheel gpadmin
# 安装
# 其他都一样
基础用法
-
greenplum命令
- gpstop 关闭
$ gpstop # 交互式关闭,等待所有数据库连接断开才停库 $ gpstop -M fast #交互式关闭,强制断开所有数据库连接,直接停库
- gpstart 启动
$ gpstart # 交互式启动 $ gpstart -a # 快速启动,非交互式启动 $ gpstop -ar # 重启
-
gpstate 查看状态
$ gpstate -s # 显示所有Master和Segment信息 $ gpstate -c # 正常情况,显示primary 和 mirror 的映射关系 $ gpstate -e # 异常情况,显示primary 和 mirror 的映射关系
-
reload配置,刷新配置,两条都可以
$ pg_ctl reload -D /data/master/gpseg-1 $ gpstop -u
-
PostgreSQL 基本语法使用
$ psql -d postgres -U gpadmin $ createdb -h localhost -p 5432 -U gpadmin testdb # 创建数据库 \quit # 退出 \l # 查询库 \d # 查看当前数据库的表和视图 \c 数据库 # 切换数据库 \d tablename # 查看表的结构 \password # 设置密码 select * from uid_name; # 查看表内容 select gp_segment_id,count(*) from name_table group by gp_segment_id; # 查看某个表在各个节点的情况 select datname,pid,application_name,state from pg_stat_activity; # 列出当前数据库连接的信息 select * from gp_segment_configuration ; # 节点维护列表 create user testdb with password 'testdb'; # 创建用户并设置密码 create database testdb; #创建数据 grant all on database testdb to testdb; # 授权数据库 drop user testdb; # 删除用户 $ vim /data/master/gpseg-1/pg_hba.conf # 添加远程和本机登录 host all gpadmin 0.0.0.0/0 md5 local all gpadmin md5 $ gpstop -u $ psql -d testdb -U testdb --password # 登录
扩容
添加standby备用端
-
注意
1、主和备Master需要ssh监听127.0.0.1:22 2、如果要新建standby(备Master),但是原来已有standby,首先要删除它。 gpinitstandby -r 3、如果原来的standby只是某种原因挂了,不需要删除,只需要重启,则使用以下命令来重启standby gpinitstandby -n
-
环境初始化(standby)
-
添加hosts(主Master)
# cat >> /etc/hosts << EOF 192.168.110.84 gp-standby1 EOF
-
分发公钥(主Master)
$ su - gpadmin $ expect fenfa_sshkey.exp /home/gpadmin/.ssh/id_rsa.pub gp-standby1
-
打通所有服务器ssh免密通道(主Master)
$ cd /home/gpadmin/conf $ cat >> hostlist <
-
同步hosts文件到所有服务器(主Master)
$ gpssh -f /home/gpadmin/conf/hostlist -e 'sudo chmod 777 /etc/hosts' $ gpscp -f /home/gpadmin/conf/hostlist /etc/hosts =:/etc/hosts $ gpssh -f /home/gpadmin/conf/hostlist -e 'sudo chmod 644 /etc/hosts'
-
创建备master数据目录(主Master)
$ gpssh -h gp-standby1 -e 'sudo mkdir -p /data/master' $ gpssh -h gp-standby1 -e 'sudo chown gpadmin:gpadmin /data/master'
-
分发软件包(主Master)
$ gpscp -h gp-standby1 ~/gp6.tar =:/home/gpadmin/ $ gpssh -h gp-standby1 => cd /home/gpadmin => sudo cp ~/gp6.tar /usr/local/ => cd /usr/local => sudo tar -xf gp6.tar => sudo ln -s greenplum-db-6.2.1 greenplum-db => sudo chown -R gpadmin:gpadmin /usr/local/greenplum* => exit
-
添加standby(主Master)
$ gpinitstandby -s gp-standby1
-
配置环境(standby)
$ su - gpadmin $ cat >> /home/gpadmin/.bash_profile << EOF source /usr/local/greenplum-db/greenplum_path.sh export MASTER_DATA_DIRECTORY=/data/master/gpseg-1 export PGPORT=5432 export PGUSER=gpadmin export PGDATABASE=testdb export LD_PRELOAD=/lib64/libz.so.1 ps EOF $ source ~/.bash_profile
删除standby
- $ gpinitstandby -r # 默认删除当前集群的备Master
在线添加新Segment节点( 横向扩展)
-
添加Segment新机器,不新增Segment实例 《=== 横向扩展
-
不添加Segment新机器,只新增Segment实例 《 === 纵向扩展
-
开始准备:
-
两台新节点gp-node3、gp-node4
-
环境初始化(Segment新节点)
-
添加hosts解析(主Master)
cat >> /etc/hosts << EOF 192.168.110.85 gp-node3 192.168.110.86 gp-node4 EOF
- 分发公钥文件到新机器(主Master)
$ su - gpadmin
$ ssh-copy-id -i /home/gpadmin/.ssh/id_rsa.pub gpadmin@gp-node3
$ ssh-copy-id -i /home/gpadmin/.ssh/id_rsa.pub gpadmin@gp-node4- 添加hostlist 和seg_hosts(主Master)
$ cd /home/gpadmin/conf
$ cat >> hostlist <<EOF
gp-node3
gp-node4
EOF
$ cat >> seg_hosts <<EOF
gp-node3
gp-node4
EOF- 同步hosts文件到所有服务器(主Master)
$ gpssh -f /home/gpadmin/conf/hostlist -e 'sudo chmod 777 /etc/hosts'
$ gpscp -f /home/gpadmin/conf/hostlist /etc/hosts =:/etc/hosts
$ gpssh -f /home/gpadmin/conf/hostlist -e 'sudo chmod 644 /etc/hosts'- 打通ssh连接(主Master)
$ gpssh-exkeys -f /home/gpadmin/conf/hostlist
- 分发软件包(主Master)
$ gpscp -h gp-node3 -h gp-node4 ~/gp6.tar =:/home/gpadmin/
$ gpssh -h gp-node3 -h gp-node4
=> cd /home/gpadmin
=> sudo cp ~/gp6.tar /usr/local/
=> cd /usr/local
=> sudo tar -xf gp6.tar
=> sudo ln -s greenplum-db-6.2.1 greenplum-db
=> sudo chown -R gpadmin:gpadmin /usr/local/greenplum*
=> exit- 创建数据目录
gpssh -h gp-node3 -h gp-node4 -e 'sudo mkdir -p /data/primary'
gpssh -h gp-node3 -h gp-node4 -e 'sudo mkdir -p /data/mirror'
gpssh -h gp-node3 -h gp-node4 -e 'sudo chown -R gpadmin /data/primary'
gpssh -h gp-node3 -h gp-node4 -e 'sudo chown -R gpadmin /data/mirror'- 配置环境
$ su - gpadmin
$ cat >> /home/gpadmin/.bash_profile << EOF
source /usr/local/greenplum-db/greenplum_path.sh
export MASTER_DATA_DIRECTORY=/data/master/gpseg-1
export PGPORT=5432
export PGUSER=gpadmin
export PGDATABASE=testdb
export LD_PRELOAD=/lib64/libz.so.1 ps
EOF
$ source ~/.bash_profile- 插入测试数据(扩容前)
$ psql
create table test1 (id bigint, name varchar(20));
insert into test1 select generate_series(10000,100000),'aa'|| floor(random()*(25-10)+10);查看各个表的分布情况:
numsegments为6 表示有6个primary
select localoid::regclass::text, * from gp_distribution_policy ;
-
-
添加新机器节点
- 生成配置文件(gp_segment_configuration表信息)
$ psql
select * from gp_segment_configuration ;
$ cd /home/gpadmin/conf
$ cat > expand_hosts << EOF
gp-node3
gp-node4
EOF
$ gpexpan -f expand_hosts # 生成segment和mirror列表
=> y # 默认grouped组模式,segment和mirror两两对于
输入y,其他回车即可
$ cat gpexpand_inputfile_20191225_102924如果gp_segment_configuration表的主机和地址不一致就修改为一致
-
把列表的节点加入gp_segment_configuration表
$ gpexpand -i gpexpand_inputfile_20191225_102924 # 出现错误就回滚 gpexpand -r $ psql select * from gp_segment_configuration ; # 原数据不变,要数据重分布才生效 # 查看各个表的分布情况: # numsegments为6 表示有6个primary select localoid::regclass::text, * from gp_distribution_policy ;
- 数据重分布
$ gpexpan
- 清除历史记录,删除gpexpand临时库/视图(schema),便于下次扩容
$ gpexpan -c
- 检查扩展效果
$ psql
select * from gp_segment_configuration ; # 原数据不变,要数据重分布才生效查看各个表的分布情况:
numsegments为12 表示有12个primary
select localoid::regclass::text, * from gp_distribution_policy
$ gpstate -s -
小结:
-
在线的含义是:不用停机重启,不影响用户正常的查询(修改catalog的操作除外)。
-
gpexpand -i 出错,扩容将无法进行,需要回滚 -r。
-
反正扩容期间,不要操作其他东西(catalog库不要修改,gpconfig和gppkg,gpcheckcat和gpaddpkg名命令不允许运行)
-
扩容三部走
gpexpan -f expand_hosts # 生成segment和mirror列表 gpexpand -i gpexpand_inputfile_20191225_102924 # 把列表插入数据库的表 gpexpan #数据重分布
- 提示:删除某个机器,需要手动备份操作
-
在线添加新Segment实例( 纵向扩展)
-
不用添加新主机,只添加新segment实例,可以将新的实例的primary和mirror位置挂载到新的位置
-
segment实例的primary对于的mirror随机分配到除本机的其他不同的主机
-
三步骤:gpexpand -f 、gpexpand -i 、gpexpand
$ cd conf $ gpexpand -f seg_hosts # 生成配置,现有全部主机 Would you like to initiate a new System Expansion Yy|Nn (default=N): > y What type of mirroring strategy would you like? spread|grouped (default=grouped): > grouped How many new primary segments per host do you want to add? (default=0): > 1 # 新增一个节点 Enter new primary data directory 1: > /data/primary # primary位置 Enter new mirror data directory 1: > /data/mirror # mirror位置 $ gpexpand -i gpexpand_inputfile_20191227_142731 # 把配置写入库 # 查看节点分布 $ psql postgres=# SELECT * from gp_segment_configuration ; $ gpexpand # 数据重分布 # 查看某个数据分布在每个节点的数量,数据多,几乎重新平均分布到每个节点 $ psql postgres=# select * from gpexpand.status; # 重分布状态 postgres=# select * from gpexpand.expansion_progress ; # 还有多少个表需要重分布 testdb=# select gp_segment_id,count(*) from name_table group by gp_segment_id; # 查看 某个表在每个节点的分布情况 $ gpexpand -c # 删除gpexpand临时库/视图(schema)
web端(Greenplum Command Center6.1)
-
GPCC6对应的GP版本一定要是发行版,不能是社区版(这是大坑)
-
GP版本下载:https://network.pivotal.io/products/pivotal-gpdb/#/releases/526878/file_groups/2331
-
GPCC版本下载:https://network.pivotal.io/products/gpdb-command-center/#/releases/531889
-
GPCC官方文档:https://gpcc.docs.pivotal.io/610/topics/install.html
-
注意GPCC版本6.1支持GP版本6.2.1以下的
-
防火墙开放端口
- 28080、8899、6162、6163
-
Command Center安装目录(默认安装到所有机器的/usr/local目录)
临时配777权限,安装目录上还原以前的权限 $ su - gpadmin $ cd /home/gpadmin/conf $ gpssh -f hostlist 'sudo chmod 777 /usr/local' $ cat >> /data/master/gpseg-1/pg_hba.conf << EOF local gpperfmon gpmon md5 host all gpmon 127.0.0.1/28 md5 host all gpmon ::1/128 md5 host all gpmon samenet md5 EOF $ gpstop -u
-
解压安装
$ cd ~ $ unzip greenplum-cc-web-6.1.0-gp6-rhel7-x86_64.zip $ cd greenplum-cc-web-6.1.0-gp6-rhel7-x86_64 $ ./gpccinstall-6.1.0 默认回车,选择2 中文 升级和安装Metrics Collector扩展 $ source /usr/local/greenplum-cc-web-6.1.0/gpcc_path.sh $ cd $GPCC_HOME $ gpcc stop $ psql gpperfmon -c 'DROP EXTENSION IF EXISTS metrics_collector' $ gppkg -q --all # 查找旧的扩展 MetricsCollector-
_gp_ $ gppkg -r MetricsCollector- _gp_ # 没有就跳过 $ ls gppkg # 列出对应gp数据库版本 $ gppkg -i gppkg/MetricsCollector-6.1.0_gp_6.2.1-rhel7-x86_64.gppkg $ gpstop -ar $ gpcc start -
登陆
登陆入口:http://ip:2808 默认账号密码 gpmon:changeme cat /home/gpadmin/.pgpass *:5432:gpperfmon:gpmon:changeme
-
修改登陆用户密码
$ psql -d postgres -U gpadmin postgres=# ALTER ROLE gpmon WITH ENCRYPTED PASSWORD '123456'; ALTER ROLE postgres=# \q $ cd /home/gpadmin/ $ vi .pgpass *:5432:gpperfmon:gpmon:123456 $ chown gpadmin:gpadmin ~/.pgpass $ chmod 600 ~/.pgpass $ gpcc stop $ gpcc start
-
设置环境
cat >> /home/gpadmin/.bash_profile << EOF source /usr/local/greenplum-cc-web-6.1.0/gpcc_path.sh EOF $ source ~/.bash_profile
-
还原/usr/local目录权限
$ cd /home/gpadmin/conf $ gpssh -f hostlist 'sudo chmod 755 /usr/local'
-
卸载GPCC
-
关闭gpcc(gp数据库要运行中才能关闭)
$ gpcc stop
-
删除所有主机上安装目录
$ rm -rf /usr/local/greenplum-cc-web-6.1.0
-
禁用数据收集代理。
- 以Greenplum管理用户(gpadmin)登录到主主机:
$ su - gpadmin
- 禁用数据收集代理
$ gpconfig -c gp_enable_gpperfmon -v off
- 删除或注释掉gpmon条目
pg_hba.conf
。
#local gpperfmon gpmon md5 #host gpperfmon gpmon 0.0.0.0/0 md5
- 删除gpmon超级用户角色
$ psql template1 -c 'DROP ROLE gpmon;'
- 重新启动Greenplum数据库:
$ gpstop -r
- 清理驻留在主文件系统上的所有未提交的Command Center数据和日志文件:
$ rm -rf $MASTER_DATA_DIRECTORY/gpperfmon/data/* $ rm -rf $MASTER_DATA_DIRECTORY/gpperfmon/logs/*
- 或者删除gpperfmon数据库,不保留历史命令中心数据
$ dropdb gpperfmon
-
打开防火墙
- 开放端口:22、5432、10000-12000、28080、8899、6162、6163
模拟故障
主备切换
-
场景:kill 主Master5432端口的进程
$ gpstate -f #错误提示 Connection refused Is the server running on host "localhost" (::1) and accepting TCP/IP connections on port 5432? could not connect to server: Connection refused Is the server running on host "localhost" (127.0.0.1) and accepting TCP/IP connections on port 5432? ') exiting...
-
解决:
-
备Master,添加ssh监听127.0.0.1的22端口,重启sshd服务
-
主Master,删除mv /tmp/.s.PGSQL.5432.lock /tmp/.s.PGSQL.5432.lock.bak(不宕机情况)
-
备Master用gpadmin执行 gpactivatestandby -d /data/master/gpseg-1
-
-
修复主Master,加入作为备Master
- 在原主Master,备份用gpadmin执行 mv /data/master/gpseg-1 /data/master/gpseg-1_bak20191220
- 在原备Master,把原主Master加入到备Master ,用gpadmin执行 gpinitstandby -s gp-master1
节点修复
模拟mirror异常
-
模拟一个节点的mirror挂了(kill即可)
-
修复过程
# su - gpadmin $ gpstate -m # 查看情况 $ gprecoverseg -o ./recov # 生成恢复的配置文件,里面包含需要修复的mirror $ gprecoverseg -i ./recov # 开始恢复 $ gpstate -m # 查看情况
模拟primary异常
-
模拟一个节点的primary挂了(kill即可)
-
修复过程,会停库
# su - gpadmin $ gpstate -s # 查看情况 $ gprecoverseg -o ./recov # 生成恢复的配置文件,里面包含需要修复的primary $ gprecoverseg -i ./recov # 开始恢复 $ gpstate -s # 查看情况 $ gprecoverseg -r # 把运行在mirror节点切换回primary,需要停库gpstop -M fast
FAQ
-
说明,本版本是greenplum6.2.1+centos7.2
-
资料:github-issues https://github.com/greenplum-db/gpdb/issues
-
1、select * from gp_segment_configuration ;
-
gp_segment_configuration表里的主机名和地址不一致
- 解决方法
修改hostname 等于 address 字段
su - gpadmin
$ psql
set allow_system_table_mods='on';
update gp_segment_configuration set hostname='sdw1' where address='sdw1';
update gp_segment_configuration set hostname='sdw2' where address='sdw2';
set allow_system_table_mods='off';
$ gpstop -u # 重载greenplum