VirtualBox安装greenplum

版本信息(安装环境)

  • 操作系统: macOS Mojave; Version: 10.14.2
  • 虚拟机:
    • VirtualBox: V5.2.22
    • Vagrant: V2.2.2

创建与启动虚拟机

使用vagrant创建与管理虚拟机

Vagrantfile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Vagrant.configure("2") do |config|
# 虚拟机系统版本
config.vm.box = "centos/7"
config.vm.box_version = "1804.02"

# 循环创建虚拟机
(1..3).each do |i|
config.vm.define "gppro#{i}" do |gppro|
gppro.vm.network "public_network", ip: "172.16.1.21#{i}"
gppro.vm.hostname = "gppro#{i}"
end
end

config.vm.provider "virtualbox" do |v|
v.memory = 2048
v.cpus = 1
end

end

启动虚拟机

在Vagrantfile文件所在目录下执行
1
$ vagrant up

查看启动状态

1
$ vagrant status

安装所需依赖与修改系统配置

系统配置

依赖安装(master和所有segment节点)

进入虚拟机

1
$ vagrant gppro1

所有虚拟机上在root用户下安装应用

1
2
$ su - // 进入root用户
[root@gppro1 ~]$ yum install net-tools ntp
  • net-tools : 网络管理
  • ntp : 网络时间协议,用于同步各个虚拟机的时间

修改ssh密码登录,允许密码登录(master和所有segment节点)

root用户下修改sshd_config文件

1
2
3
4
5
$ vi /etc/ssh/sshd_config

# PasswordAuthentication yes // 去掉 # 打开 PasswordAuthentication

$ systemctl restart sshd // 重启sshd 服务

修改安全策略(master和所有segment节点)

  • 禁用SELinux
1
2
3
4
$ sestatus // 查看SELinux状态
$ vi /etc/selinux/config // 打开配置文件

SELINUX=enforcing 改成 SELINUX=disabled
  • 修改后的状态(需要reboot):
1
2
3
$ sestatus

SELinux status: disabled

关闭防火墙

1
2
3
4
5

$ systemctl status firewalld //查看防火墙状态

$ systemctl stop firewalld.service // 关闭防火墙
$ systemctl disable firewalld.service // 禁止启动防火墙
  • reboot后查看状态:
1
2
3
4
5
6
$ systemctl status firewalld

firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)

修改内核参数

1
$ vi /etc/sysctl.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 指定内核所允许的最大共享内存段的大小
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.conf.default.accept_source_route = 0

# 表示开启TCP连接中TIME-WAIT Sockets的快速回收,默认为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 = 10000 65535
net.core.netdev_max_backlog = 10000
net.core.rmem_max = 2097152
net.core.wmem_max = 2097152
vm.overcommit_memory = 2

重启生效

修改件文件和进程读取数限制

root 用户下

1
$ vi /etc/security/limits.conf
1
2
3
4
5
6
# 任意一个用户可以打开的最大的文件数 * 代表所有
* soft nofile 65536
* hard nofile 65536
# 任意一个用户可以打开的最大的进程数 * 代表所有
* soft nproc 131072
* hard nproc 131072

: hard 是阀值,超过就会报错soft 是警告值

修改文件挂载方式

root 用户下

1
$ vi /etc/fstab
1
/dev/mapper/VolGroup00-LogVol00 /   xfs   defaults   0 0

defaults改为nodev,noatime,nobarrier,inode64

1
/dev/mapper/VolGroup00-LogVol00 /   xfs   nodev,noatime,nobarrier,inode64   0 0

修改预读数

root 用户下

1
2
# 查看 blockdev
$ blockdev --getra /dev/sda
1
2
# 临时修改,重启后失效
$ blockdev --setra 16384 /dev/sda
1
2
3
# 将修改命令写入/etc/rc.d/rc.local,否则重启后会失效
$ echo '/sbin/blockdev --setra 16384 /dev/sda' >> /etc/rc.d/rc.local
$ chmod u+x /etc/rc.d/rc.local

重启验证

调整I/O scheduler (I/O 调度器)

root 用户下

1
2
3
4
# 查看当前调度器状态
$ cat /sys/block/sda/queue/scheduler

[noop] deadline cfq

三种调度器简介:

  • noop: Noop调度器是一个非常特殊的调度器。它不会对特殊请求进行优先处理,它将全部的IO请求都放到一个FIFO队列中。同时,它还会对相似的请求进行合并。
  • deadline: Deadline调度器,会创建两个队列,一个读队列,一个写队列。并且每个IO请求都会有一个与其相关联的过期时间戳。
  • cfq: CFQ的全称是Complete Fairness Queueing。工作原理: 先创建一个IO请求队列,然后将要访问磁盘上相邻数据的请求放到一起,按照这种方式进行排序之后,再依次处理IO请求队列中的请求。

修改调度器为deadline

1
2
3
4
5
6
7
8
9
10
11
12
# 临时生效
$ echo deadline > /sys/block/sda/queue/scheduler

# 查看修改状态
$ cat /sys/block/sda/queue/scheduler

noop [deadline] cfq

# 永久生效
$ grubby --update-kernel=ALL --args="elevator=deadline"

# reboot 检查

关闭THP(transparent_hugepage)

root用户下

1
2
3
4
5
$ grubby --update-kernel=ALL --args="transparent_hugepage=never"

# 查看结果
$ cat /sys/kernel/mm/*transparent_hugepage/enabled
always madvise [never]

删除 IPC

root用户下

1
2
3
4
5
6
7
$ vi /etc/systemd/logind.conf

# 打开 RemoveIPC=no
RemoveIPC=no

# 重启服务
$ service systemd-logind restart
  • systemd-logind 是一个管理用户登录的系统服务。

GreenPlum 相关

所有节点上设置hosts

root用户下

1
2
3
4
5
$ vi /etc/hosts

172.16.1.211 gppro1
172.16.1.212 gppro2
172.16.1.213 gppro3

在master上创建gpadmin用户

root用户下

1
2
3
4
5
6
7
8
# 用户组添加pgadmin
$ groupadd gpadmin

# 添加pgadmin用户
$ useradd gpadmin -g gpadmin

# pgadmin用户设置密码,输入两遍密码确认
$ passwd gpadmin

在master上安装greenplums数据库

root用户下

1
2
# 运行安装包,安装在默认目录(也可自己定义)
$ bash greenplum-db-5.14.0-rhel7-x86_64.bin

注:

如果要在gpadmin用户下安装,那么需要先用gpadmin创建好安装目录,最好的选择是安装到gpadmin用户目录下。

root用户安装的话,修改文件权限

1
2
$ chown -R gpadmin /usr/local/greenplum*
$ chgrp -R gpadmin /usr/local/greenplum*

master上创建hostlist和seglist

gpadmin下创建

1
2
3
4
5
6
$ cd /home/gpadmin
$ mkdir conf
$ cd conf

$ touch hostlist
$ touch seglist

hostlist

1
2
3
gppro1
gppro2
gppro3

seglist

1
2
gppro2
gppro3

设置ssh免密登录(只在master上做)

root用户下

1
2
3
4
5
6
$ gpssh-exkeys -f /home/gpadmin/conf/hostlist

.
.
.
[INFO] completed successfully

通过gpseginstall在segment上数据库(在master机器上操作)

root用户下操作

1
2
3
4
5
6
$ gpseginstall -f /home/gpadmin/conf/seglist

.
.
.
[INFO] completed successfully

创建数据存储区(在master上操作)

root用户下

1
2
3
# 创建master机器目录
$ mkdir -p /data/master
$ chown gpadmin:gpadmin /data/master

创建所有节点目录

1
2
3
4
5
6
7
$ source /usr/local/greenplum-db/greenplum_path.sh

# 使用gpssh批量创建存储目录
$ gpssh -f /home/gpadmin/conf/seglist -e 'mkdir -p /data/primary'

# 批量修改segment节点的文件权限
$ gpssh -f /home/gpadmin/conf/seglist -e 'chown gpadmin:gpadmin /data/primary'

注: gpssh -f: 引用哪个文件 -e: 执行什么指令

ntp同步

root用户下

master节点上

1
2
3
4
$ vi /etc/ntp.conf

# 添加
server 202.108.6.95 #cn.ntp.org.cn

segment节点上

1
2
3
4
$ vi /etc/ntp.conf

# 添加
server gppro1 prefer

在master节点上

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ gpssh -f /home/gpadmin/conf/hostlist -v -e 'ntpd'

[WARN] Reference default values as $MASTER_DATA_DIRECTORY/gpssh.conf could not be found
Using delaybeforesend 0.05 and prompt_validation_timeout 1.0

[Reset ...]
[INFO] login gppro1
[INFO] login gppro2
[INFO] login gppro3
[gppro1] ntpd
[gppro2] ntpd
[gppro3] ntpd
[INFO] completed successfully

[Cleanup...]

# 所有节点重置ntp服务
$ gpssh -f /home/gpadmin/conf/hostlist -e 'systemctl disable chronyd.service'
$ gpssh -f /home/gpadmin/conf/hostlist -e 'systemctl enable ntpd.service'
$ gpssh -f /home/gpadmin/conf/hostlist -e 'systemctl start ntpd.service'

验证(master上操作)

1
$ gpcheck -f /home/gpadmin/conf/hostlist -m mdw

初始化greenplum(master节点上操作)

gpadmin用户下

1
$ su - gpadmin

准备gpinitsystem所需文件 gpinitsystem_config

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ cp /usr/local/greenplum-db/docs/cli_help/gpconfigs/gpinitsystem_config /home/gpadmin/conf/gpinitsystem_config

$ vi /home/gpadmin/conf/gpinitsystem_config

# 修改
declare -a DATA_DIRECTORY=(/data1/primary /data1/primary /data1/primary /data2/primary /data2/primary /data2/primary)

=>

declare -a DATA_DIRECTORY=(/data/primary)

------------

MASTER_HOSTNAME=mdw

=>

MASTER_HOSTNAME=gppro1

运行初始化命令

1
$ gpinitsystem -c /home/gpadmin/conf/gpinitsystem_config -h /home/gpadmin/conf/seglist

可以按照提示添加export

1
2
3
4
5
6
7
8
9
10
11
$ cd
$ vi .bashrc

# 添加
export MASTER_DATA_DIRECTORY=/data/master/gpseg-1

# 添加source,不用每次都source
source /usr/local/greenplum-db/greenplum_path.sh

# .bashrc 生效
$ source .bashrc

允许其他的ip访问greenplum

1
2
3
4
# 根据提示
$ vi /data/master/gpseg-1/pg_hba.conf

# 添加相应的ip规则

注:如果找不到gpinitsystem命令: source /usr/local/greenplum-db/greenplum_path.sh