跳到主要内容

在 Linux 系统上编译和安装 Cloudberry Database

信息

本文档来自 GitHub 仓库 cloudberrydb/cloudberrydb.

本文档分享如何在 Linux 系统(CentOS 7、RHEL 和 Ubuntu)上编译和安装 Cloudberry Database。请注意,本文档仅供开发人员在单节点环境中尝试 Cloudberry Database。请勿将本文档用于生产环境

按照以下步骤设置开发环境:

  1. 克隆 GitHub 仓库
  2. 安装依赖项
  3. 执行平台准备工作
  4. 构建 Cloudberry Database
  5. 验证集群

第 1 步:克隆 GitHub 仓库

将 GitHub 仓库 cloudberrydb/cloudberrydb 克隆到目标机器:

git clone https://github.com/cloudberrydb/cloudberrydb.git

第 2 步:安装依赖项

进入仓库目录,根据你的操作系统安装依赖项:

以下步骤在 CentOS 7 上测试通过。对于其他版本的 CentOS,这些步骤可能有效,但不能保证有效。

  1. 执行 cloudberrydb/cloudberrydb 仓库下 readmes 目录中的 README.CentOS.bash 脚本。执行此脚本需要输入密码。然后,系统会自动下载一些必要的依赖项。

    cd cloudberrydb/readmes
    ./README.CentOS.bash
  2. 安装配置所需的其他包。

    yum -y install R apr apr-devel apr-util automake autoconf bash bison bison-devel bzip2 bzip2-devel centos-release-scl curl flex flex-devel gcc gcc-c++ git gdb iproute krb5-devel less libcurl libcurl-devel libevent libevent-devel libxml2 libxml2-devel libyaml libzstd-devel libzstd make openldap openssh openssh-clients openssh-server openssl openssl-devel openssl-libs perl python3-devel readline readline-devel rsync sed sudo tar vim wget which xerces-c-devel zip zlib && \
    yum -y install epel-release
  3. 将 GNU Compiler Collection (GCC) 更新到 devtoolset-10 版本,以支持 C++ 14。

    yum install centos-release-scl 
    yum -y install devtoolset-10-gcc devtoolset-10-gcc-c++ devtoolset-10-binutils
    scl enable devtoolset-10 bash
    source /opt/rh/devtoolset-10/enable
    echo "source /opt/rh/devtoolset-10/enable" >> /etc/bashrc
    source /etc/bashrc
    gcc -v
  4. 将 cmake3 链接到 cmake:

    sudo ln -sf /usr/bin/cmake3 /usr/local/bin/cmake

第 3 步:执行平台准备工作

在操作系统上安装所有依赖项后,在构建 Cloudberry Database 之前你还需要执行一些平台准备工作。这些操作包括在平台上手动运行 ldconfig、创建 gpadmin 用户以及设置密码以启动 Cloudberry Database 并进行测试。

  1. 确保将 /usr/local/lib/usr/local/lib64 添加到 /etc/ld.so.conf 文件中。

    echo -e "/usr/local/lib \n/usr/local/lib64" >> /etc/ld.so.conf
    ldconfig
  2. 创建 gpadmin 用户并设置 SSH 密钥。根据不同的操作系统手动创建 SSH 密钥,这样你就可以在不输入密码的情况下运行 ssh localhost

    useradd gpadmin  # 创建 gpadmin 用户
    su - gpadmin # 切换到 gpadmin 用户
    ssh-keygen # 创建 SSH 密钥
    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    chmod 600 ~/.ssh/authorized_keys
    exit

第 4 步:构建 Cloudberry Database

安装完所有依赖项并执行了平台准备工作后,你就可以开始构建 Cloudberry Database 了。按顺序执行以下命令。

  1. 进入 cloudberrydb 目录,执行 configure 脚本。

    cd cloudberrydb
    ./configure --with-perl --with-python --with-libxml --with-gssapi --prefix=/usr/local/cloudberrydb
    提示

    Cloudberry Database 默认使用 GPORCA 构建。如果你希望构建出不使用 GPORCA 的 Cloudberry Database,请在 ./configure 命令中添加 --disable-orca 参数。

    ./configure --disable-orca --with-perl --with-python --with-libxml --prefix=/usr/local/cloudberrydb
  2. 编译源码并安装数据库。

    make -j8
    make -j8 install
  3. 将 Greenplum 环境引入运行中的 shell。

    cd ..
    cp -r cloudberrydb/ /home/gpadmin/
    cd /home/gpadmin/
    chown -R gpadmin:gpadmin cloudberrydb/
    su - gpadmin
    cd cloudberrydb/
    source /usr/local/cloudberrydb/greenplum_path.sh
  4. 启动示例集群。

    scl enable devtoolset-10 bash 
    source /opt/rh/devtoolset-10/enable
    make create-demo-cluster
  5. 执行以下命令,以准备测试。此命令将为测试配置端口和环境变量。

    该命令会配置端口和环境变量,例如 PGPORT(主节点的默认端口)和 COORDINATOR_DATA_DIRECTORY(主节点的数据目录)。

    source gpAux/gpdemo/gpdemo-env.sh

第 5 步:验证集群

  1. 你可以通过以下命令来验证集群是否已成功启动。如果成功启动,你会看到端口在 70007007 之间的多个 postgres 进程。

    ps -ef | grep postgres
  2. 连接至 Cloudberry Database,通过查询系统表 gp_segement_configuration 查看活跃 segment 的信息。有关此系统表的详细描述,参见 Greenplum 文档

    $ psql -p 7000 postgres
    psql (14.4, server 14.4)
    Type "help" for help.

    postgres=# select version();
    version
    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    PostgreSQL 14.4 (Cloudberry Database 1.0.0+1c0d6e2224 build dev) on x86_64( GCC 13.2.0) 13.2.0, 64-bit compiled on Sep 22 2023 10:56:01
    (1 row)

    postgres=# select * from gp_segment_configuration;
    dbid | content | role | preferred_role | mode | status | port | hostname | address | datadir | warehouseid
    ------+---------+------+----------------+------+--------+------+------------+------------+------------------------------------------------------------------------------+-------------
    1 | -1 | p | p | n | u | 7000 | i-6wvpa9wt | i-6wvpa9wt | /home/gpadmin/cloudberrydb/gpAux/gpdemo/datadirs/qddir/demoDataDir-1 | 0
    8 | -1 | m | m | s | u | 7001 | i-6wvpa9wt | i-6wvpa9wt | /home/gpadmin/cloudberrydb/gpAux/gpdemo/datadirs/standby | 0
    3 | 1 | p | p | s | u | 7003 | i-6wvpa9wt | i-6wvpa9wt | /home/gpadmin/cloudberrydb/gpAux/gpdemo/datadirs/dbfast2/demoDataDir1 | 0
    6 | 1 | m | m | s | u | 7006 | i-6wvpa9wt | i-6wvpa9wt | /home/gpadmin/cloudberrydb/gpAux/gpdemo/datadirs/dbfast_mirror2/demoDataDir1 | 0
    2 | 0 | p | p | s | u | 7002 | i-6wvpa9wt | i-6wvpa9wt | /home/gpadmin/cloudberrydb/gpAux/gpdemo/datadirs/dbfast1/demoDataDir0 | 0
    5 | 0 | m | m | s | u | 7005 | i-6wvpa9wt | i-6wvpa9wt | /home/gpadmin/cloudberrydb/gpAux/gpdemo/datadirs/dbfast_mirror1/demoDataDir0 | 0
    4 | 2 | p | p | s | u | 7004 | i-6wvpa9wt | i-6wvpa9wt | /home/gpadmin/cloudberrydb/gpAux/gpdemo/datadirs/dbfast3/demoDataDir2 | 0
    7 | 2 | m | m | s | u | 7007 | i-6wvpa9wt | i-6wvpa9wt | /home/gpadmin/cloudberrydb/gpAux/gpdemo/datadirs/dbfast_mirror3/demoDataDir2 | 0
    (8 rows)