FAIRYFAR-INTERNAL
 
  FAIRYFAR-INTERNAL  |  SITEMAP  |  ABOUT-ME  |  HOME  
Apache Cloudberry:脱颖而出的GPDB继任者

一、概况

Greenplum Database于2024年5月,在没有任何公告的情况下存档闭源。对于存量用户和开发者,纷纷寻找替代方案。从目前情况看主要有三大项目可担当继任者,那么谁又更胜一筹,能够脱颖而出呢?

1.1 Apache Cloudberry

image

官网:https://cloudberry.apache.org

源码:https://github.com/apache/cloudberry

Greenplum数据库初始开发团队打造的一套开源MPP数据库。它源自Pivotal Greenplum数据库的开源版本,但采用了更新的PostgreSQL内核(基于PG 14.4,正在向16.x升级),并提供更多高级企业功能。

2024年10月在成功通过投票后正式进入Apache孵化器,并于2024年11月完成了源代码仓库及基础设施向Apache软件基金会(ASF)的迁移。

1.2 Greengage

image

官网:https://greengagedb.org/en/home/

源码:https://github.com/GreengageDB/greengage

Arenadata发起,源代码托管在GitHub组织下,仓库由发起公司拥有和控制。

有意思的是,greengagegreen plum都有“青梅”的意思,但是它们并非同一种水果。

1.3 WarehousePG

image

官网:https://warehouse-pg.io

源码:https://github.com/warehouse-pg/warehouse-pg

EnterpriseDB发起,源代码托管在GitHub组织下,仓库由发起公司拥有和控制。

1.4 多纬度对比

数据截止2026年3月15日。

产品 Star Pull Request Issue 主分支提交次数(*)
———– —- ———— —– —————–
Cloudberry 1191 1107 360 1588
Greengage 74 310 5 442
WarehousePG 96 108 19 129

*注:仅统计2024年04月01日之后的main分支提交。

总体上来看,各项指标Cloudberry均领先。

二、Apache Cloudberry

2.1 版本发布

已发布多个版本:

关键版本 发布时间 说明
———————————- ———- ————————————
apache-cloudberry-2.0.0-incubating 2025.09.01 进入Apache孵化项目后第一个稳定版本
v1.6.0 2024.09.03 进入Apache孵化项目前最后一个稳定版本
v1.0.0 2024.03.11 第一个Release版本

2.2 内核升级

2025 年,项目启动了Apache CloudberryPostgreSQL内核升级工作,将Apache CloudberryPostgreSQL内核从 PostgreSQL 14.xPostgreSQL 16.x迁移,原归档的 Greenplum 7 版本将与Apache Cloudberry产生 4 个PostgreSQL版本代差(Greenplum 7搭载PostgreSQL 12内核)。参考文献[3]。

2.3 数据迁移

cbcopy是一种高效的数据库迁移工具,用于将数据和元数据从Greenplum database (GPDB)传输到Apache Cloudberry(Cloudberrydb),同时还支持在Greenplum数据库之间和Cloudberry数据库之间进行迁移,以便进行灾难恢复和数据库版本升级。

项目地址:https://github.com/cloudberry-contrib/cbcopy

2.4 编译安装Demo集群

本节演示在一台服务器上从源代码快速搭建一个Apache Cloudberry 3.0 Demo集群。

以下过程在CentOS 7.6上验证通过。参考文献[4]。

snippet.bash
# 1. 安装准备
# 请确保环境已准备好,例如已建立当前用户到自己的SSH互信。
# 不要安装python pg和pgdb包
sudo pip3 install pygresql
# 可能还需要其它包,根据后续提时按需安装。
 
cd ~
mkdir cb_bin
# 2. 拉取代码
git clone https://github.com/apache/cloudberry.git
 
# 3. 编译配置
cd cloudberry
# Debug版本,暂时不编译ORCA,ORCA需要额外的库。
# 这一步可能会提时缺少库,缺什么安装什么即可。
CFLAGS="-O0 -g3 -ggdb3" ./configure --prefix=/home/fairyfar/cb_bin --disable-orca --enable-debug --enable-debug-extensions
 
# 4. 编译
make -j$(nproc) -C ./
make -j$(nproc) -C ./contrib
make install -C ./
make install -C ./contrib
 
# 5. 验证安装
~/cb_bin/bin/postgres --gp-version
~/cb_bin/bin/postgres --version
ldd ~/cb_bin/bin/postgres
 
# 6. 初始化Cloudberry demo集群
source ~/cb_bin/cloudberry-env.sh
make create-demo-cluster -C ./
source ./gpAux/gpdemo/gpdemo-env.sh
 
# 7. 可以正常使用集群了
gpstate -a
psql postgres

2.5 编译安装集群

截止到目前,Apache Cloudberry尚未提供除源码安装方式之外的任何二进制安装方式(.deb,.rpm等)。参阅文献[5]。

The Apache Cloudberry (Incubating) project is released in source form (`.tar.gz`) as its official releases. All the official releases are signed by the release manager for the release. PGP signatures and SHA512 checksums are available along with the distribution.
Convenience binaries (eg, `.deb`, `.rpm`) will be made in the future.

本节演示如何从源代码编译、安装和初始化Apache Cloudberry集群。

集群拓扑:1台主机,1个coordinator实例,2个主segment实例,2个备segment实例。

(1). 安装准备

参考上一小节。

snippet.bash
cd /home/fairyfar/
# 创建程序目录
mkdir acb_bin
# 创建数据目录(包括:coordinator、主segment和备segment的数据目录)
mkdir -p acb_db/coor
mkdir -p acb_db/primary
mkdir -p acb_db/mirror

(2). 拉取代码

snippet.bash
git clone https://github.com/apache/cloudberry.git

(3). 编译

snippet.bash
cd cloudberry
# Release版本,暂时不编译ORCA,ORCA需要额外的库。
# 这一步可能会提时缺少库,缺什么安装什么即可。
./configure --prefix=/home/fairyfar/acb_bin --disable-orca
 
make -j$(nproc)
make install

如果编译Debug版本,可以使用以下configure:

snippet.bash
CFLAGS="-O0 -g3 -ggdb3" ./configure --prefix=/home/fairyfar/acb_bin --disable-orca --enable-debug --enable-debug-extensions

(4). 验证安装

snippet.bash
~/acb_bin/bin/postgres --gp-version
~/acb_bin/bin/postgres --version
ldd ~/acb_bin/bin/postgres

(5). 准备初始化配置文件

snippet.bash
# 复制初始化配置文件模板
cp cloudberry/gpMgmt/doc/gpconfigs/gpinitsystem_config ~/

修改初始化配置文件gpinitsystem_config,主要内容包括:

snippet.bash
# 主segment起始端口号
PORT_BASE=7000
# 主segment数据目录
declare -a DATA_DIRECTORY=(/home/fairyfar/acb_db/primary /home/fairyfar/acb_db/primary)
 
# 主机名称
COORDINATOR_HOSTNAME=bogon
# coordinator数据目录
COORDINATOR_DIRECTORY=/home/fairyfar/acb_db/coor
 
# 备segment起始端口号
MIRROR_PORT_BASE=8000
# 备segment数据目录
declare -a MIRROR_DATA_DIRECTORY=(/home/fairyfar/acb_db/mirror /home/fairyfar/acb_db/mirror)

准备主机列表文件:

snippet.bash
hostname > ~/hostlist_singlenode

(6). 初始化集群

snippet.bash
source /home/fairyfar/acb_bin/cloudberry-env.sh
gpinitsystem -h ~/hostlist_singlenode -c ~/gpinitsystem_config

gpinitsystem如果失败,请根据实际情况修改配置,常见错误有:

  • 端口冲突,例如CentOS桌面版,6000端口默认已被下X桌面程序使用。导致第1个主segment无法启动。
  • 系统配置太低,无法启动全部实例。请降低实例数,或者去掉备segment。
  • 初始化并行度过高,部分实例失败。可以尝试指定-m参数,降低初始化并行度。

(7). 使用集群

在使用gpstart, gpstop, gpstate等命令前,需要先导出coordinator数据目录环境变量:

snippet.bash
export COORDINATOR_DATA_DIRECTORY=/home/fairyfar/acb_db/coor/gpseg-1

三、参考



打赏作者以资鼓励: