1. 概述

1.1 背景介绍

         OpenGauss是一项基于华为开源社区,从GaussDB分布式数据库中DN节点独立出来的开源项目。OpenGauss作为GaussDB单机集中式开源数据库,具备数据库系统所有功能。GaussDB集中式集群系统即为GaussDB For OpenGauss,其与开源项目的主要区别是GaussDB For OpenGaussOpenGauss基础上加入一些商业特性功能(Oracle语法兼容,数据安全,加密传输等商业特性支持)

        本案例选择OpenGauss示例,并借助开发者空间云主机提供的OpenEuler系统环境,从www.gitee.com下载OpenGauss源代码,以云主机作为开发环境适配,编译安装OpenGauss数据库,并部署OpenGuass一主一备集中式集群系统。

        通过实际操作,让大家深入了解如何云主机环境编译安装OpenGuass数据库,并部署集中式主备集群。在这个过程中,大家将学习到从数据库源码编译OpenGauss安装包、数据库应用安装部署以及集中式(一主一备两节点)适配部署等一系列关键步骤,从而掌握 OpenGauss数据库的编译,安装,集中式部署适配的基本使用方法,体验其在应用开发中的优势。

1.2 适用对象

        企业,个人开发者(数据库极客),高校学生。

1.3 耗费时间

        本博客耗时预计60分钟。

1.4 流程图

opengauss编译安装流程图

安装部署集中式数据库集群系统:

  • 下载OpenGauss数据库源代码;
  • 适配数据库开发环境;
  • 安装部署OpenGaussDB并测试主备数据同步。

1.5 资源总览

资源名称 规格 单价(元) 时长(分钟)

云主机

ARM架构

| 4 vCPUs | 8 GB | OpenEuler 22.03 Server定制版 (40GB)

60

2. OpenGauss数据库源码编译安装

2.1 下载OpenGauss源代码

本案例中,使用华为社区数据库开源项目OpenGauss源代码,根据云主机系统资源信息,编译安装OpenGauss数据库,并部署一主一备集中式双节点集群。

        2.1.1 在浏览器中输入gitee网址:Gitee - 基于 Git 的代码托管和研发协作平台 进入其首页。

        2.1.2 在Gitee的首页右上方,点击登录,在弹出的对话框中输入自己的用户名和密码。

        2.1.3 在Gitee首页,点击搜索框,输入OpenGauss并按回车,进入搜索结果页面。

        2.1.4 选择第一个opengauss/opengauss-server开源项目,其前显示GVP标识,进入其项目页面。

        2.1.5 点击分支左边的下三角符号,选择需要安装的OpenGauss版本的分支即可,本案例使用分支7.0.0-RC1

            2.1.6 点击开源项目右上角的克隆/下载按钮。

            2.1.7 克隆/下载页面,有两种下载源代码方法,红色线框是用git工具从开源代码库克隆代码版本。蓝色线框是根据第5步选择的分支7.0.0-RC1下载对应版本代码的zip压缩包。

            2.1.8 本案例使用Git工具下载OpenGauss源代码,即复制地址openGauss-server: openGauss kernel ~ openGauss is an open source relational database management system.,通过Git命令下载OpenGauss数据库源码版本。Git是Linux下的代码管理工具,用于项目开发与管理代码不同版本。

    cd ~
    pwd
    git clone -b 7.0.0-RC1 https://gitee.com/opengauss/openGauss-server.git

    cd openGauss-server/      #进入OpenGauss源码目录
    ls						  #查看OpenGauss-Server的源码内容

            2.1.9 检查代码分支版本是否一致。

    git branch

    2.2 适配数据库开发环境

    以下表格列举了编译openGauss的软件要求。建议使用从列出的操作系统安装盘或安装源中获取的以下依赖软件的默认安装包进行安装。如果不存在以下软件,请参考推荐的软件版本

    软件依赖要求如下:

    软件 推荐版本

    libaio-devel

    0.3.109-13

    flex

    2.5.31及以上版本

    bison

    2.7-4

    ncurses-devel

    5.9-13.20130511

    glibc-devel

    2.17-111

    patch

    2.7.1-10

    lsb_release

    4.1

    readline-devel

    7.0-13

    安装依赖软件包之前,先检查云主机的YUM源是否需要更新,可先执行

    sudo yum update
    sudo yum install -y libaio-devel flex bison ncurses-devel glibc-devel patch readline-devel

    lsb_release不能直接下载,需要用yum provides查找包含该软件包的安装包。

    sudo yum provides lsb_release
    ​​​​​​​sudo yum install -y openeuler-lsb-5.0-1.oe2203sp4.aarch64

    下载OpenGauss编译开发依赖的第三方库。

    cd ~
    wget https://opengauss.obs.cn-south-.myhuaweicloud.com/latest/binarylibs/gcc10.3/openGauss-third_party_binarylibs_openEuler_2203_arm.tar.gz
    

    tar -zxvf openGauss-third_party_binarylibs_openEuler_2203_arm.tar.gz
    mv openGauss-third_party_binarylibs_openEuler_2203_arm binarylibs
    ls -lh
    

    2.3 编译生成数据库到指定安装目录

            进行OpenGauss源代码目录

    cd openGauss-server/
    ls

    本案例使用编译打包脚本,生成OpenGauss数据库软件安装包。参数-3rd为指向第三方库目录。

    sh build.sh -m release -3rd /home/developer/binarylibs/ -pkg

    但是报错build_opengauss.sh failed, aborting. 原因是make命令没有安装

    解决方法:安装make工具(make工具是Linux下MakeFile的编译工具)

    sudo yum install -y make

    再继续编译打包OpenGauss数据库软件安装包。编译耗时大概十多分钟。

    sh build.sh -m release -3rd /home/developer/binarylibs/ -pkg

    当出现如下信息,则表示编译打包完成。

    进行数据库安装包存放目录output,查看OpenGauss编译生成的安装包

    cd output/
    ls -lh
    

    3. 安装部署集中式数据库集群系统

    3.1 安装OpenGauss数据库

    创建数据库安装目录DB_Install,并拷贝数据库软件安装包到该目录下。

    cd ~
    mkdir DB_Install
    cd DB_Install/
    cp ~/openGauss-server/output/* ./

    解压OpenGauss数据库安装包(Server, Libpq, Tools)

    tar -jxvf openGauss-Server-7.0.0-RC1-openEuler22.03-aarch64.tar.bz2
    tar -zxvf openGauss-Libpq-7.0.0-RC1-openEuler22.03-aarch64.tar.gz
    tar -zxvf openGauss-Tools-7.0.0-RC1-openEuler22.03-aarch64.tar.gz

    则解压出来的bin, etc, include, jre, lib, share, simleInstall这些目录即是数据库OpenGauss的安装文件。

    3.2 部署1主1备双节点集中式集群

    在数据库安装目录DB_Install中,进入bin目录初始化数据库并指定数据目录。

    cd ./bin
    ./gs_initdb -D ./data_primary --nodename=dn_1 -w GaussDB@123
    

    该问题是当时./gs_initdb工具找不到其所依赖的动态库,用export设置动态库路径。

    export LD_LIBRARY_PATH=`pwd`/../lib:$LD_LIBRARY_PATH
    ./gs_initdb -D ./data_primary --nodename=dn_1 -w GaussDB@123
    

    见下图则表示初始化数据目录成功。

    修改OpenGauss数据库数据目录中的配置文件

    vim data_primary/postgresql.conf

    要修改的内容,本案例云主机的IPV4地址10.12.60.188(替换下方X.X.X.X通配符,用于参数replconninfo1)。

    查询本机ipv4的shell命令:ip -4 addr show 或者 ifconfig

    port = 5001

    most_available_sync = on

    listen_addresses = '0.0.0.0'

    wal_level = logical

    remote_read_mode = 'non_authentication' (添加参数)

    replconninfo1 = 'localhost=X.X.X.X localport=12211 localheartbeatport=12214 remotehost=X.X.X.X remoteport=12212 remoteheartbeatport=12215

    参数说明:

    1. port为主库的监听端口,设置为5001
    2. most_available_sync为on表示数据同步为最大可用模式
    3. listen_addresses监听地址设置为0.0.0.0表示允许所有地址
    4. wal_level表示wal日志的级别为逻辑日志 (选择性修改)
    5. remote_read_mode表示设置远端读模式不需要认证
    6. replconninfo1表示主备集群链接信息,有3个xxhost, xxport, xxhearbeatport分别表示host_ip,数据同步端口,心跳监听端口。localhost表示本库ip地址,remotehost表示远端库ip地址。
    vim data_primary/pg_hba.conf

    添加如下内容:

    host all all 0.0.0.0/0 sha256

    启动主库数据目录服务

    export GAUSSHOME=/home/developer/DB_Install      #/home/developer/DB_Install是openGauss数据库的安装目录
    ./gs_ctl -D data_primary/ -M primary start
    

    创建备库目录data_standby, 并设置备库目录权限为700。

    mkdir data_standby
    chmod 700 data_standby/

    用gs_basebackup工具生成备库数据目录数据和WAL日志。本案例云主机ip地址为10.12.60.188(替换下方X.X.X.X通配符)。

    ./gs_basebackup -D data_standby/ -h X.X.X.X -p 5001

    修改备库数据目录data_standby配置文件postgresql.conf信息

    vim data_standby/postgresql.conf

    要修改的内容

    port = 5003
    replconninfo1 = 'localhost= X.X.X.X localport=12212 localheartbeatport=12215 remotehost= X.X.X.X remoteport=12211 remoteheartbeatport=12214'

    参数说明:
    i.    port为备库监听端口,为何要与主库5001间隔2位,因为5002端口也被主库使用,使备库只能从5003开始。
    ii.    replconninfo1参数中localport, localheartbeatport内容为主库的remoteport, remoteheartbeatport。

    启动备库数据目录data_standby

    ./gs_ctl -D data_standby/ -M standby start

    查看OpenGauss数据库集中式一主一备双节点服务进程是否正常启动。

    ps -ef|grep gauss

    查看主库数据目录data_primary的数据同步信息和Wal日志的LSN位置。

    ./gs_ctl query -D data_primary/

     

    查看备库数据目录data_standby的数据同步信息和Wal日志的LSN位置

    ./gs_ctl query -D data_standby/

    3.3 测试主备库数据同步

    登录OpenGauss数据库集中式主备集群。

    ./gsql -d postgres -W GaussDB@123 -p 5001 -ar

    参数说明:

    1. gsql为OpenGauss客户端工具
    2. -d 指向要登录的数据库为postgres
    3. -W 初始化用户的登录密码,在gs_initdb时用-w指定,本案例密码为GaussDB@123
    4. -p 监听端口,5001为主库的监听端口。
    5. -ar 表示数据库客户端工具命令行输入格式readline使用ar追加格式。

    可以明确看到客户端gsql的版本信息

    (openGauss 7.0.0-RC1 build cff7b04d)

    编译安装包的时间,本案例OpenGauss源码编译时间为2025-04-01 16:15:25

    compiled at 2025-04-01 16:15:25

    创建测试数据,即建表test,插入数据,查询数据

    create table test(id int, name varchar);
    insert into test values(1,’test’),(100,’OpenGauss’),(13,’Database’);
    select * from test;

    退出Gsql客户端,并登录备库。备库监听端口为5003。

    \q    #退出
    ​​​​​​​./gsql -d postgres -W gaussDB@123 -p 5003 -ar      #进入备机端口port:5003进入备机客户端

     

    由于是集中式一主一备集群,所以在主库上创建的表和数据应该被同步到备库,则此时在备库上查询主库上创建的表数据,应该是与主库表数据是一致的。

    select * from test;
    ​​​​​​​\d test      #查询主机上创建表test的表结构

    经过实验测试,备库表数据与主库一致,说明OpenGauss两节点1主1备集中式数据库集群,数据同步没有问题。测试通过。

    查看备库数据同步信息

    \q #退出备机客户端GSQL
    ./gs_ctl -D data_standby query   #查看备机的状态和同步的WAL日志的LSN数据

    注意

    此处备机开始wal日志同步的LSN位置是0/4000648,由于主库创建了表test和写入了3条数据,所以导致这些数据被同步到备库standby中,所以备库接收主库的表数据也从原来的0/4000648到了现在的0/4007DA0的LSN位置。

    3.4 停止数据库集群服务

    通过gs_ctl工具停止集中式1主1备双节点集群数据库服务。

    ./gs_ctl -D data_primary/ stop
    ./gs_ctl -D data_standby/ stop

    检查OpenGauss数据库服务进程是否还在运行。

    ps -ef | grep gauss

    从上图中看到已经没有gauss进程在运行中。说明双节点主备集中式集群服务被停止。

    可以看到安装的OpenGauss的所有工具如下所示。

    ​​​​​​​

    Logo

    昇腾计算产业是基于昇腾系列(HUAWEI Ascend)处理器和基础软件构建的全栈 AI计算基础设施、行业应用及服务,https://devpress.csdn.net/organization/setting/general/146749包括昇腾系列处理器、系列硬件、CANN、AI计算框架、应用使能、开发工具链、管理运维工具、行业应用及服务等全产业链

    更多推荐