Greeplum 系列(二) 安装部署

Greeplum 系列(二) 安装部署

本章将介绍如何快速安装部署 Greenplum,以及 Greenplum 的一些常用命令及工具。本章不会涉及硬件选型、操作系统参数讲解、机器性能测试等高级内容,这些会在 “第8章 Greenplum 线上环境部署” 中介绍。

2.1 软件安装及数据库初始化

下面先介绍如何搭建一个完整的 Greenplum 环境。在搭建环境之前,我们必须对 Greenplum 的架构有一定的了解,并且准备好安装部署的机器,机器硬件、操作系统的安装配置读者可自行完成。

2.1.1 Greenplum 架构

在安装数据库的时候,我们先要对 Greenplum 架构有一定的了解,这样可以对数据库的安装和使用起到一个指导性的作用。同时在搭建 Greenplum 环境的过程中,可以加深对 Grenplum 架构的理解。 Greenplum 总体架构构图如图 2-1 所示。

Greeplum 系列(二) 安装部署

下面介绍每个部件的主要功能,如表 2-1 所示。

表 2-1 Master 主机与 Segment 主机对比

Master 主机 Segment 主机
建立与客户端的会话连接和管理 业务数据的存储和存取
SQ L的解析并形成分布式的执行计划 执行由 Master分发的SQL语句
将生成好的执行计划分发到每个 Segment 上执行 对于 Master来说,每个 Segment都是对等的,负责对应数据的存储和计算
收集 Segment 的执行结果 每一台机器上可以配置一到多个 Segment
Master 不存储业务数据,只存储数据字典 由于每个 Segment 都是对等的,建议采用相同的机器配置
Master主机可以一主一备,分布在两台机器上 Segment 分 primary 和 mirror 两种,一般交错地存放在子节点上
为了提高性能,Master 最好单独占用一台机器 ...

通过图 2-2 可以看出 Master 与 Segment 的关系。

Greeplum 系列(二) 安装部署

Master 和 Segment 其实都是一个单独的 PostgreSQL 数据库。每一个都有自己单独的套元数据字典,在这里, Master 节点一般也叫主节点, Segment 也叫做数据节点。

Segment 节点与 Master 节点的通信,通过千兆(或万兆)网卡组成的内部连接(InterConnect),在同一台数据节点机器上可以放多个 Segment,不同的 Segment 节点会被赋予不同的端口,同时, Segment 之间也不断地进行着交互。为了实现高可用,每个 Segment 都有对应的备节点( Mirror Segment),分别存在于不同的机器上。

Client 一般只能与 Master 节点进行交互, Client 将 SQL 发给 Master,然后 Master 对 SQL 进行分析后,再将其分配给所有的 Segment 进行操作,并且将汇总结果返回给客户端。

2.1.2 环境搭建

1. 安装 Linux

Greenplun 没有 Windows 版本,只能安装在类 UNIX 的操作系统上。

2. Greenplum 集群规划

节点 IP 内存 硬盘
mdw 192.168.2.101 512M 8G
sdw1 192.168.2.102 512M 8G
sdw2 192.168.2.103 512M 8G

机器对应的 Master 和 Segment 如下分配:192.168.2.101 作为 Master 节点,192.168.2.102~103 作为 Segment 节点,每个机器上配置两个 Primary Segment 和两个 Mirror Segment;同时 192.168.2.103 作为 Master Standy 节点。通过图 2-3 的架构图可以清晰地知道我们所搭建的集群的概况。

4. 网络(hosts)

在确定机器配置的时候,要保证所有机器的网络都是通的,并且每台机器的防火墙都是关闭的,避免存在网络不通的问题。

在配置 /etc/hosts 时,习惯将 Master 机器叫做 mdw,将 Segment 机器叫做做 sdw,配置好后,使用 ping 命令确定所有 hostname 都是通的。

5. 创建用用户及用户组

创建 gpadmin 用户及用户组,将其作为安装 Greenplum 的操作系统用户。

# 删除原有的用户组及用户
groupdel gpadmin
userdel gpadmin # 添加 gpadmin 用户组和 gpadmin 用户
groupadd -g 530 gpadmin
useradd -g 530 -u 530 -m -d /home/gpadmin -s /bin/bash gpadmin # 对文件夹赋予权限,为 gpadmin 创建密码
chown -R gpadmin:gpadmin /home/gpadmin/
passwd gpadmin

2.1.3 Greenplum 系统设置

(1) 修改或添加 /etc/sysctl.conf

# for greeplumn
# 共享内存
xfs_mount_options = rw,noatime,inode64,allocsize=16m
kernel.shmmax = 500000000
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.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
vm.overcommit_memory = 2

(2) 配置 /etc/security/limits.conf 文件

# number of file 文件的软数量,表示读取文件的最小数
* soft nofile 65536
# number of file 文件的硬数量,表示读取文件的最大数
* hard nofile 65536
# number of process 线程数量
* soft nproc 131072
* hard nproc 131072

(3) 设置磁盘访问 I/O 调度策略

cat /sys/block/sda/queue/scheduler
echo deadline > /sys/block/sda/queue/scheduler
echo deadline > /sys/block/fd0/queue/scheduler
echo deadline > /sys/block/hdc/queue/scheduler

(4) 设置预读块的值为 16384

/sbin/blockdev --getra /dev/sda
/sbin/blockdev --setra 16384 /dev/sda
/sbin/blockdev --setra 16384 /dev/sda1
/sbin/blockdev --setra 16384 /dev/sda2
/sbin/blockdev --setra 16384 /dev/sda3

2.1.4 Greenplum 安装

Greenplum 下载地址: https://network.pivotal.io/products/pivotal-gpdb,选择 Database Server/Greenplum Data Computing Appliance Database Installer 下载。

注意:下载 Greenplum 前需要先注册帐号,如果还不能下载可以将国家设置为国外(如Australia),这里以 greenplum-db-appliance-4.3.9.0-build-1-RHEL5-x86_64.zip 为例。

(1) 解压

tar -zxvf greenplum-db-appliance-4.3.9.0-build-1-RHEL5-x86_64.zip

# 解压后的文件
greenplum-db-appliance-4.3.9.0-build-1-RHEL5-x86_64.bin

(2) 配置 hostfile 和 seg_hosts

配置 hostfile 文件,将所有的服务器名记录在里面。

vim hostfile

mdw
sdw1
sdw2

seg_hosts 只保存 segment 节点的 hostname

vim seg_hosts

sdw1
sdw2

(3) 执行 greenplum-db-appliance-4.3.9.0-build-1-RHEL5-x86_64.bin

./greenplum-db-appliance-4.3.9.0-build-1-RHEL5-x86_64.bin
# gpseginstall -f hostlist -u gpadmin -p gpadmin
======================================================================
Greenplum DB
Appliance Automated Installer
----------------------------------------------------------------------
Timestamp ......... : 2018年 05月 27日 星期日 21:17:41 CST
Product Installer.. : greenplum-db-appliance-4.3.9.0-build-1-RHEL5-x86_64.bin
Product Version ... : 4.3.9.0
Build Number ...... :
Install Dir ....... : /usr/local/GP-4.3.9.0
Install Log file .. : /home/gpadmin/install-270518-211741.log
====================================================================== Creating /usr/local/GP-4.3.9.0
======================================================================
Executing Post Appliance Installation Steps
====================================================================== Executing: source /usr/local/GP-4.3.9.0/greenplum_path.sh Executing: gpseginstall --file hostfile -c csv 2>&1 | tee -a /home/gpadmin/install-270518-211741.log
20180527:21:19:23:002348 gpseginstall:mdw:root-[INFO]:-Installation Info:
link_name greenplum-db
binary_path /usr/local/GP-4.3.9.0
binary_dir_location /usr/local
binary_dir_name GP-4.3.9.0
20180527:21:19:24:002348 gpseginstall:mdw:root-[INFO]:-check cluster password access
*** Enter password for mdw:
20180527:21:19:43:002348 gpseginstall:mdw:root-[INFO]:-de-duplicate hostnames
20180527:21:19:43:002348 gpseginstall:mdw:root-[INFO]:-master hostname: mdw
20180527:21:19:46:002348 gpseginstall:mdw:root-[INFO]:-chown -R gpadmin:gpadmin /usr/local/greenplum-db
20180527:21:19:46:002348 gpseginstall:mdw:root-[INFO]:-chown -R gpadmin:gpadmin /usr/local/GP-4.3.9.0
20180527:21:19:46:002348 gpseginstall:mdw:root-[INFO]:-rm -f /usr/local/GP-4.3.9.0.tar; rm -f /usr/local/GP-4.3.9.0.tar.gz
20180527:21:19:46:002348 gpseginstall:mdw:root-[INFO]:-cd /usr/local; tar cf GP-4.3.9.0.tar GP-4.3.9.0
20180527:21:20:31:002348 gpseginstall:mdw:root-[INFO]:-gzip /usr/local/GP-4.3.9.0.tar
20180527:21:21:17:002348 gpseginstall:mdw:root-[INFO]:-remote command: mkdir -p /usr/local
20180527:21:21:19:002348 gpseginstall:mdw:root-[INFO]:-remote command: rm -rf /usr/local/GP-4.3.9.0
20180527:21:21:21:002348 gpseginstall:mdw:root-[INFO]:-scp software to remote location
The authenticity of host 'sdw1 (192.168.2.111)' can't be established.
ECDSA key fingerprint is SHA256:zAKx3UqfrW3J3ecDEkD63Men1RpLv59ZDJyicvFvlag.
ECDSA key fingerprint is MD5:bd:66:a8:94:98:d5:0b:f3:bc:e9:5c:41:4c:ca:b3:d4.
Are you sure you want to continue connecting (yes/no)? The authenticity of host 'sdw2 (192.168.2.112)' can't be established.
ECDSA key fingerprint is SHA256:zAKx3UqfrW3J3ecDEkD63Men1RpLv59ZDJyicvFvlag.
ECDSA key fingerprint is MD5:bd:66:a8:94:98:d5:0b:f3:bc:e9:5c:41:4c:ca:b3:d4.
Are you sure you want to continue connecting (yes/no)? yes
root@sdw1's password: Please type 'yes' or 'no':
Please type 'yes' or 'no':
root@sdw2's password:
20180527:21:23:30:002348 gpseginstall:mdw:root-[INFO]:-remote command: gzip -f -d /usr/local/GP-4.3.9.0.tar.gz
20180527:21:27:00:002348 gpseginstall:mdw:root-[INFO]:-md5 check on remote location
20180527:21:27:26:002348 gpseginstall:mdw:root-[INFO]:-remote command: cd /usr/local; tar xf GP-4.3.9.0.tar
20180527:21:29:13:002348 gpseginstall:mdw:root-[INFO]:-remote command: rm -f /usr/local/GP-4.3.9.0.tar
20180527:21:29:25:002348 gpseginstall:mdw:root-[INFO]:-remote command: cd /usr/local; rm -f greenplum-db; ln -fs GP-4.3.9.0 greenplum-db
20180527:21:29:27:002348 gpseginstall:mdw:root-[INFO]:-remote command: chown -R gpadmin:gpadmin /usr/local/greenplum-db
20180527:21:29:29:002348 gpseginstall:mdw:root-[INFO]:-remote command: chown -R gpadmin:gpadmin /usr/local/GP-4.3.9.0
20180527:21:29:31:002348 gpseginstall:mdw:root-[INFO]:-rm -f /usr/local/GP-4.3.9.0.tar.gz
20180527:21:29:34:002348 gpseginstall:mdw:root-[INFO]:-version string on master: gpssh version 4.3.9.0 build 1
20180527:21:29:34:002348 gpseginstall:mdw:root-[INFO]:-remote command: . /usr/local/greenplum-db/./greenplum_path.sh; /usr/local/greenplum-db/./bin/gpssh --version
20180527:21:29:39:002348 gpseginstall:mdw:root-[INFO]:-remote command: . /usr/local/GP-4.3.9.0/greenplum_path.sh; /usr/local/GP-4.3.9.0/bin/gpssh --version
20180527:21:29:46:002348 gpseginstall:mdw:root-[INFO]:-SUCCESS -- Requested commands completed
======================================================================
Installation complete
======================================================================

安装结果 /usr/local/greenplum-db

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

2.1.5 Greenplum 初始化配置

(1) 获取环境变量

source /usr/local/greenplum-db/greenplum_path.sh
# 查看环境变量
env

(2) 验证安装

a) 切换到 gpadmin 用户并获取环境变量

su - gpadmin
source /usr/local/greenplum-db/greenplum_path.sh

b) 使用 gpssh 工具来测试无密码登录所有主机

gpssh-exkeys -f hostfile
gpssh -f hostfile -e ls -l $GPHOME # 在 hostfile 主机上批量执行 ls -l $GPHOME

c) 编辑 /home/gpadmin/.bashrc 文件

source /usr/local/greenplum-db/greenplum_path.sh
export MASTER_DATA_DIRECTORY=/data/mirror/gpseg-1
export PGDATABASE=test

(3) 创建存储区域

mkdir -p /data/master
mkdir -p /data/primary
mkdir -p /data/mirror
chown gpadmin:gpadmin /data/master
chown gpadmin:gpadmin /data/primary
chown gpadmin:gpadmin /data/mirror

a) 创建 Master 数据存储区域

mkdir -p /data/master
chown gpadmin:gpadmin /data/master

b) 创建一个包含所有 segment 主机的文件 seg_hosts 文件内容

sdw1
sdw2

c) 使用 gpssh 工具在所有 segment 主机上创建主数据和镜像数据目录

gpssh -f seg_hosts -e 'mkdir -p /data/primary'
gpssh -f seg_hosts -e 'mkdir -p /data/mirror'
gpssh -f seg_hosts -e 'chown gpadmin:gpadmin /data/primary'
gpssh -f seg_hosts -e 'chown gpadmin:gpadmin /data/mirror'

(4) 同步系统时间

a) 在 Master 主机上编辑 /etc/ntp.conf 来设置如下内容:

server 127.127.1.0

b) 在 Segment 主机上编辑 /etc/ntp.conf

server mdw

c) 在 Master 主机上,通过 NTP 守护进程同步系统时钟

gpssh -f hostfile -v -e 'ntpd'

(5) 验证操作系统设置

gpcheck -f hostfile -m mdw

(6) 创建 Greenplun 数据库配置文件

a) 以 gpadmin 用户登录

su - gpadmin

b) 从模板中拷贝一份 gpinitsystem_config 文件

cp $GPHOME/docs/cli_help/gpconfigs/gpinitsystem_config /home/gpadmin/

c) 必须配置的参数

# 数据库的代号
ARRAY_NAME="EMC Greenplum DW"
# segment 的名称前缀
SEG_PREFIX=gpseg
# Primary Segment 起始的端口号
PORT_BASE=40000
# 指定 Primary Segment 的数据目录
declare -a DATA_DIRECTORY=(/data1/primary /data1/primary /data1/primary /data2/primary /data2/primary /data2/primary)
# Master 所在机器的 Hostname
MASTER_HOSTNAME=mdw
# 指定 Master 的数据目录
MASTER_DIRECTORY=/data/master
# Master 的端口
MASTER_PORT=5432
# 指定 Bash 的版本
TRUSTED_SHELL=ssh
CHECK_POINT_SEGMENTS=8
# 字符集
ENCODING=UNICODE

d) 可选配置的参数,针对镜像的配置

# Mirror Segment 起始的端口号
MIRROR_PORT_BASE=50000
# Mirror Segment 主备同步的起始端口号
REPLICATION_PORT_BASE=41000
# Primary Segment 主备同步的起始端口号
MIRROR_REPLICATION_PORT_BASE=51000
# Mirror Segment 数据目录
declare -a MIRROR_DATA_DIRECTORY=(/data1/mirror /data1/mirror /data1/mirror /data2/mirror /data2/mirror /data2/mirror)

(7) 初始化数据库

a) 运行初始化工具

cp /tmp/greenplum/seg_hosts
gpinitsystem -c gpinitsystem_config -h seg_hosts # 成功后提示如下
Greenplum Database instance successfully created

b) 设置环境变量

添加“export MASTER_DATA_DIRECTORY=/data/master/gpseg-1"到 ~/bashrc 文件尾,并同步到其他节点。

scp .bashrc sdw1:`pwd`
scp .bashrc sdw2:`pwd`

(8) 启动和停止数据库

a) 启动数据库

gpstart -a

b) 关闭数据库

gpstop

踩过的坑

问题1:执行 gpinitsystem 时报错:-Failed Update port number to 40000

20180528:20:44:58:gpinitsystem:mdw:gpadmin-[FATAL][0]:-Failed Update port number to 40000

解决方案:

主要原因是它是 Greenplum 用 ed 编辑器(很古老的 linux 编辑器)来操作文件的,需要先在所有节点安装才行

yum install -y ed

问题2:执行 gpstart -a 时报错:-Failed to retrieve rolname. Script Exiting!

20180528:20:44:58:gpinitsystem:mdw:gpadmin-[FATAL]:-Failed to retrieve rolname. Script Exiting!

解决方案:

防火墙没关,关闭防火墙后重启 gpstart -a

service firewalld stop
systemctl disable firewalld

问题3:执行 yum 时报错:ImportError: No module named site

[gpadmin@mdw ~]$ yum
ImportError: No module named site

原因:切换到 gpadmin 的环境后,会修改 PYTHONHOME=/usr/local/greenplum-db/./ext/python 的值,在 root 帐户下执行 yum 即可。

问题4:启动 gpstart -a 时报错:PID file "/data/master/gpseg-1/postmaster.pid" does not exist

pg_hba.conf 配置错误


每天用心记录一点点。内容也许不重要,但习惯很重要!

上一篇:【LeetCode】513. Find Bottom Left Tree Value 解题报告(Python & C++ & Java)


下一篇:LeetCode题解之Diameter of Binary Tree