Greeplum 系列(二) 安装部署
本章将介绍如何快速安装部署 Greenplum,以及 Greenplum 的一些常用命令及工具。本章不会涉及硬件选型、操作系统参数讲解、机器性能测试等高级内容,这些会在 “第8章 Greenplum 线上环境部署” 中介绍。
2.1 软件安装及数据库初始化
下面先介绍如何搭建一个完整的 Greenplum 环境。在搭建环境之前,我们必须对 Greenplum 的架构有一定的了解,并且准备好安装部署的机器,机器硬件、操作系统的安装配置读者可自行完成。
2.1.1 Greenplum 架构
在安装数据库的时候,我们先要对 Greenplum 架构有一定的了解,这样可以对数据库的安装和使用起到一个指导性的作用。同时在搭建 Greenplum 环境的过程中,可以加深对 Grenplum 架构的理解。 Greenplum 总体架构构图如图 2-1 所示。
下面介绍每个部件的主要功能,如表 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 的关系。
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 配置错误
每天用心记录一点点。内容也许不重要,但习惯很重要!