刚开始使用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