Greenplum是一个关系型数据库集群,它是由数个独立的数据库服务组成的逻辑数据库。Greenplum使用的是Shared-Nothing架构,这个就能由很多歌数据节点(segment)和控制管理节点(Master Host)组成,其中每个物理节点上可以运行多个数据库。
Greenplum的架构如图所示:
其中每台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用户下的互信可以不用做。
- 配置网络(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
1.7 设置预读块的值
设置预读块的值为16384; 16384:数据仓库的最大特点是用于保存历史数据,存在大量的数据操作,包括增删改查,当设置的块越大时读取性能越高;16384是greenplum数据库要求的最低要求。
先通过df –h查看数据库磁盘挂载情况,通过fsisk –l进行查看到底有多少的磁盘和磁盘分区
然后再对磁盘进行设置:
/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.
2 下载并上传greenplum安装包
2.1 下载gp5.15.1版本的安装包
下载地址:https://network.pivotal.io/products/pivotal-gpdb#/releases/253113
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一致。
这块的安装路径需要自己输入一个目录作为gp的安装路径。默认路径是:
/usr/local/ greenplum-db-5.15.1
安装完之后,目录如下,initgp_config,hostlist,seglist是后面配置的。
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这个环境变量脚本,使其生效。
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/
然后利用gpscp命令将这个文件复制到一台机器上
gpscp -f ./greenplum-db-5.15.1/hostlist gp5.15.1.tar =:/usr/local/greenplum
使用gpssh命令批量解压各个节点的gp安装文件。
然后在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
MASTER_DATA_DIRECTORY参数是MASTER数据库实例的数据目录
将PostgreSQL实例的端口和默认登陆的数据库名称设置在/etc/profile中,直接就可以使用psql就可以登陆到EDW数据库中。
配置完之后,然后source下配置的信息:
source /etc/profile
3.10 初始化数据库
使用gpinisystem脚本来初始化数据库
gpinitsystem -c initgp_config -s sdw3
最后成功截图:
3.11 修改gpadmin密码
然后可以通过psql命令进入到Greenplum数据库中进行gpadmin管理员用户密码的修改:
psql
alter role gpadmin password 'GpadenV@#0';