greenplum6集群原理和搭建详细版

Greenplum6 feko 7个月前 (03-05) 477次浏览 已收录 0个评论 扫描二维码
文章目录[隐藏]

greenplum基本知识

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

高层的Greenplum数据库架构

greenplum6集群原理和搭建详细版

关键组件

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

    1. 关闭gpcc(gp数据库要运行中才能关闭)

      $ gpcc stop
    2. 删除所有主机上安装目录

      $ rm -rf /usr/local/greenplum-cc-web-6.1.0
    3. 禁用数据收集代理。

      1. 以Greenplum管理用户(gpadmin)登录到主主机:
      $ su - gpadmin
      1. 禁用数据收集代理
      $ gpconfig -c gp_enable_gpperfmon -v off
      1. 删除或注释掉gpmon条目pg_hba.conf
      #local     gpperfmon     gpmon     md5  
      #host      gpperfmon     gpmon    0.0.0.0/0    md5
      1. 删除gpmon超级用户角色
      $ psql template1 -c 'DROP ROLE gpmon;'
      1. 重新启动Greenplum数据库:
      $ gpstop -r
      1. 清理驻留在主文件系统上的所有未提交的Command Center数据和日志文件:
      $ rm -rf $MASTER_DATA_DIRECTORY/gpperfmon/data/* 
      $ rm -rf $MASTER_DATA_DIRECTORY/gpperfmon/logs/*
      1. 或者删除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


笔记阁 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:greenplum6集群原理和搭建详细版
喜欢 (6)
发表我的评论
取消评论
表情 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址