Greenplum是一个关系型数据库集群,它是由数个独立的数据库服务组成的逻辑数据库。Greenplum使用的是Shared-Nothing架构,这个就能由很多歌数据节点(segment)和控制管理节点(Master Host)组成,其中每个物理节点上可以运行多个数据库。

Android greendao 多个数据库 greenplum创建数据库_数据

 

Greenplum的架构如图所示:

Android greendao 多个数据库 greenplum创建数据库_数据库_02

 

其中每台Segment节点有多个Postgres数据库实例,每个节点相对独立。在典型的Shared-Nothing架构中,每一个节点的所有资源(CUP,内存,磁盘)都是独立的,每个节点都只有全部数据的一部分,也只能访问本节点的资源。

  本文第一部分简单讲解下Greenplum的数据库架构及简介。接下来我会详细讲解数据库安装的详细步骤。

一. 安装环境初始化

本次安装greenplum到四台CentOS 7.4主机上。

服务器信息和安装策略如下:

角色

节点IP地址

主机名

master

10.12.42.149

mdw1  

segment1

10.12.42.150

sdw1

segment2

10.12.42.151

sdw2

segment3和master standby

10.12.42.152

sdw3

 

 

 

 

1.1 创建数据库用户

先删除原有用户和组;
#groupdel gpadmin;
#userdel gpadmin;
创建新的用户和用户组
groupadd -g 530 gpadmin;
useradd -g 530 -u 530 -d /home/gpadmin  -s /bin/bash gpadmin对文件夹进行赋权,为新建用户创建密码
chown -R gpadmin:gpadmin /home/gpadmin/;
passwd gpadmin
Changing password for user gpadmin.
New UNIX password:
Retype new UNIX password

 

安装用户:gpadmin

密码:Gpad#@012

1.2 检查各节点防火墙是否关闭状态

在各个节点都查看防火墙是否关闭。在CentOS操作系统防火墙服务一般使用firewall。

查看firewall服务状态

systemctl status firewalld

 

 



# 开启



service firewalld start



# 重启



service firewalld restart



# 关闭



service firewalld stop



 

对于IPTABLES命令,关闭防火墙的方法为:

 永久性生效

开启:chkconfig iptables on

关闭:chkconfig iptables off

 

1.3 节点间建立互信(root用户下)

Gpadmin用户下的互信后面可以使用gpssh命令可以进行,现在只是打通各个节点之间在root用户下的节点互信,只是为了传输文件的方便起见,root用户下的互信可以不用做。

  1. 配置网络(hosts)

作为分布式的集群,每个节点都需要彼此通信,要在4个GP的节点都配置hosts文件。

Vi /etc/hosts

新增这几行

#BEGIN_GROUP_CUSTOMER
10.12.42.150  mdw1
10.12.42.151  sdw1
10.12.42.152  sdw2
10.12.42.149  sdw3

 

2.节点间建立互信:

具体步骤如下:

2.1 在各节点ssh-keygen生成RSA密钥和公钥

使用root用户登录,然后在集群中的4个节点上分别执行以下命令,生成公私钥:(每个节点都要操作)

ssh-keygen -q -t rsa  -N "" -f  ~/.ssh/id_rsa

2.2 将所有的公钥文件汇总到一个总的授权key文件中

在149节点上执行以下命令:

ssh 10.12.42.149  cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys;
ssh 10.12.42.150 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys;
ssh 10.12.42.151 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys;
ssh 10.12.42.152 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys;

然后就会在10.12.42.149这台机器上产生一个包含了所有节点公钥的文件authorized_keys。

2.3 出于安全性考虑,将这个授权key文件赋予600权限:

chmod  600 ~/.ssh/authorized_keys
2.4 将authorized_keys远程拷贝到其他几个节点:
 scp ~/.ssh/authorized_keys 10.12.42.150:~/.ssh
scp ~/.ssh/authorized_keys 10.12.42.151:~/.ssh
scp ~/.ssh/authorized_keys 10.12.42.152:~/.ssh

2.5 验证互信是否成功

 验证互信,各节点执行下面命令,能不输入密码显示时间,配置成功

ssh 10.12.42.149 date;ssh 10.12.42.150 date;ssh 10.12.42.151 date;ssh 10.12.42.152 date;

说明节点间互信已经建立成功。

1.4 关闭4个节点的selinux配置

Vi /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
#SELINUX=enforcing
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

1.5 修改各个节点共享内存、网络、信号量、用户限制等,修改/etc/sysctl.conf

# Controls whether core dumps will append the PID to the core filename.
# Useful for debugging multi-threaded applications.
kernel.core_uses_pid = 1
 
# Controls the use of TCP syncookies
net.ipv4.tcp_syncookies = 1
 
# Controls the default maxmimum size of a mesage queue
kernel.msgmnb = 65536
 
# Controls the maximum size of a message, in bytes
kernel.msgmax = 65536
 
# Controls the maximum shared segment size, in bytes
#kernel.shmmax = 68719476736
kernel.shmmax = 500000000
# Controls the maximum number of shared memory segments, in pages
#kernel.shmall = 4294967296
kernel.shmall = 4000000000
kernel.shmmni = 4096
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.conf.default.accept_source_route = 0
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.conf.all.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

 

修改后保存并执行sysctl -p 让内核参数生效。

 

1.6        在4个节点配置/etc/security/limits.conf文件

vi /etc/security/limits.conf

 

 

Android greendao 多个数据库 greenplum创建数据库_数据库_03

 

1.7      设置预读块的值

设置预读块的值为16384;  16384:数据仓库的最大特点是用于保存历史数据,存在大量的数据操作,包括增删改查,当设置的块越大时读取性能越高;16384是greenplum数据库要求的最低要求。

先通过df –h查看数据库磁盘挂载情况,通过fsisk –l进行查看到底有多少的磁盘和磁盘分区

 

Android greendao 多个数据库 greenplum创建数据库_数据库_04

Android greendao 多个数据库 greenplum创建数据库_root用户_05

 

 

然后再对磁盘进行设置:

/sbin/blockdev --setra 16384   /dev/vdb

 

1.8 设置操作系统用户的limit限制

vim  /etc/security/limits.d/20-nproc.conf

 

*          soft    nproc     40960

root       soft    nproc     unlimited

 

默认的除了root以外其他用户的最大进程数都现在为4096,这个对于数据用户来说太小了,可以把这个数值修改为40960.

 

Android greendao 多个数据库 greenplum创建数据库_root用户_06

 

 

2     下载并上传greenplum安装包

2.1 下载gp5.15.1版本的安装包

下载地址:https://network.pivotal.io/products/pivotal-gpdb#/releases/253113

 

Android greendao 多个数据库 greenplum创建数据库_数据库_07

 

2.2 上传gp安装包文件到master节点

将文件greenplum-db-5.15.1-rhel7-x86_64.zip 上传到/opt/greenplum目录下
执行解压命令:
Unzip greenplum-db-5.15.1-rhel7-x86_64.zip
生成两个文件:
greenplum-db-5.15.1-rhel7-x86_64.bin和greenplum-db-5.15.1-rhel7-x86_64.bin.sha256
3     安装GP

3.1  创建安装目录并进行授权

mkdir /opt/greenplum/ greenplum-db-5.15.1
chomod –R  777  /usr/local/ greenplum-db-5.15.1

3.2 安装greenplum

通过执行greenplum-db-5.15.1-rhel7-x86_64.bin进行数据库安装

./ greenplum-db-5.15.1-rhel7-x86_64.bin

 

以下截图是之前安装4.3.9.1的截图,步骤与5.15.1一致。

 

Android greendao 多个数据库 greenplum创建数据库_root用户_08

 

这块的安装路径需要自己输入一个目录作为gp的安装路径。默认路径是:

/usr/local/ greenplum-db-5.15.1

 

Android greendao 多个数据库 greenplum创建数据库_root用户_09

 

安装完之后,目录如下,initgp_config,hostlist,seglist是后面配置的。

 

Android greendao 多个数据库 greenplum创建数据库_数据_10

 

3.3 相关的文件说明

greenplum_path.sh:Greenplum数据库环境变量文件
GPDB-LICENSE.txt:Greenplum许可协议
bin:管理工具、客户端程序及服务程序
demo:示例程序
docs:帮助文档
etc:OpenSSL的配置示例
ext:一些GP工具使用的捆绑程序
inlcude:C头文件
lib:库文件
sbin:支持的或者内部的脚本和程序
share:共享文件

3.4 配置all_hosts和seg_hosts

我是把这两个文件放在了目录:

/usr/local/greenplum-db-5.15.1目录下
vim /usr/local/greenplum-db-5.15.1/all_hosts
文件内容如下:
mdw1
sdw1
sdw2
sdw3
vim /usr/local/greenplum-db-5.15.1/seg_hosts
内容如下:
sdw1
sdw2
sdw3

 

3.5 使用gpssh-exkeys打通所有服务器,实现gpadmin用户下的节点间的互信

Greenplum的环境变量已经在greenplum_path.sh中设置了,这里需要查看下这个变量是否正确,然后再source这个环境变量脚本,使其生效。

 

Android greendao 多个数据库 greenplum创建数据库_root用户_11

 

source greenplum_path.sh
  然后通过gp-exkeys命令打通节点:
 [gpadmin@mdw1 greenplum-db-5.15.1]$ gpssh-exkeys -f  /usr/local/greenplum-db-5.15.1 /all_hosts
[STEP 1 of 5] create local ID and authorize on local host
  ... /home/gpadmin/.ssh/id_rsa file exists ... key generation skipped
 
[STEP 2 of 5] keyscan all hosts and update known_hosts file
 
[STEP 3 of 5] authorize current user on remote hosts
  ... send to sdw1
  ... send to sdw2
  ... send to sdw3
 
[STEP 4 of 5] determine common authentication file content
 
[STEP 5 of 5] copy authentication files to all remote hosts
  ... finished key exchange with sdw1
  ... finished key exchange with sdw2
  ... finished key exchange with sdw3
 
[INFO] completed successfully

说明节点已经打通。然后下一步用gpssh再验证下gpadmin用户下互信是否成功。

3.6 使用gpssh命令批量操作

打通所有机器的通道后就可以使用gpssh对所有机器进行批量操作了。

[gpadmin@mdw1 greenplum-db-5.15.1]$ gpssh -f all_hosts
=> pwd
[  mndw1] /home/gpadmin
[sdw1] /home/gpadmin
[sdw2] /home/gpadmin
[sdw3] /home/gpadmin

3.7 将软件分发到每一台主机上

在MASTER节点上将GP软件打包,然后分发到其他数据节点

tar -cf gp5.15.1.tar greenplum-db-5.15.1/

 

Android greendao 多个数据库 greenplum创建数据库_数据_12

 

然后利用gpscp命令将这个文件复制到一台机器上

gpscp -f ./greenplum-db-5.15.1/hostlist  gp5.15.1.tar  =:/usr/local/greenplum

使用gpssh命令批量解压各个节点的gp安装文件。

 

Android greendao 多个数据库 greenplum创建数据库_root用户_13

 

然后在gpssh命令建立软连接

=> ln -s greenplum-db-5.15.1 greenplum-db

3.8 数据库目录的创建和规划

10.12.42.149作为MASTER节点,10.12.42.150,10.12.42.151,10.12.42.152作为数据库的数据节点。并且10.12.42.152作为MASTER的standby备节点。

各个节点的数据库目录情况如下:

10.12.42.149:
/data/master
10.12.42.150~10.12.42.151:
/data/primary
/data/mirror
 
10.12.42.152:
/data/primary
/data/mirror
/data/master

其中在151-152三个物理节点中,primary 作为primary数据库实例目录,mirror作为mirror实例数据库目录。

3.9 配置/etc/profile

新增下面几行配置到/etc/profile

 

source /usr/local/greenplum-db-5.15.1/greenplum_path.sh

export MASTER_DATA_DIRECTORY=/data/masterdata/gpseg-1

export PGPORT=5432

export PGDATABASE=EDW

 

Android greendao 多个数据库 greenplum创建数据库_数据_14

 

MASTER_DATA_DIRECTORY参数是MASTER数据库实例的数据目录

将PostgreSQL实例的端口和默认登陆的数据库名称设置在/etc/profile中,直接就可以使用psql就可以登陆到EDW数据库中。

配置完之后,然后source下配置的信息:

source /etc/profile

3.10      初始化数据库

使用gpinisystem脚本来初始化数据库

 gpinitsystem -c initgp_config  -s  sdw3

 

Android greendao 多个数据库 greenplum创建数据库_root用户_15

 

最后成功截图:

 

Android greendao 多个数据库 greenplum创建数据库_root用户_16

 

3.11      修改gpadmin密码

然后可以通过psql命令进入到Greenplum数据库中进行gpadmin管理员用户密码的修改:

psql
alter role gpadmin password 'GpadenV@#0';