# GreenPlum集群搭建
文档参考自
- https://blog.csdn.net/ethnicitybeta/article/details/122596036
- https://blog.csdn.net/qq_29120661/article/details/120976844
# 环境说明
- CentOS7.9
cat /etc/redhat-release
# CentOS Linux release 7.9.2009 (Core)
1
2
2
greenplum-db-6.4.0-rhel7-x86_64.rpm
下载链接:http://vague.jmzhao.vip/libs/greenplum/greenplum-db-6.4.0-rhel7-x86_64.rpm
# 集群介绍
使用1个master,n个segment的集群
# master
196.168.1.188
# segment1
196.168.1.189
# segment2
196.168.1.190
1
2
3
4
5
6
2
3
4
5
6
# 修改主机名
# sdw1为主机名
hostnamectl set-hostname sdw1
# 重启生效
reboot
1
2
3
4
2
3
4
# 关闭SELinux
# 查看状态
sestatus
# 如果不是SELinuxstatus: disabled,则需要手动关闭
vi /etc/selinux/config
# 修改下列字段
SELINUX=disabled
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 关闭防火墙
# 查看防火墙状态
#如果是iptables,则执行
service iptables status
# 关闭防火墙
service iptables stop
# 永久关闭防火墙
chkconfig iptables off
# 如果是firewalld,则执行
systemctl status firewalld
# 关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 配置hosts
每一台都要配置
vi /etc/hosts
192.168.1.188 mdw1
192.168.1.189 sdw1
192.168.1.190 sdw2
1
2
3
4
5
2
3
4
5
# 修改系统内核文件
vi /etc/sysctl.conf
kernel.shmmni = 4096
kernel.shmall = 4000000000
kernel.sem = 250 512000 100 2048
kernel.sysrq = 1
kernel.core_uses_pid = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.msgmni = 2048
net.ipv4.tcp_syncookies = 1
net.ipv4.ip_forward = 0
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.conf.defalut.arp_filter = 1
net.ipv4.ip_local_port_range = 1025 65535
net.core.netdev_max_backlog = 10000
net.core.rmem_max = 2097152
net.core.wmem_max = 2097152
vm.overcommit_memory = 2 ##
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 让配置生效
sysctl -p
1
# 配置资源限制参数
vi /etc/security/limits.conf
* soft nofile 524288
* hard nofile 524288
* soft nproc 131072
* hard nproc 131072
1
2
3
4
5
6
2
3
4
5
6
# 复制主节点配置到所有子节点
scp /etc/sysctl.conf sdw1:/etc
scp /etc/security/limits.d/90-nproc.conf sdw1:/etc/security/limits.d
scp /etc/selinux/config sdw1:/etc/selinux
1
2
3
2
3
# 创建gpadmin用户
所有节点
groupadd -g 530 gpadmin
useradd -g 530 -u 530 -m -d /home/gpadmin -s /bin/bash gpadmin
chown -R gpadmin:gpadmin /home/gpadmin
echo "gpadmin" | passwd --stdin gpadmin
1
2
3
4
2
3
4
# 安装Greenplum DB
# 在Master节点上安装
执行rpm安装命令
rpm -ivh greenplum-db-6.4.0-rhel7-x86_64.rpm
1
默认的安装路径是/usr/local,然后需要修改该路径gpadmin操作权限
chown -R gpadmin:gpadmin /usr/local
1
# 创建配置集群hostlist文件
创建一个hostlist,包含所有节点主机名
# 切换用户
su gpadmin
# 创建文件夹及文件
mkdir -p /home/gpadmin/conf
vi /home/gpadmin/conf/hostlist
# 加上下面的信息
mdw1
sdw1
sdw2
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
创建一个seg_hosts ,包含所有的Segment Host的主机名
vi /home/gpadmin/conf/seg_hosts
# 加上下面的信息
mdw1
sdw1
sdw2
1
2
3
4
5
2
3
4
5
# 配置ssh免密连接
只在mdw上执行
# 切换到dbadmin执行下列操作
su gpadmin
# 应用环境变量
source /usr/local/greenplum-db/greenplum_path.sh
# 使用ssh-copy-id命令将gpadmin公钥分发到其他服务器上实现免密登录
ssh-copy-id mdw1
ssh-copy-id sdw1
ssh-copy-id sdw2
gpssh-exkeys -f /home/gpadmin/conf/hostlist
# 测试免密连接是否成功
ssh sdw1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 在Segment节点上安装
在各个节点进行文件夹赋权
chown -R gpadmin:gpadmin /usr/local
chown -R gpadmin:gpadmin /opt
1
2
2
在主节点打包安装包并复制到各个子节点
cd /usr/local/
# 打包
tar -cf gp.tar greenplum-db-6.4.0/
gpscp -f /home/gpadmin/conf/seg_hosts gp.tar =:/usr/local/
1
2
3
4
2
3
4
如果没有意外,就批量复制成功了,可以去子节点的相应文件夹查看,之后要将tar包解压,现在我们将采用对子节点使用批量解压操作
source /usr/local/greenplum-db/greenplum_path.sh
gpssh -f /home/gpadmin/conf/seg_hosts
=> cd /usr/local
[sdw1]
[sdw2]
=> tar -xf gp.tar
[sdw1]
[sdw2]
# 建立软链接
=> ln -s ./greenplum-db-5.0.0 greenplum-db
[sdw1]
[sdw2]
=> ll(可以使用ll查看一下是否已经安装成功)
=>exit(退出)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
这样就完成了所有节点的安装
# 初始化数据库
# 创建资源目录
source /usr/local/greenplum-db/greenplum_path.sh
# 统一处理所有节点
gpssh -f /home/gpadmin/conf/hostlist
# 创建资源目录 /opt/greenplum/data下一系列目录(生产目录个数可根据需求生成)
=> mkdir -p /opt/greenplum/data/master
=> mkdir -p /opt/greenplum/data/primary
=> mkdir -p /opt/greenplum/data/mirror
=> mkdir -p /opt/greenplum/data2/primary
=> mkdir -p /opt/greenplum/data2/mirror
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 环境变量配置
# 在主节点进行环境变量配置
vi /home/gpadmin/.bash_profile
# 在最后添加
source /usr/local/greenplum-db/greenplum_path.sh
export MASTER_DATA_DIRECTORY=/opt/greenplum/data/master/gpseg-1
export GPPORT=5432
export PGDATABASE=gp_sydb
1
2
3
4
5
6
2
3
4
5
6
然后依次复制到各个子节点
scp /home/gpadmin/.bash_profile sdw1:/home/gpadmin/
scp /home/gpadmin/.bash_profile sdw2:/home/gpadmin/
1
2
2
让环境变量生效
source .bash_profile
1
# 初始化前检查连通性
# 检查节点与节点之间文件读取
cd /usr/local/greenplum-db/bin
gpcheckperf -f /home/gpadmin/conf/hostlist -r N -d /tmp
====================
== RESULT 2022-09-05T10:23:38.196867
====================
Netperf bisection bandwidth test
mdw1 -> sdw1 = 451.680000
sdw2 -> mdw1 = 264.530000
sdw1 -> mdw1 = 268.310000
mdw1 -> sdw2 = 458.430000
Summary:
sum = 1442.95 MB/sec
min = 264.53 MB/sec
max = 458.43 MB/sec
avg = 360.74 MB/sec
median = 451.68 MB/sec
# 出现以上内容证明各个节点已经可以连通
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 执行初始化
初始化 Greenplum 配置文件模板都在 /usr/local/greenplum-db/docs/cli_help/gpconfigs目录下,gpinitsystem_config是初始化 Greenplum 的模板,此模板中 Mirror Segment的配置都被注释;创建一个副本,对其以下配置进行修改
cd /usr/local/greenplum-db/docs/cli_help/gpconfigs
cp gpinitsystem_config initgp_config
vi initgp_config
# 以下为文本要修改的属性字段配置
# 资源目录为前面创建的资源目录,配置几次资源目录就是每个子节点有几个实例(推荐4-8个,这里配置了6个,primary与mirror文件夹个数对应)
declare -a DATA_DIRECTORY=(/opt/greenplum/data/primary /opt/greenplum/data/primary /opt/greenplum/data/primary /opt/greenplum/data2/primary /opt/greenplum/data2/primary /opt/greenplum/data2/primary)
declare -a MIRROR_DATA_DIRECTORY=(/opt/greenplum/data/mirror /opt/greenplum/data/mirror /opt/greenplum/data/mirror /opt/greenplum/data2/mirror /opt/greenplum/data2/mirror /opt/greenplum/data2/mirror)
# 配置的初始化数据库名称
ARRAY_NAME=”gp_sydb”
# 主节点名称
MASTER_HOSTNAME=mdw1
# 资源目录为前面创建的资源目录
MASTER_DIRECTORY=/opt/greenplum/data/master
# 与前面配置一样
MASTER_DATA_DIRECTORY=/opt/greenplum/data/master/gpseg-1
# 前面章节配置的初始化数据库名称
DATABASE_NAME=gp_sydb
# 前面章节创建的文件
MACHINE_LIST_FILE=/home/gpadmin/conf/seg_hosts
# 执行初始化
gpinitsystem -c initgp_config
# 若初始化失败,需要删除/opt下的数据资源目录重新初始化;若初始化成功,那恭喜你已经安装成功了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 常用命令
# 查看mirror的状态
gpstate -e
# 查看standby master的状态
gpstate -f
# 查看整个GP群集的状态
gpstate -s
# 查看GP的版本
gpstate -i
# 停止
gpstop -M fast
# 启动
gpstart -a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 允许客户端连接
在mdw上使用gpadmin用户执行
psql
# 如果前面的配置正确,则会免密登录到Greenplum数据库
# 查询数据库
\l
# 修改一下gpadmin的密码
alter role gpadmin with password 'gpadmin';
# 退出数据库
\q
# 在mdw机器上使用gpadmin用户执行
vi $MASTER_DATA_DIRECTORY/pg_hba.conf
# ADDRESS可以根据实际情况修改成对应的ip段
# 连接方式 连接的数据库 连接的用户 连接的主机IP 认证方式
host all gpadmin all md5
# 执行命令使配置生效
gpstop -u
# 可以使用外部客户端工具或开发平台数据源测试是否配置成功
# 修改Linux系统的内存分配策略 vm.overcommit_memory
# 编辑
vi /etc/sysctl.conf
# 修改
vm.overcommit_memory=1
# 然后 使配置生效
sysctl -p
# 0:表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
# 1:表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
# 2:表示内核允许分配超过所有物理内存和交换空间总和的内存
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35