# 环境准备
-安装依赖包,所有节点需要安装的包**
`yum -y install ed openssh-clients gcc gcc-c++ make automake autoconf libtool perl rsync coreutils glib2 lrzsz sysstat e4fsprogs xfsprogs ntp readline-devel zlib zlib-devel unzip`
注意:greenplum依赖ed,否则无法初始化成功
-ARM下载地址
https://ic-openlabs.huawei.com/openlab/#/unioncompaty
# 默认安装到 /usr/local/gpdb/
rpm -Uvh gpdb-6.0.0-1.el7.aarch64.rpm
# 安装成功后的目录文件
# drwxr-xr-x 7 gpadmin gpadmin 4096 Jan 7 15:42 bin
# drwxr-xr-x 3 gpadmin gpadmin 4096 Jan 7 15:42 docs
# -rwxr-xr-x 1 gpadmin gpadmin 737 Dec 24 2019 greenplum_path.sh
# drwxr-xr-x 4 gpadmin gpadmin 4096 Jan 7 15:42 include
# drwxr-xr-x 5 gpadmin gpadmin 4096 Jan 13 14:48 lib
# drwxr-xr-x 2 gpadmin gpadmin 4096 Jan 7 15:42 sbin
# drwxr-xr-x 5 gpadmin gpadmin 4096 Jan 13 18:13 shar
# conf文件配置
-创建文件夹以及配置文件
cd /user/local/
mkdir conf
touch conf/all_hosts
-前提已经配置好 /etc/hosts文件
vim conf/all_hosts
#写入master、slave节点的hostname
xmscczw-ecs-ggaq-mpp-0001
xmscczw-ecs-ggaq-mpp-0002
xmscczw-ecs-ggaq-mpp-0003
touch conf/seg_hosts
#包含所有的Segment Host的主机名
xmscczw-ecs-ggaq-mpp-0001
xmscczw-ecs-ggaq-mpp-0002
# 此处xmscczw-ecs-ggaq-mpp-0003为master
# 数据存储路径配置
# 创建数据存储路径文件(在分发到其他节点后,三个节点都要执行)
mkdir -p /data/greenplum/data/master
mkdir -p /data/greenplum/data/primary
mkdir -p /data/greenplum/data/mirror
mkdir -p /data/greenplum/data2/primary
mkdir -p /data/greenplum/data2/mirror
# 增加initgp_config文件为模板
cp /usr/local/gpdb/docs/cli_help/gpconfigs/gpinitsystem_config /usr/local/gpdb/docs/cli_help/gpconfigs/initgp_config
# 编辑initgp_config配置文件
vim initgp_config
declare -a DATA_DIRECTORY=(/data/greenplum/data/primary /data/greenplum/data/primary /data/greenplum/data/primary /data/greenplum/data2/primary /data/greenplum/data2/primary /data/greenplum/data2/primary)
declare -a MIRROR_DATA_DIRECTORY=(/data/greenplum/data/mirror /data/greenplum/data/mirror /data/greenplum/data/mirror /data/greenplum/data2/mirror /data/greenplum/data2/mirror /data/greenplum/data2/mirror)
ARRAY_NAME=”gp_sydb”
MASTER_HOSTNAME=master
MASTER_DIRECTORY=/data/greenplum/data/master
MASTER_DATA_DIRECTORY=/data/greenplum/data/master/gpseg-1
DATABASE_NAME=gp_sydb
MACHINE_LIST_FILE=/usr/local/gpdb/conf/seg_hosts
# 创建用户,赋予安装目录
groupadd gpadmin # 用户组gpadmin
useradd -g gpadmin gpadmin # 创建用户名gpadmin
passwd gpadmin gpadmin # 设置用户密码
chown -R gpadmin:gpadmin /usr/local/gpdb/ # 设置安装目录文件
# 以root用户在master节点上执行
ssh-keygen # 生成秘钥
ssh-copy-id -i ~/.ssh/id_rsa.pub root@xmscczw-ecs-ggaq-mpp-0002 # 分发公共秘钥
ssh-copy-id -i ~/.ssh/id_rsa.pub root@xmscczw-ecs-ggaq-mpp-0001
# 以gpadmin用户在master节点上执行
ssh-keygen # 生成秘钥
ssh-copy-id -i ~/.ssh/id_rsa.pub gpadmin@xmscczw-ecs-ggaq-mpp-0003
ssh-copy-id -i ~/.ssh/id_rsa.pub gpadmin@xmscczw-ecs-ggaq-mpp-0002 # 分发公共秘钥
ssh-copy-id -i ~/.ssh/id_rsa.pub gpadmin@xmscczw-ecs-ggaq-mpp-0001
# 先执行该
source /usr/local/gpdb/greenplum_path.sh
gpssh-exkeys -f /workspace/gpdb/gp-all.txt
# 将安装包分发到其他两个节点
cd /usr/local/
scp -r /usr/local/gpdb/ xmscczw-ecs-ggaq-mpp-0001:$PWD
scp -r /usr/local/gpdb/ xmscczw-ecs-ggaq-mpp-0002:$PWD
# 使用自带的gpssh工具,实现在主节点同时操作其他两个服务器
source /usr/local/gpdb/greenplum_path.sh
bin/gpssh-exkeys -f /usr/local/gpdb/conf/seg_hosts
# 显示格式为
=> cd /usr/local
[xmscczw-ecs-ggaq-mpp-0001]
[xmscczw-ecs-ggaq-mpp-0002]
# 并执行以下命令
groupadd gpadmin # 用户组gpadmin
useradd -g gpadmin gpadmin # 创建用户名gpadmin
passwd gpadmin gpadmin # 设置用户密码
chown -R gpadmin:gpadmin /usr/local/gpdb/ # 设置安装目录文件
# gpadmin用户配置
su gpadmin
# 在配置文件 ~/.bashrc 、~/.bash_profile 中分别都添加以下内容:
# --------------------------------------------------------------
source /usr/local/gpdb/greenplum_path.sh
export MASTER_DATA_DIRECTORY=/data/greenplum/data/master/gpseg-1
export LD_LIBRARY_PATH=/usr/local/lib/lib
# --------------------------------------------------------------
# 使两个文件生效
source ~/.bashrc
source ~/.bash_profile
## 执行初始化
-gpadmin 用户在master节点执行
gpinitsystem -c /usr/local/gpdb/docs/cli_help/gpconfigs/initgp_config -h conf/seg_hosts -s xmscczw-ecs-ggaq-mpp-0001
# gpinitsystem命令参数解释:
# -c:指定初始化文件。
# -h:指定segment主机文件。
# -s:指定standby主机,创建standby节点。
# 查看配置正确,确认是否执行?
Continue with Greenplum creation Yy|Nn (default=N):
Y
# 注:如果报错,找不到xxx.so,可以sourcegreenplum_path.sh
---系统登录初始化设置
-账号、密码、登录
su gpadmin
/* 进入命令端,psql修改数据库密码 */
bin/psql -d gp_sydb
gpdb=# alter user gpadmin with password 'gpadmin'; //设置gpadmin账号密码为gpadmin
gpdb=# \q //退出命令
/* 远程登陆 */
bin/psql -p 5432 -d gp_sydb
/* 查询当前版本 */
select * from version();
# 设置监听IP和Port
vim ${MASTER_DATA_DIRECTORY}/postgresql.conf
例如:vim /data/greenplum/data/master/gpseg-1/postgresql.conf
# 设置监听IP (* 生产环境慎用)
listen_addresses = '${ host ip address } '
port = 5432
#### 设置数据库白名单
vim ${MASTER_DATA_DIRECTORY}/pg_hba.conf
# 增加如下一条记录,允许用户密码模式和可以登陆的IP地址范围; 注:设置完这个,建议再重新设置依稀账号密码
#TYPE DATABASE USER CIDR-ADDRESS METHOD
host all gpadmin 0.0.0.0/0 md5
# 测试登陆 root/gpadmin都可
psql -p 5432 -h 172.20.6.15 -U gpadmin -d testgpdb
例如:bin/psql -p 5432 -h xmscczw-ecs-ggaq-mpp-0003 -U gpadmin -d gp_sydb
# 数据库连接异常
su gpadmin
gpstop
Y
vim vim /data/greenplum/data/master/gpseg-1/pg_hba.conf # 在master、standby节点分别执行
# 添加
host all gpadmin 10.8.31.116/32 trust
host all all 10.8.31.27/32 trust
host all all 10.10.4.79/32 trust
gpstart # 在master节点gpadmin用户执行
## 启动关闭命令
**在一个Greenplum数据库管理系统中,所有主机上的数据库实例(Master和所有的Segment)一起被启动或者停止,启停操作统一由Master实例发起,它们步调一致,在外界看来是一个完整的数据库管理系统。**
由于一个Greenplum数据库系统分布在很多机器上,启动和停止一个Greenplum数据库系统的过程与普通PostgreSQL数据库的启动和停止过程不同。
分别使用**gpstart** 和 **gpstop** 工具来启动和停止Greenplum数据库。这些工具位于Greenplum数据库Master主机的$GPHOME/bin 目录下。
Important: 不要采用kill命令来直接杀掉任何后台Postgres进程。 可以使用数据库内命pg_cancel_backend()来完成此操作。
采用 kill -9 或 kill -11 可能引发数据库损坏并且妨碍根据目前数据库的表现进行问题根源分析。
以下命令需要切换到gpadmin账号执行**
su gpadmin
-启动GreenPlum
gpstart
-只启动主节点
gpstart -m
-停止GreenPlum
gpstop
-只停止主节点
gpstop -m
-快速停止GP服务
gpstop -M fast
-停止某台机器上的所有从节点,比如sdw1
gpstop --host sdw1
-重启GreenPlum
gpstop -r
-重载加载配置文件
当GP服务在运行的时候去修改主节点上pg_hba.conf或者postgresql.conf 文件,没有必要去重启GP服务,只需要通过gpstop -u去重新加载配置文件即可,
当然有些涉及到GP的配置还是要去重启服务的
gpstop -u
性能调优
内存配置
参考:https://cloud.tencent.com/developer/article/1447227
## GP常用命令
#### cmd命令
pg_ctl --version:查看pgsl版本
pg_ctl -D /xx/pgdata start:启动pgsl数据库
```
注:必须在环境变量中设置了PGDATA后才能省略-D参数 ,可以参照这篇论文PostgreSQL环境变量与psql命令的替代作用,但是里面没有讲PGDATA目录的位置
```
psql -h Server -p Port -U Username DatabaseName:连接数据库,例如:psql -h Serve
r -p Port -U Username DatabaseName
# postgre命令
\l:列出所有的数据库;
\c DatabaseName:连接数据库;
\dt:连接进入到某个数据库后,使用此命令查看数据库中的所有表;
\d TableName:查看某个表的描述,此命令可以用来查看某个表中的列元素和相应的数据类型;
\d+ tableName:查看指定表的基本情况
\e:打开psql内置的文本编辑器,可以方便的编写脚本。这个编辑器使用了Vim环境,用这个Vim文本编辑器编写SQL脚本会很方便,保存之后退出,就能自动运行刚才在编辑器中保存的SQL命令,并返回结果;如果需要对刚执行的SQL命令进行修改,可以再次使用\e打开编辑器,里面的内容仍然是上一次保存的文本;
\q:退出psql。
# SQL语句
# 创建,删除,修改数据库
create database StudentManagement;
# 创建
create table student(
Sno char(10) constraint Sno_pk primary key,
Sname char(20) unique,
Ssex char(2),
Sage smallint
--Sdept char(20)
);
# 删除
drop table student;
# 修改表
alter table student add column Sdept char(20);
# 自增
--SERIAL代表自增,默认从1开始增加,每次自增1。
create table CREATETASK_CHKID_N(
id SERIAL PRIMARY KEY,
chk_id TEXT,
n INTEGER
);
-删除表
drop table REL_CROSS_NODE;
-清空表
delete from [表名]
TRUNCATE TABLE [表名]
- 注:SQL命令需要加“;”,PostegreSQL命令不需要加
select count(*) from pg_stat_user_tables ;
-查询表
select count(*) from pg_stat_user_tables;
# 注意点
-内存增加为16G,默认8G
gpconfig -c gp_vmem_protect_limit -m 16384 -v 16384
-查询内存
gpconfig -s gp_vmem_protect_limit
-查看共享内存
ipcs -m
-释放共享内存
ipcrm -m 5210112(shmid)