Greenplum作为一个分布式计算平台,集群中有不同角色的节点,比如master,segment,甚至专门的etl服务器。完整的部署一个Greenplum集群通常需要多个物理机,并花费数天甚至数周的时间。而利用docker和docker-compose,启动一个gp集群其实只需要几分钟而已。本文将介绍如何快速在docker中启动Greenplum 集群。
1、准备工作
首先从github下载docker的配置文件:
git clone https://github.com/lij55/gphost.git
然后从Greenplum官网(https://network.pivotal.io/)...,gphost的docker使用的CentOS7镜像。如果用gp5的环境,就将对应的rpm放到example5/目录;如果用gp6的环境,就将对应的rpm放到example6/目录。这里以gp6为例,下载6.8的安装文件greenplum-db-6.8.0-rhel7-x86_64.rpm,放到example6目录下,执行ls可以看到内容大致如下:
$ ls -1 example6
build.sh
docker-compose.yaml
Dockerfile
greenplum-db-6.8.0-rhel7-x86_64.rpm
readme.org
reset
2、运行容器
docker-compose.yaml文件中定义了运行时依赖的docker容器,默认有1个master节点,2个segment节点和1个etl服务器。如果需要增加更多segment机器或者修改端口,可以修改docker-compose.yaml。然后启动容器:
# cd example6
docker build . -t mygreenplum6
docker-compose up -d
容器启动好之后,可以通过ssh或者docker-compose的exec命令连接到master节点;这里需要注意的是一定要用gpadmin用户,假定master上ssh端口为6222,ssh的登录命令为:
ssh -p 6222 [email protected]
密码为changeme
3、初始化集群
在master节点,执行如下命令来,生成初始化配置的脚本
artifiact/prepare.sh -s 2 -n 2
- -s 表示有2个segment机器(容器)
- -n 表示在每个segment机器上创建2个primary节点
然后运行gpinitsystem命令来进行初始化。
gpinitsystem -a -c gpinitsystem_config
不出意外的话greenplum集群就启动成了。preprare.sh脚本还生成了env.sh文件,方便配置gp需要的环境变量。此外,还有artifact/post.sh脚本会进行一些方便的设置,例如打开gpadmin的远程无密码访问,将env.sh加入gpadmin用户的bash环境变量等。直接执行即可:
artifact/postinstall.sh
4、管理集群
集群创建后,可以通过docker-compose命令来管理集群:
docker-compose exec -u gpadmin mdw bash -i -c "gpstop -a"
而重新启动集群的命令为:
docker-compose exec -u gpadmin mdw bash -i -c "gpstart -a"
gp的服务映射到本机的6432端口,可以用任何gp的客户端工具,比如dbeavor或者pgadmin进行访问。
5、后续工作
- 增加mirror和standby master的支持
- 支持更多的组件,比如pxf,madlib等
- 支持开源版gp
- 进一步简需要手动执行的操作 欢迎大家到github上提issue,PR