一: greenplum 的使用
1.1 greenplum的概述:
Greenplum。该公司成立于2003年,2006年推出了首款产品,其主营业务关注在数据仓库和商业智能方面,Greenplum DW/BI软件可以在虚拟化x86服务器上运行无分享(shared-nothing)的大规模并行处理(MPP)架构
当前使用的 OLTP程序中,用户访问一个中心数据库,如果采用SMP系统结构,它的效率要比采用MPP结构要快得多。而MPP系统在决策支持和数据挖掘方面显示了优势,
可以这样说,如果操作相互之间没有什么关系,处理单元之间需要进行的通信比较少,那采用MPP系统就要好,相反就不合适了。
greenplum 的企业版本下载:
https://network.pivotal.io/products/vmware-tanzu-greenplum
1.2 mpp系统
Greenplum的架构采用了MPP(大规模并行处理)。在 MPP 系统中,每个 SMP节点也可以运行自己的操作系统、数据库等。换言之,每个节点内的 CPU 不能访问另一个节点的内存。
节点之间的信息交互是通过节点互联网络实现的,这个过程一般称为数据重分配(Data Redistribution) 。与传统的SMP架构明显不同,通常情况下,
MPP系统因为要在不同处理单元之间传送信息,所以它的效率要比SMP要差一点,但是这也不是绝对的,因为 MPP系统不共享资源,因此对它而言,资源比SMP要多,
当需要处理的事务达到一定规模时,MPP的效率要比SMP好。这就是看通信时间占用计算时间的比例而定,如果通信时间比较多,那MPP系统就不占优势了,相反,如果通信时间比较少,
那MPP系统可以充分发挥资源的优势,达到高效率。
1.3 greenplum的体系架构
Greenplum 由三部分组成:Master Host、Segment、Interconnect。
Master Host:
Master Host 节点是访问系统的入口,数据库侦听进程 (postgres),处理所有用户连接,建立查询计划,协调工作处理过程,管理工具,系统目录表和元数据(数据字典)并不存放任何用户数据。
segment节点:
每段(Segment)存放一部分用户数据,一个系统可以有多段,用户不能直接存取访问,所有对段的访问都经过 Master,数据库监听进程(postgres)监听来自 Master 的连接
Interconnect
Greenplum 数据库之间的连接层,进程间协调和管理,基于千兆以太网架构,属于系统内部私网配置,并支持两种协议:TCP or UDP
1.4 greenplum的表的分布策略
在Greenplum 5中,有2种分布策略:
哈希分布,随机分布
在Greenplum 6中,添加了另一个策略:
哈希分布,随机分布,复制分布
数据表的单个行会被分配到一个或多个segment上.
二: greenplum 的安装:
2.1 greenplum 的下载
greenplum开源版本
其官方手册 https://greenplum.org/documentation/
其下载介质地址 https://github.com/greenplum-db/gpdb/releases
greenplum商业版本(注:下载介质必须要付费,官方手册可以在线或离线看)
其官方手册 http://gpdb.docs.pivotal.io/570/main/index.html
其下载介质地址 https://network.pivotal.io/products/pivotal-gpdb/
本次安装收费版本:
2.2 安装greenplum系统环境准备:
- 系统:
CentOS7.9x64
-
部署环境:
master 一台
standby 一台
segment 三台 -
系统主机名配置:
cat /etc/hosts
192.168.100.11 node01.flyfish.com
192.168.100.12 node02.flyfish.com
192.168.100.13 node03.flyfish.com
192.168.100.14 node04.flyfish.com
192.168.100.15 node05.flyfish.com
192.168.100.16 node06.flyfish.com
192.168.100.17 node07.flyfish.com
192.168.100.18 node08.flyfish.com
192.168.100.19 node09.flyfish.com
本次安装前五台机器:
部署greenplum 建议生产使用实体机器,greenplum 的最小环境为,master 一台standby 一台 segment 三台
- 系统环境初始化:(所有主机)
vim /etc/sysctl.conf
vm.swappiness = 0
kernel.sysrq = 1
net.ipv4.neigh.default.gc_stale_time = 120
see details in https://help.aliyun.com/knowledge_detail/39428.html
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
see details in https://help.aliyun.com/knowledge_detail/41334.html
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 1024
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_slow_start_after_idle = 0
fs.aio-max-nr = 1048576
fs.file-max = 6815744
net.ipv4.ip_local_port_range = 9000 65500
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.conf.all.arp_filter = 1
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
kernel.sem = 204800 512000 3000 20480
kernel.shmmax = 107374182400000
kernel.shmall = 262144
kernel.shmmni = 4096
kernel.sysrq = 1
kernel.core_uses_pid = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.msgmni = 2048
vm.swappiness = 10
vm.overcommit_memory = 2
vm.overcommit_ratio = 95
vm.zone_reclaim_mode = 0
vm.dirty_expire_centisecs = 500
vm.dirty_writeback_centisecs = 100
vm.dirty_background_ratio = 3
vm.dirty_ratio = 10
#64g-
#vm.dirty_background_ratio = 3
#vm.dirty_ratio = 10
#64g+
#vm.dirty_background_ratio = 0
#vm.dirty_ratio = 0
#vm.dirty_background_bytes = 1610612736
#vm.dirty_bytes = 4294967296
sysctl -p
资源句柄数限制:
cat >> /etc/security/limits.conf << EOF
-
soft nproc unlimited
-
hard nproc unlimited
-
soft nofile 524288
-
hard nofile 524288
-
soft stack unlimited
-
hard stack unlimited
-
hard memlock unlimited
-
soft memlock unlimited
EOF
系统优化启动:
echo “session required pam_limits.so” >> /etc/pam.d/login
cat /etc/pam.d/login
echo “RemoveIPC=no” >> /etc/systemd/logind.conf
service systemd-logind restart
系统关闭firewalld,iptables,selinux
echo “SELINUX=disabled” > /etc/selinux/config
setenforce 0
systemctl stop firewalld.service
systemctl disable firewalld.service
systemctl status firewalld.service
systemctl set-default multi-user.target
系统最大透明页
yum install numactl
vim /etc/default/grub
GRUB_CMDLINE_LINUX=“crashkernel=auto rhgb quiet numa=off transparent_hugepage=never elevator=deadline”
grub2-mkconfig -o /etc/grub2.cfg
numastat
numactl --show
numactl --hardware
硬盘读写优化
XFS:
rw,noatime,inode64,allocsize=16m
cat /etc/fstab
/dev/mapper/centos-root / xfs rw,noatime,inode64,allocsize=16m 0 0
UUID=df6d5e29-33c8-4d43-ae34-5573447ef51e /boot xfs defaults 0 0
UUID=f8097a9d-74ed-45b7-ae1b-c0467cbf235d swap swap defaults 0 0
echo "blockdev --setra 65536 /dev/sda " >> /etc/rc.d/rc.local
echo deadline > /sys/block/sda/queue/scheduler
系统时间同步问题:(所有节点同步阿里云时间服务器)
vim /etc/chrony.conf
server ntp1.aliyun.com iburst
service chronyd stop
service chrnoyd start
2.3 greenplum 的依赖包
yum -y install openssh-clients gcc gcc-c++ make automake autoconf libtool krb5-devel perl rsync coreutils glib2 ed lrzsz sysstat e4fsprogs xfsprogs ntp readline-devel zlib zlib-devel unzip bzip2 libyaml zip libevent
2.4 greenplum 安装环境
下载安装包(官方下载)
全部节点配置:
安装目录:/usr/local/greeplum-db
mkdir -p /greenplum/gpdata
mkdir -p /greenplum/soft
安装rpm 安装
rpm -ivh greenplum-db-6.16.2-rhel7-x86_64.rpm
设置greenplum 的安装用户: (所有节点)
useradd gpadmin
echo gpadmin |passwd gpadmin --stdin
设置安装目录权限:
chown -R gpadmin:gpadmin /usr/local/greenplum*
chmod -R 775 /usr/local/greenplum*
chmod -R 775 /greenplum
chown -R gpadmin:gpadmin /greenplum
需要做gpadmin用户的无密钥登录:
su - gpadmin
ssh-keygen —一直敲回车到最后
cat id_rsa.pub >> authorized_keys
chmod 600 authorized_keys
将所有的公钥导入authorized_keys 分发到 所有的 机器的.ssh/ 下面
然后测试
或者
配置ssh
rac1
su 用户
$mkdir ~/.ssh
$chmod 755 ~/.ssh
$/usr/bin/ssh-keygen -t rsa
$/usr/bin/ssh-keygen -t dsa
rac2
su 用户
$mkdir ~/.ssh
$chmod 755 ~/.ssh
$/usr/bin/ssh-keygen -t rsa
$/usr/bin/ssh-keygen -t dsa
rac1
$cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
$ssh oracle@rac2 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ssh oracle@rac2 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
$chmod 644 ~/.ssh/authorized_keys
rac2
$cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
$ssh oracle@rac1 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ssh oracle@rac1 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
$chmod 644 ~/.ssh/authorized_keys
#建立等效性
rac1,rac2
$ssh rac1
$ssh rac2
设置主机名配置: (在master节点配置)
su - gpadmin
mkdir /usr/local/greenplum-db/config
vim /usr/local/greenplum-db/config/all_hosts.txt
node01.flyfish.com
node02.flyfish.com
node03.flyfish.com
node04.flyfish.com
node05.flyfish.com
vim /usr/local/greenplum-db/config/all_seg.txt
node03.flyfish.com
node04.flyfish.com
node05.flyfish.com
设置gpadmin的环境变量 (全部节点)
su - gpadmin
vim .bash_profile
source /usr/local/greenplum-db/greenplum_path.sh
#source /greenplum/greenplum-cc-6.3.1/gpcc_path.sh
export MASTER_DATA_DIRECTORY=/greenplum/gpdata/master/gpseg-1
export PGHOME=/usr/local/greenplum-db
export PGPORT=5432
export PGDATABASE=postgres
export PGUSER=gpadmin
vim .bashrc
source /usr/local/greenplum-db/greenplum_path.sh
#source /greenplum/greenplum-cc-6.3.1/gpcc_path.sh
export MASTER_DATA_DIRECTORY=/greenplum/gpdata/master/gpseg-1
export PGHOME=/usr/local/greenplum-db
export PGPORT=5432
export PGDATABASE=postgres
export PGUSER=gpadmin
source /home/gpadmin/.bashrc
source /home/gpadmin/.bash_profile
所有主机测试:
gpssh -f /usr/local/greenplum-db/config/all_hosts.txt -e ‘ls -ls /greenplum’
gpssh -f /usr/local/greenplum-db/config/all_hosts.txt -e ‘date’
设置主机安装目录:
su - gpadmin
mkdir -p /greenplum/gpdata/master (主节点与备份节点配置)
gpssh -f /usr/local/greenplum-db/config/all_hosts.txt -e ‘mkdir -p /greenplum/gpdata/primary’
gpssh -f /usr/local/greenplum-db/config/all_hosts.txt -e ‘mkdir -p /greenplum/gpdata/mirror’
集群节点安装
vim /usr/local/greenplum-db/config/gpinitsystem_config
ARRAY_NAME=“greenplum”
SEG_PREFIX=gpseg
PORT_BASE=55000
declare -a DATA_DIRECTORY=(/greenplum/gpdata/primary /greenplum/gpdata/primary /greenplum/gpdata/primary)
MASTER_HOSTNAME=node01.flyfish.com
MASTER_DIRECTORY=/greenplum/gpdata/master
MASTER_PORT=5432
MACHINE_LIST_FILE=/usr/local/greenplum-db/config/all_seg.txt
TRUSTED_SHELL=ssh
CHECK_POINT_SEGMENTS=8
ENCODING=UNICODE
MIRROR_PORT_BASE=56000
REPLICATION_PORT_BASE=57000
MIRROR_REPLICATION_PORT_BASE=58000
declare -a MIRROR_DATA_DIRECTORY=(/greenplum/gpdata/mirror /greenplum/gpdata/mirror /greenplum/gpdata/mirror)
初始化集群:
vim gpinit.sh
gpinitsystem -c /usr/local/greenplum-db/config/gpinitsystem_config -a -h /usr/local/greenplum-db/config/all_seg.txt -s node02.flyfish.com -D -B 2
chmod +x gpinit.sh
./gpinit.sh
初始化到最后:
查看GP 的 分段情况:
select * from gp_segment_configuration order by content asc,dbid;
集群状态
gpstate -e #查看mirror的状态
gpstate -f #查看standby master的状态
gpstate -s #查看整个GP群集的状态
gpstate -i #查看GP的版本
gpstate --help #帮助文档,可以查看gpstate更多用法
1. 管理使用Greenplum集群
1.1 启动Greenplum数据库
$ gpstart -a
1.2 对于要求重启数据库生效
$ gpstop -r
1.3 仅重新载入更改配置文件生效
$ gpstop -u
1.4 维护模式启动Master
使用-m模式运行gpstart:
$ gpstart -m
以维护模式连接到Master进行目录维护。例如:
$ PGOPTIONS='-c gp_session_role=utility' psql postgres
在完成管理任务后,停止处于维护模式的额Master。然后以生产模式重启它。
$ gpstop -mr
1.5 停止Greenplum数据库
### 停止Greenplum数据库
$ gpstop
### 快速模式停止Greenplum数据库
$ gpstop -M fast
激活备库流程
$ gpactivatestandby -d $MASTER_DATA_DIRECTORY
用-f 选项运行gpstate来检查状态:
$ gpstate -f
在后备Master主机上,移动或者移除数据目录gpseg-1。这个例子移动该目录:
$ mv /data/master/gpseg-1 /data/master/backup_gpseg-1
在新主库上,初始化一个后备Maste
$ gpinitstandby -s smdw
2. 访问数据库
表 1. 最常用的客户端应用
|名称|用法|
|- | :-: |-😐
|createdb|创建一个新数据库|
|createlang|定义一种新的过程语言|
|createuser|定义一个新的数据库角色|
|dropdb|移除一个数据库|
|droplang|移除一种过程语言|
|dropuser|移除一个角色|
|psql|PostgreSQL交互式终端|
|reindexdb|对一个数据库重建索引|
|vacuumdb|对一个数据库进行垃圾收集和分析|
创建用户
CREATE USER 用户名 WITH PASSWORD '密码'
alter user gpadmin encrypted password 'gpadmin';
创建模式
CREATE SCHEMA myschema;
删除模式
DROP SCHEMA myschema;
查询当前连接
psql -c "select * from pg_stat_activity;"
查看数据库
psql -c "select pg_size_pretty(pg_database_size('test'));"
表占用空间
psql -c "select pg_size_pretty(pg_relation_size('schema.test'));"
表统计
select relname from pg_class t where t.relname like 'ods%';
select relname from pg_class t where t.relname like 'kn%';
统计资源
select gp_segment_id,count(*) from test group by 1 ;
查看实例配置和状态
select * from gp_segment_configuration order by 1;
收集统计信息,回收空间
定期使用回收垃圾和收集统计信息,尤其在大数据量删除,导入以后,非常重要
Vacuum analyze tablename
进程监控:
select * from pg_stat_activity where waiting ='t' ORDER BY current_query; select * from pg_stat_activity where waiting ='t' ORDER BY sess_id;
select * from pg_stat_activity where waiting ='f' ORDER BY current_query; select * from pg_stat_activity where waiting ='f' ORDER BY sess_id;
select * from pg_tablespace;
select * from pg_filespace;
查看数据分布
select * from pg_filespace_entry;
SELECT spcname, fsname,fsedbid,fselocation FROM pg_tablespace pgts, pg_filespace pgfs,pg_filespace_entry pgfse WHERE pgts.spcfsoid=pgfse.fsefsoid AND pgfse.fsefsoid=pgfs.oid ORDER BY 1,3;
查看日志级别
控制写到服务器日志里的信息的详细程度。有效值是 DEBUG5, DEBUG4,DEBUG3,DEBUG2, DEBUG1,INFO,NOTICE, WARNING ,ERROR,LOG, FATAL,和 PANIC。 每个级别都包含它后面的级别。越靠后的数值发往服务器日志的信息越少。 缺省是 NOTICE。请注意 LOG 和 client_min_messages 里面的同名级别优先级不同。 只有超级用户可以修改这个设置。
show log_min_messages;
这个选项控制那些信息发送到客户端。 有效的数值是 DEBUG5,DEBUG4, DEBUG3,DEBUG2, DEBUG1,LOG,NOTICE, WARNING 和 ERROR。 每个级别包含所有它后面的级别,级别越靠后,发送的信息越少。 缺省是 NOTICE。这里的 LOG 和 log_min_messages 里面的有不同的级别。
show client_min_messages;
查看数据库备份
select pg_start_backup('backup baseline');
select pg_stop_backup();
常看数据库.conf配置
show all
查看当前日期属于一年中第几周
select EXTRACT(week from TIMESTAMP '2018-05-11');
GreenPlum 常用命令
gpstate
命令 参数 作用
gpstate -b => 显示简要状态
gpstate -c => 显示主镜像映射
gpstart -d => 指定数据目录(默认值:$MASTER_DATA_DIRECTORY)
gpstate -e => 显示具有镜像状态问题的片段
gpstate -f => 显示备用主机详细信息
gpstate -i => 显示GRIPLUM数据库版本
gpstate -m => 显示镜像实例同步状态
gpstate -p => 显示使用端口
gpstate -Q => 快速检查主机状态
gpstate -s => 显示集群详细信息
gpstate -v => 显示详细信息
gpconfig
命令 参数 作用
gpconfig -c => --change param_name 通过在postgresql.conf 文件的底部添加新的设置来改变配置参数的设置。
gpconfig -v => --value value 用于由-c选项指定的配置参数的值。默认情况下,此值将应用于所有Segment及其镜像、Master和后备Master。
gpconfig -m => --mastervalue master_value 用于由-c 选项指定的配置参数的Master值。如果指定,则该值仅适用于Master和后备Master。该选项只能与-v一起使用。
gpconfig -masteronly =>当被指定时,gpconfig 将仅编辑Master的postgresql.conf文件。
gpconfig -r => --remove param_name 通过注释掉postgresql.conf文件中的项删除配置参数。
gpconfig -l => --list 列出所有被gpconfig工具支持的配置参数。
gpconfig -s => --show param_name 显示在Greenplum数据库系统中所有实例(Master和Segment)上使用的配置参数的值。如果实例中参数值存在差异,则工具将显示错误消息。使用-s=>选项运行gpconfig将直接从数据库中读取参数值,而不是从postgresql.conf文件中读取。如果用户使用gpconfig 在所有Segment中设置配置参数,然后运行gpconfig -s来验证更改,用户仍可能会看到以前的(旧)值。用户必须重新加载配置文件(gpstop -u)或重新启动系统(gpstop -r)以使更改生效。
gpconfig --file => 对于配置参数,显示在Greenplum数据库系统中的所有Segment(Master和Segment)上的postgresql.conf文件中的值。如果实例中的参数值存在差异,则工具会显示一个消息。必须与-s选项一起指定。
gpconfig --file-compare 对于配置参数,将当前Greenplum数据库值与主机(Master和Segment)上postgresql.conf文件中的值进行比较。
gpconfig --skipvalidation 覆盖gpconfig的系统验证检查,并允许用户对任何服务器配置参数进行操作,包括隐藏参数和gpconfig无法更改的受限参数。当与-l选项(列表)一起使用时,它显示受限参数的列表。 警告: 使用此选项设置配置参数时要格外小心。
gpconfig --verbose 在gpconfig命令执行期间显示额外的日志信息。
gpconfig --debug 设置日志输出级别为调试级别。
gpconfig -? | -h | --help 显示在线帮助。
gpstart
命令 参数 作用
gpstart -a => 快速启动|
gpstart -d => 指定数据目录(默认值:$MASTER_DATA_DIRECTORY)
gpstart -q => 在安静模式下运行。命令输出不显示在屏幕,但仍然写入日志文件。
gpstart -m => 以维护模式连接到Master进行目录维护。例如:$ PGOPTIONS='-c gp_session_role=utility' psql postgres
gpstart -R => 管理员连接
gpstart -v => 显示详细启动信息
gpstop
命令 参数 作用
gpstop -a => 快速停止
gpstop -d => 指定数据目录(默认值:$MASTER_DATA_DIRECTORY)
gpstop -m => 维护模式
gpstop -q => 在安静模式下运行。命令输出不显示在屏幕,但仍然写入日志文件。
gpstop -r => 停止所有实例,然后重启系统
gpstop -u => 重新加载配置文件 postgresql.conf 和 pg_hba.conf
gpstop -v => 显示详细启动信息
gpstop -M fast => 快速关闭。正在进行的任何事务都被中断。然后滚回去。
gpstop -M immediate => 立即关闭。正在进行的任何事务都被中止。不推荐这种关闭模式,并且在某些情况下可能导致数据库损坏需要手动恢复。
gpstop -M smart => 智能关闭。如果存在活动连接,则此命令在警告时失败。这是默认的关机模式。
gpstop --host hostname => 停用segments数据节点,不能与-m、-r、-u、-y同时使用
集群恢复
命令 参数 作用
gprecoverseg -a => 快速恢复
gprecoverseg -i => 指定恢复文件
gprecoverseg -d => 指定数据目录
gprecoverseg -l => 指定日志文件
gprecoverseg -r => 平衡数据
gprecoverseg -s => 指定配置空间文件
gprecoverseg -o => 指定恢复配置文件
gprecoverseg -p => 指定额外的备用机
gprecoverseg -S => 指定输出配置空间文件
激活备库流程
命令 参数 作用
gpactivatestandby -d 路径 | 使用数据目录绝对路径,默认:$MASTER_DATA_DIRECTORY
gpactivatestandby -f | 强制激活备份主机
gpactivatestandby -v | 显示此版本信息
始化备Master
命令 参数 作用
gpinitstandby -s 备库名称 => 指定新备库
gpinitstandby -D => debug 模式
gpinitstandby -r => 移除备用机
参考文档
https://gp-docs-cn.github.io/docs/utility_guide/admin_utilities/gprecoverseg.html