刚开始使用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.5    greenplum-db-6.17.3-rhel7-x86_64.rpm

规划:

内网ip 主机名 角色

  • 192.168.10.66 master 
  • 192.168.10.60 gp0 
  • 192.168.10.61 gp1
1、安装依赖
yum install -y apr apr-util bash bzip2 curl krb5 libcurl libevent libevent2 libxml2 libyaml zlib openldap openssh openssl openssl-libs perl readline rsync R sed tar zip apr apr-util libyaml libevent java ntp
   2、关闭iptables 和 selinux(centos7.5)
systemctl stop iptables
 systemctl  disable iptables
 sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
 setenforce 0关闭防火墙,根据centos版本选择命令(centos7.0)
 firewall-cmd --state
 systemctl stop firewalld.service
 systemctl disable firewalld.service 3、修改host
# cat >> /etc/hosts << EOF 192.168.110.81 gp-master1 192.168.110.82 gp-node1 192.168.110.83 gp-node2 # EOF
 4、修改内核参数
 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 kernel.shmmax = $(expr $(getconf _PHYS_PAGES) / 2 \* $(getconf PAGE_SIZE))           #注意这里查看说明Shared Memory Pages
 kernel.shmmni = 4096
 kernel.shmall = $(expr $(getconf _PHYS_PAGES) / 2)
 vm.overcommit_memory = 2        # 注意这里查看说明Segment Host Memory
 vm.overcommit_ratio = 95           # 注意这里查看说明Segment Host Memorynet.ipv4.ip_local_port_range = 10000 65535 ## See Port Settings
 kernel.sem = 500 2048000 200 4096
 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
 EOFawk 'BEGIN {OFMT = "%.0f";} /MemTotal/ {print "vm.min_free_kbytes =", $2 * .03;}' /proc/meminfo >> /etc/sysctl.conf
 sysctl -p5、配置文件连接数和进程数
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 <<EOF
 *          soft    nproc     131072
 root       soft    nproc     unlimited
 EOF6、挂载XFS文件系统
# cat >> /etc/fstab << EOF
 /dev/data /data xfs nodev,noatime,nobarrier,inode64 0 0
 EOF
 注释:/data文件系统必须是xfs格式的
 mkdir /data7、
设置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=ALL8、设置THP
grubby --update-kernel=ALL --args="transparent_hugepage=never"
 cat /sys/kernel/mm/*transparent_hugepage/enabled 
 ## 检查,有输出表示正常9、禁用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: ALL10、配置动态库
登录后复制
 cat >> /etc/ld.so.conf << EOF
 /usr/local/lib
 EOF11、配置用户
 groupadd -r -g 420 gpadmin
 useradd -r -u  420 -g gpadmin -m -s /bin/bash gpadmin
 echo gpadmin | passwd  gpadmin --stdin
 usermod -aG wheel gpadmin12、安装,Master端搭建(Master)
$ sudo yum install greenplum-db-6.17.3-rhel7-x86_64.rpm  -y
 $ sudo chown -R gpadmin:gpadmin /usr/local/greenplum*$ mkdir /home/gpadmin/conf
 $ cd /home/gpadmin/conf
 $ cat > hostlist <<EOF
 master               
 gp0        
 gp1 
 EOF$ cat >  seg_hosts  <<EOF       
 gp0
 gp1
 EOF13、##生成密钥
 $ ssh-keygen -t rsa -b 4096
 Generating public/private rsa key pair.
 Enter file in which to save the key (/home/gpadmin/.ssh/id_rsa):
 Created directory '/home/gpadmin/.ssh'.
 Enter passphrase (empty for no passphrase):
 Enter same passphrase again:14、##master与segment互信
 su - gpadmin
 ssh-copy-id -i ~/.ssh/id_rsa.pub gpadmin@gp0
 ssh-copy-id -i ~/.ssh/id_rsa.pub gpadmin@gp1##使用gpssh-exkeys 工具,打通n-n的免密登陆
 [gpadmin@mdw greenplum-db]$ gpssh-exkeys -f hostlist 15、创建数据库目录(Master),分发软件包(Master,可以直接用yum命令在其他机器上安装)
$ sudo mkdir -p /home/data/master
 $ sudo chown gpadmin:gpadmin /home/data/master$ source /usr/local/greenplum-db/greenplum_path.sh 
 $ gpssh -f seg_hosts -e 'mkdir -p /home/data/primary'
 $ gpssh -f seg_hosts -e 'mkdir -p /home/data/mirror'
 $ gpssh -f seg_hosts -e 'chown -R gpadmin /home/data/primary'
 $ gpssh -f seg_hosts -e 'chown -R gpadmin /home/data/mirror'16、测试硬盘性能
gpcheckperf  -f seg_hosts -r ds -D -d /home/data/primary -d /home/data/mirror
17、配置文件
cat >>  /home/gpadmin/.bash_profile << EOF
 source /usr/local/greenplum-db/greenplum_path.sh
 export MASTER_DATA_DIRECTORY=/home:/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_config18、修改配置文件
cat > /home/gpadmin/gpconfigs/gpinitsystem_config << EOF
 ARRAY_NAME="Greenplum Data Platform"
 SEG_PREFIX=gpseg
 PORT_BASE=10000    # primary端口起始
 ### 三个相同的目录表示在一个Segment机器上创建2个Segment实例 ###
 declare -a DATA_DIRECTORY=(/home/data/primary /home/data/primary)
 MASTER_HOSTNAME=master
 MASTER_DIRECTORY=/home/data/master
 MASTER_PORT=5432    ### 监听端口
 TRUSTED_SHELL=ssh
 CHECK_POINT_SEGMENTS=8
 ENCODING=UNICODE
 MIRROR_PORT_BASE=11000   ### mirror端口起始
 declare -a MIRROR_DATA_DIRECTORY=(/home/data/mirror /home/data/mirror)
 EOFcat > hostfile_gpinitsystem << EOF
 gp0        
 gp1
 EOF19、初始化
$ gpinitsystem -c gpconfigs/gpinitsystem_config -h gpconfigs/hostfile_gpinitsystem
20、配置gpadmin数据库用户密码
 $ psql -d postgres
 postgres=# alter role gpadmin with password 'gpadmin'; 21、允许本地远程用户登录和进制本地空密码登录
 $ vim  /home/data/master/gpseg-1/pg_hba.conf
 host     all         gpadmin        0.0.0.0/0        md5
 local    all         gpadmin         md5
 $ gpstop -u 22、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    # 登录 create user testdb with password 'testdb'; #  创建用户并设置密码 
create database drug_db; #创建数据
 grant all on database drug_db to gpadmin; 
  23、备份数据库(gpbackup 需要单独安装)
 gpbackup --dbname test_db24、横向扩展 seg  ,注意,必须是原seg机器的倍数。比如:如果你有2台seg,则扩容的时候必须也是2*n台,1台会报错
 1、创建用户
groupadd -r -g 420 gpadmin
 useradd -r -u  420 -g gpadmin -m -s /bin/bash gpadmin
 echo gpadmin | passwd  gpadmin --stdin
 usermod -aG wheel gpadmin2、修改/etc/hosts
 3、安装yum -y   install  xxx.rpm 文件
 4、赋权限
 sudo chown -R gpadmin:gpadmin /usr/local/greenplum*
 5、创建目录gpssh -h gp3 'mkdir -p /home/data/primary '
 gpssh -h gp3 'mkdir -p /home/data/mirror '
 gpssh -h gp3 'chown -R gpadmin /home/data/primary '
 gpssh -h gp3 'chown -R gpadmin /home/data/mirror'6、生成扩容机器host
 cat > expand_hosts << EOF
 gp2
 gp3
 EOF7、执行扩容命令
 gpexpand -f expand_hosts1)Would you like to initiate a new System Expansion Yy|Nn (default=N):
 输入:y
 2)How many new primary segments per host do you want to add? (default=0):
 注意:如果只是水平扩容,输入0 ,如果是水平+垂直扩容,垂直增加几个节点,就写几把列表的节点加入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
 恢复节点
 1、查看数据库的mirror的节点启动状态
 gpstate -m2、如果有没启动的
 如何恢复这个mirror segment呢?
 首先产生一个恢复的配置文件 : gprecoverseg -o ./recov
 ---- 当然primary segment也是这样恢复 ----
 gprecoverseg -o ./recov3、可以知道哪些segment需要恢复
[gpadmin@mdw ~]$ cat recov
4、使用配置文件进行恢复 :
 [gpadmin@mdw ~]$ gprecoverseg -i ./recov5、查看恢复状态
 [gpadmin@mdw ~]$ gpstate -m