暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PolarDB-PG上手开发——定制开发环境

PolarDB农夫山泉 2023-09-19
344

PolarDB PostgreSQL版(以下简称 PolarDB-PG)是一款阿里云自主研发的企业级数据库产品,采用计算存储分离架构,兼容 PostgreSQL 与 Oracle。PolarDB-PG 的存储与计算能力均可横向扩展,具有高可靠、高可用、弹性扩展等企业级数据库特性。同时,PolarDB-PG 具有大规模并行计算能力,可以应对 OLTP 与 OLAP 混合负载;还具有时空、向量、搜索、图谱等多模创新特性,可以满足企业对数据处理日新月异的新需求。

自行构建开发镜像

我们在 DockerHub 上提供了构建完毕的镜像 polardb/polardb_pg_devel 可供直接使用(支持 AMD64 和 ARM64 架构)。

另外,我们也提供了构建上述开发镜像的 Dockerfile,从 CentOS 7 官方镜像 centos:centos7 开始构建出一个安装完所有开发和运行时依赖的镜像。您可以根据自己的需要在 Dockerfile 中添加更多依赖。以下是手动构建镜像的 Dockerfile 及方法。

FROM centos:centos7 CMD bash # avoid missing locale problem RUN sed -i 's/override_install_langs/# &/' /etc/yum.conf # add EPEL and scl source RUN rpmkeys --import file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 && \ yum install -y epel-release centos-release-scl && \ rpmkeys --import file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 && \ rpmkeys --import file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo && \ yum update -y # GCC and LLVM RUN yum install -y devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-gdb devtoolset-9-libstdc++-devel devtoolset-9-make && \ yum install -y llvm-toolset-7.0-llvm-devel llvm-toolset-7.0-clang-devel llvm-toolset-7.0-cmake # dependencies RUN yum install -y libicu-devel pam-devel readline-devel libxml2-devel libxslt-devel openldap-devel openldap-clients openldap-servers libuuid-devel xerces-c-devel bison flex gettext tcl-devel python-devel perl-IPC-Run perl-Expect perl-Test-Simple perl-DBD-Pg perl-ExtUtils-Embed perl-ExtUtils-MakeMaker zlib-devel krb5-devel krb5-workstation krb5-server protobuf-devel && \ ln /usr/lib64/perl5/CORE/libperl.so /usr/lib64/libperl.so # install basic tools RUN echo "install basic tools" && \ yum install -y \ git lcov psmisc sudo vim \ less \ net-tools \ python2-psycopg2 \ python2-requests \ tar \ shadow-utils \ which \ binutils\ libtool \ perf \ make sudo \ util-linux # set to empty if GitHub is not barriered # ENV GITHUB_PROXY=https://ghproxy.com/ ENV GITHUB_PROXY= ENV OPENSSL_VERSION=OpenSSL_1_1_1k # install dependencies from GitHub mirror RUN yum install -y libaio-devel wget && \ cd /usr/local && \ # zlog for PFSD wget --no-verbose --no-check-certificate "${GITHUB_PROXY}https://github.com/HardySimpson/zlog/archive/refs/tags/1.2.14.tar.gz" && \ # PFSD wget --no-verbose --no-check-certificate "${GITHUB_PROXY}https://github.com/ApsaraDB/PolarDB-FileSystem/archive/refs/tags/pfsd4pg-release-1.2.41-20211018.tar.gz" && \ # OpenSSL 1.1.1 wget --no-verbose --no-check-certificate "${GITHUB_PROXY}https://github.com/openssl/openssl/archive/refs/tags/${OPENSSL_VERSION}.tar.gz" && \ # enable build tools echo "source /opt/rh/devtoolset-9/enable" >> /etc/bashrc && \ echo "source /opt/rh/llvm-toolset-7.0/enable" >> /etc/bashrc && \ source /etc/bashrc && \ # unzip and install zlog tar -zxf 1.2.14.tar.gz && \ cd zlog-1.2.14 && \ make && make install && \ echo '/usr/local/lib' >> /etc/ld.so.conf && ldconfig && \ cd .. && \ rm 1.2.14.tar.gz && \ rm -rf zlog-1.2.14 && \ # unzip and install PFSD tar -zxf pfsd4pg-release-1.2.41-20211018.tar.gz && \ cd PolarDB-FileSystem-pfsd4pg-release-1.2.41-20211018 && \ ./autobuild.sh && ./install.sh && \ cd .. && \ rm pfsd4pg-release-1.2.41-20211018.tar.gz && \ rm -rf PolarDB-FileSystem-pfsd4pg-release-1.2.41-20211018 && \ # unzip and install OpenSSL 1.1.1 tar -zxf $OPENSSL_VERSION.tar.gz && \ cd /usr/local/openssl-$OPENSSL_VERSION && \ ./config --prefix=/usr/local/openssl && make -j64 && make install && \ cp /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/ && \ cp /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/ && \ cp -r /usr/local/openssl/include/openssl /usr/include/ && \ ln -sf /usr/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so && \ ln -sf /usr/lib64/libssl.so.1.1 /usr/lib64/libssl.so && \ rm -f /usr/local/$OPENSSL_VERSION.tar.gz && \ rm -rf /usr/local/openssl-$OPENSSL_VERSION # create default user ENV USER_NAME=postgres RUN echo "create default user" && \ groupadd -r $USER_NAME && useradd -g $USER_NAME $USER_NAME -p '' && \ usermod -aG wheel $USER_NAME WORKDIR /home/$USER_NAME # modify conf RUN echo "modify conf" && \ mkdir -p /run/pfs && chown $USER_NAME /run/pfs && \ mkdir -p /var/log/pfs && chown $USER_NAME /var/log/pfs && \ echo "ulimit -c unlimited" >> /home/postgres/.bashrc && \ echo "export PATH=/home/postgres/tmp_basedir_polardb_pg_1100_bld/bin:\$PATH" >> /home/postgres/.bashrc && \ echo "alias pg='psql -h /home/postgres/tmp_master_dir_polardb_pg_1100_bld/'" >> /home/postgres/.bashrc && \ rm /etc/localtime && \ cp /usr/share/zoneinfo/UTC /etc/localtime && \ sed -i 's/4096/unlimited/g' /etc/security/limits.d/20-nproc.conf && \ sed -i 's/vim/vi/g' /root/.bashrc USER $USER_NAME
复制

:::

将上述内容复制到一个文件内(假设文件名为 Dockerfile-PolarDB)后,使用如下命令构建镜像:

::: tip
💡 请在下面的高亮行中按需替换 <image_name> 内的 Docker 镜像名称
:::

docker build --network=host \
    -t <image_name> \
    -f Dockerfile-PolarDB .
复制

从干净的系统开始搭建开发环境

该方式假设您从一台具有 root 权限的干净的 CentOS 7 操作系统上从零开始,可以是:

  • 安装 CentOS 7 的物理机/虚拟机
  • 从 CentOS 7 官方 Docker 镜像 centos:centos7 上启动的 Docker 容器

建立非 root 用户

PolarDB for PostgreSQL 需要以非 root 用户运行。以下步骤能够帮助您创建一个名为 postgres 的用户组和一个名为 postgres 的用户。

::: tip
如果您已经有了一个非 root 用户,但名称不是 postgres:postgres,可以忽略该步骤;但请注意在后续示例步骤中将命令中用户相关的信息替换为您自己的用户组名与用户名。

:::

下面的命令能够创建用户组 postgres 和用户 postgres,并为该用户赋予 sudo 和工作目录的权限。需要以 root 用户执行这些命令。

# install sudo yum install -y sudo # create user and group groupadd -r postgres useradd -m -g postgres postgres -p '' usermod -aG wheel postgres # make postgres as sudoer chmod u+w /etc/sudoers echo 'postgres ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers chmod u-w /etc/sudoers # grant access to home directory chown -R postgres:postgres /home/postgres/ echo 'source /etc/bashrc' >> /home/postgres/.bashrc # for su postgres sed -i 's/4096/unlimited/g' /etc/security/limits.d/20-nproc.conf
复制

接下来,切换到 postgres 用户,就可以进行后续的步骤了:

su postgres source /etc/bashrc cd ~
复制

依赖安装

在 PolarDB for PostgreSQL 的源码库根目录下,有一个 install_dependencies.sh 脚本,包含了 PolarDB-PG 和 PFS 需要运行的所有依赖。因此,首先需要克隆 PolarDB-PG 的源码库。

PolarDB for PostgreSQL 的代码托管于 GitHub 上,稳定分支为 POLARDB_11_STABLE。如果因网络原因不能稳定访问 GitHub,则可以访问 Gitee 国内镜像

code-group

code-group-item GitHub

sudo yum install -y git
git clone -b POLARDB_11_STABLE https://github.com/ApsaraDB/PolarDB-for-PostgreSQL.git
复制

code-group-item Gitee 国内镜像

sudo yum install -y git
git clone -b POLARDB_11_STABLE https://gitee.com/mirrors/PolarDB-for-PostgreSQL
复制

源码下载完毕后,使用 sudo 执行源代码根目录下的依赖安装脚本 install_dependencies.sh 自动完成所有的依赖安装。如果有定制的开发需求,请自行修改 install_dependencies.sh

cd PolarDB-for-PostgreSQL sudo ./install_dependencies.sh
复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论