Greenplum集群建设 您所在的位置:网站首页 greenplum集群搭建 Greenplum集群建设

Greenplum集群建设

2024-07-16 11:15| 来源: 网络整理| 查看: 265

最近两周研究了Greenplum集群搭建,在docker环境下实现了一个3节点的Greenplum集群实例。现在把建设的具体过程写出来供读者参考。

Greenplum是一款分布式数据库系统,由于其在并行数据处理上的优势而变得越来越流行。在本例中笔者在一台机器上试图实现一个基于docker的Greenplum集群。笔者一共设置了三个Grennplum节点,一个主节点用于集群控制,两个从节点用于存储数据,其中一个从节点作为主节点的热备份,操作系统采用ubuntu16.04。

主节点Greenplum源代码编译安装

首先进入宿主机确定docker的守护进程在运行,然后先创建一个docker子网,将所有的Greenplum容器都纳入到这个子网中,使节点内部能够实现互联。

docker network create gp_network

在宿主机上启动三个docker容器,分别代表三个Greenplum的节点。

#主节点容器创建并运行

docker run --net=gp_network --name ubuntu_gp_master -h master -it --privileged -p 5432:5432 -p 8023:8023 -p 8022:22 -v $(pwd)/volumes:/volumes_file ubuntu:16.04 /bin/bash

#从节点创建并运行

docker run --net=gp_network --name ubuntu_gp_s1 -h s1 -it --privileged ubuntu:16.04 /bin/bash

docker run --net=gp_network --name ubuntu_gp_s2 -h s2 -it --privileged ubuntu:16.04 /bin/bash

创建容器并运行

在这里,可以创建多个终端连接这些容器,实现操作上的并行。容器创建好之后首先在主节点安装Greenplum并配置集群信息。在本例中,笔者采用Greenplum源代码编译的安装方式。在实验之前,笔者就下载好了gp的源代码,以及一些必要的依赖包。从上面的代码清单中可以看到:创建主节点容器时挂载了一个卷到容器中,这个卷中就包含了gp编译安装所需的全部软件依赖。具体来说一共是四个软件,第一个是cmake 软件包,第二个是gporca ,第三个是gp-xerces ,最后一个是Greenplum的源代码 。

在主节点和从节点中首先要对软件源进行更新,安装一些必需的软件和python模块,具体来说需要安装以下这些软件和模块:

apt-get install -y git-core gcc g++ ccache libreadline-dev bison flex zlib1g-dev openssl libssl-dev libpam-dev libcurl4-openssl-dev libbz2-dev python-dev ssh python-pip unzip wget libffi-dev sudo vim net-tools inetutils-ping lsb

pip install psutil lockfile paramiko setuptools

更新软件源

将上面提到的四个软件的源代码包解压统一放在一处以便进行编译和安装。首先安装cmake,安装代码如下所示:

#进入cmake的文件夹中

./bootstrap

make -j4

sudo make install

cmake --version

主节点上安装cmake

安装完成后应该有如下显示:

cmake安装完成

cmake安装完成后就可以安装gporca了,gporca是Greenplum的一个优化器。在Greenplum的安装中这并不是必须的,但笔者还是在这里将它的安装步骤罗列出来供读者参考。安装gporca之前首先要安装gporca的依赖环境,这一点可以参照Github上gporca的依赖安装步骤来做,在这里给出Github上的指引链接 供读者参考。

在安装依赖环境之前,笔者推荐首先配置一个环境变量DEBIAN_FRONTEND=noninteractive。这个环境变量的配置可以让我们省去一个不大不小又无关痛痒的麻烦。

主节点上增加一个环境变量

随后我们让这个环境变量生效。

source /etc/profile

设置了环境变量以后还有一个可选的操作,这个操作是Greenplum源码中提供的一个批处理操作,用于安装一些必要的软件以及配置环境。笔者推荐读者执行这一步。

./gpdb-master/README.ubuntu.bash

主节点配置ubuntu并安装必要依赖

执行完成后,还需要确保ld.so.conf文件中拥有这样两条记录。

ld.so.conf中添加记录

保存退出后记得执行ldconfig命令使之生效,注意这条命令并没有输出。

接下来就要配置集群中ssh登录了,请在设置之前确保docker容器中的ssh服务是开启的。这一步既可以使用gp源代码中自带的批处理文件自动生成,也可以使用ssh-keygen来自动生成公钥。笔者推荐使用gp源代码中自带的批处理工具,因为这个工具不仅仅能生成秘钥还能生成gpadmin用户。在使用这个批处理文件的时候需要注意一个小点:需要在该批处理文件所在目录下创建一个gpdb_src目录,否则批处理文件执行会报错,这是由于批处理文件中有chown -R gpadmin:gpadmin gpdb_src这样一条命令,但是其所在文件夹中并没有gpdb_src这样一个目录,因此需要我们手动创建一个。

./gpdb-master/concourse/scripts/setup_gpadmin_user.bash

配置ssh并设置gpadmin

执行完成没有报错的话应该可以本机ssh免密码登录,效果如下图所示:

主节点免密码ssh登录

设置完成后还需要在/etc/sysctl.conf中添加一些集群的必要信息(所有节点都执行):

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

net.core.rmem_max = 2097152

net.core.wmem_max = 2097152

vm.overcommit_memory = 2

sysctl.conf中添加记录

在/etc/security/limits.conf中添加记录(所有节点都执行):

* soft nofile 65536

* hard nofile 65536

* soft nproc 131072

* hard nproc 131072

limits.conf文件配置

在/etc/selinux/config中配置信息。(所有节点都执行)

SELINUX=disabled

SELINUXTYPE=targeted

config中信息配置

在安装gporca之前要先安装gp-xerces,代码清单如下图所示:

cd ./gp-xerces

mkdir build && cd build

../configure --prefix=/usr/local

make

make install

安装gp-xerces

接下来,就要开始安装gporca。安装之前首先要安装Ninja:

#若执行了README.ubuntu.bash则跳过这一步

apt-get install ninja-build

进入gporca执行以下代码清单完成gporca的安装:

cd ./gporca

cmake -GNinja -H. -Bbuild

sudo ninja install -C build

安装gporca

安装完成若没有报错可以测试一下,代码清单如下图所示:

cd ./build

ctest -j7 --output-on-failure

主节点测试gporca

最后,就可以编译Greenplum源代码并且安装了,安装之前还需要再安装四个软件。代码清单如下:

#若执行了README.ubuntu.bash这一步可跳过

apt-get install -y libapr1-dev libevent-dev libperl-dev python2.7-dev libyaml-dev libxml2-dev libkrb5-dev

进入gp代码文件夹中,执行如下清单:

cd ./gpdb-master

./configure --with-perl --with-python --with-libxml --with-gssapi --prefix=/usr/local/gpdb

make -j8

make -j8 install

主节点配置gp 编译gp源代码并安装

安装完成后配置gp的环境变量:

source /usr/local/gpdb/greenplum_path.sh

到这一步,gp在主节点上的安装就已经完成了,接下来可以测试一下安装效果。但是在测试之前还有几个小步骤需要完成来保证测试成功。首先需要配置机器的编码,这是必要的,同时应该在所有节点上完成:

localedef -i en_US -f UTF-8 en_US.UTF-8

第二,可能需要在/usr/local/gpdb/greenplum_path.sh中做一点更改:在LD_LIBRARY_PATH后面添加/usr/local/lib路径。

greenplum_path.sh更改

第三,需要把gpdb-master的拥有者和拥有组都改为gpadmin。

chown -R gpadmin:gpadmin /gpdb-master

代码变更所有者

全部完成后,使用gpadmin用户登录,就可以进行测试了:

cd ./gpdb-master

make create-demo-cluster

主节点上gp测试 Greenplum集群构建

构建集群之前首先要在从节点上安装一些必要的软件,python模块,添加一些配置信息,以及配置编码。这些在上一节都已经完成了,不再赘述。

集群建设之前首先要更新每台机器上的hosts文件,确保集群中的任意两台机器是可以通过主机名ping通的。

测试集群连通性

在主节点的gpadmin用户目录下创建一个conf目录用于保存集群的配置信息等文件。

首先创建两个文件用于保存集群的主机信息和从节点信息:

su - gpadmin

cd /home/gpadmin

mkdir conf && cd conf

vi hostlist

master

s1

s2

:wq

vi seg_hosts

s1

s2

:wq

其次,在所有从节点上创建gpadmin用户:

groupadd -g 530 gpadmin

useradd -g 530 -u530 -m -d /home/gpadmin -s /bin/bash

gpadmin passwd gpadmin

从节点上添加gpadmin用户

现在可以进行ssh秘钥分发了,这一步完成了就可以实现集群中任意两台主机之间的免密码ssh登录,配置的代码清单如下:

gpssh-exkeys -f /home/gpadmin/conf/hostlist

集群中ssh秘钥分发

完成后可以测试一下从主节点ssh登录从节点,或者某一个从节点ssh登录某一个从节点。

主节点免密码登录s1和s2

接下来,需要在所有从节点上批量安装Greenplum。由于在主节点上的gp安装目录为/usr/local/gpdb,因此我们首先打包这个文件,并且打包/usr/local/lib目录。

postgres -V#这一步最好执行

tar -czvf /home/gpadmin/gpdb.tar /usr/local/gpdb

tar -czvf /home/gpadmin/lib.tar /usr/local/lib

将打包好的文件分发到所有集群的从节点中:

gpscp -f /home/gpadmin/conf/seg_hosts /home/gpadmin/gpdb.tar =:/home/gpadmin gpscp -f /home/gpadmin/conf/seg_hosts /home/gpadmin/lib.tar =:/home/gpadmin

在每个从节点中将这两个tar文件移动到/usr/local目录下解压,其中替换掉原来/usr/local目录下的lib目录。

进行到这一步就可以在集群中每一个节点上创建数据保存目录了,gp在这里为我们提供了集群批处理工具,让我们不用一台机器一台机器地配置。

gpssh -f /home/gpadmin/conf/hostlist

mkdir gpdata && cd gpdata#(创建数据存放主目录,并进入目录)

mkdir gpdatap1 gpdatap2 gpdatam1 gpdatam2 gpmaster

exit

主节点批量配置从节点

在所有节点上添加环境变量:

vi /etc/profile(主节点,从节点)

export DEBIAN_FRONTEND=noninteractive

source /usr/local/gpdb/greenplum_path.sh

export MASTER_DATA_DIRECTORY=/home/gpadmin/gpdata/gpmaster/gpseg-1

export PGPORT=5432

:wq

source /etc/profile

最后,在主节点上添加集群的配置信息:

cp /usr/local/gpdb/docs/cli_help/gpconfigs/gpinitsystem_config /home/gpadmin/conf

cd /home/gpadmin/conf vi gpinitsystem_config

# FILE NAME: gpinitsystem_config

ARRAY_NAME="Greenplum"

SEG_PREFIX=gpseg

PORT_BASE=40000

declare -a DATA_DIRECTORY=(/home/gpadmin/gpdata/gpdatap1 /home/gpadmin/gpdata/gpdatap2)

MASTER_HOSTNAME=master

MASTER_DIRECTORY=/home/gpadmin/gpdata/gpmaster

MASTER_PORT=5432

TRUSTED_SHELL=ssh

CHECK_POINT_SEGMENTS=8

ENCODING=UNICODE

MIRROR_PORT_BASE=50000

REPLICATION_PORT_BASE=41000

MIRROR_REPLICATION_PORT_BASE=51000

declare -a MIRROR_DATA_DIRECTORY=(/home/gpadmin/gpdata/gpdatam1 /home/gpadmin/gpdata/gpdatam2)

MACHINE_LIST_FILE=/home/gpadmin/conf/seg_hosts

完成之后,就可以执行配置信息了,若成功Greenplum会自动启动集群。在执行配置信息之前还需要完成一些小步骤来确保集群启动成功。首先在各个从节点上执行:

postgres -V

若上面的代码清单可以正常输出则说明没有问题,否则还需要进一步配置。最后,最好把所有从节点上的/usr/local/gpdb的所有者和所有组都设置成gpadmin,否则可能会出现权限问题。设置配置文件的权限:

chmod 644 /home/gpadmin/conf/gpinitsystem_config

到这一步就可以执行配置文件了。

#设置s1节点为第二主节点

gpinitsystem -s s1 -c /home/gpadmin/conf/gpinitsystem_config –a

主节点上配置集群并设置s1为第二主节点

若上一步没有报错则集群的构建就已经完成,在主节点上可以操作集群的启动和停止,以及进入退出某个数据库:

主节点上进入数据库 主节点上停止集群 主节点上启动集群 主节点上查看集群状态

至此,Greenplum的集群建设实验就告一段落了。笔者下一步的设想是使用Greenplum官方提供的docker镜像进行gp集群建设。

2017年12月3日



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有