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

openGauss 学习之路:集群部署实战探索

openGauss 2025-03-21
32

一、openGauss 简述

openGauss是一款全面友好开放,携手伙伴华为共同打造的企业级开源关系型数据库。openGauss提供面向多核架构的极致性能、全链路的业务、数据安全、基于AI的调优和高效运维的能力。openGauss深度融合华为在数据库领域多年的研发经验,结合企业级场景需求,持续构建竞争力特性。openGauss数据库具有高性能、高可用、高安全、易运维、全开放的特点。

二、部署概要

openGauss社区版本分为长期支持版本和创新版本:

  • 长期支持版本 (LTS) :规模上线使用,openGauss 6.0.0 LTS及后续LTS版本发布间隔周期为2年,社区提供3年支持,社区OGSP伙伴提供3年以后维护支持服务。openGauss LTS 目前最新发行 版本为5.0.2 LTS。

  • 创新版本 (RCx) :作为LTS版本发布前的阶段性特性体验版本,仅供测试使用,提供6个月社区支持。openGauss现已正式发行 6.0.0 RC1 版本

openGauss支持单机部署和单机HA部署两种部署方式。单机部署时,可在一个主机部署多个数据库实例,但为了数据安全,不建议用户这样部署。单机HA部署支持一台主机和最少一台备机,备机一共最多8台的配置方式。

本文通过搭建openEuler 20.03 LTS SP4虚拟机环境来部署openGauss_5.0.2 LTS 企业版 主备集群。

官方的架构图也是推荐使用这种方式。openGauss数据库提供了om工具来帮助部署和管理openGauss数据库的主备集群节点。openGauss数据库的物理复制支持一主多备和级联备等功能,未来也会加入延时复制功能。openGauss的备机是支持只读操作的,可以实现读写分离,减少主库的读负载。

下载相关介质链接:https://opengauss.org/zh/download/archive/

提前了解软硬件环境要求,链接如下:

https://docs-opengauss.osinfra.cn/en/docs/5.0.0/docs/InstallationGuide/preparing-the-software-and-hardware-installation-environment_Enterprise.html

为了实现安装过程中安装帐户权限最小化,及安装后openGauss的系统运行安全性,安装脚本在安装过程中会自动按照用户指定内容创建安装用户,并将此用户作为后续运行和维护openGauss的管理员帐户。

用户/组名

规划建议

dbgrp

建议规划单独的用户组,例如dbgrp。

初始化安装环境时,由-G参数所指定的安装用户所属的用户组。该用户组如果不存在,则会自动创建,也可提前创建好用户组。在执行gs_preinstall脚本时会检查权限。gs_preinstall脚本会自动赋予此组中的用户对安装目录、数据目录的访问和执行权限。

创建dbgrp用户组命令:groupadd dbgrp

omm

建议规划用户用于运行和维护openGauss,例如omm。

初始化安装环境时,由-U参数所指定和自动创建的操作系统用户,如果已经存在该用户,请清理该用户或更换初始化用户。从安全性考虑,对此用户的所属组规划如下:

所属组:dbgrp

在安装openGauss过程中运行“gs_preinstall”时,会创建与安装用户同名的数据库用户,即数据库用户omm。此用户具备数据库的最高操作权限,此用户初始密码由用户指定。

三、拓扑规划

实验环境

操作系统版本

数据库版本

节点名称

IP

配置说明

openEuler 20.3LTS

openGauss_5.0.2 LTS 企业版

node1

192.168.126.21

主节点

openEuler 20.3LTS

openGauss_5.0.2 LTS 企业版

node2

192.168.126.22

备节点

四、软件环境准备

1、关闭防火墙

# 关闭防火墙
sudo systemctl stop firewalld
# 禁用防火墙
sudo systemctl disable firewalld
# 查看防火墙状态
sudo systemctl status firewalld

2、配置时间同步

1.检查NTP服务是否开启

# systemctl status chronyd.service

2.查看chrony服务是否同步

# chrony tracking

3.修改chrony服务,此处设置主控机(这里假设为192.168.126.110)作为时间同步服务器,先修改主控机(服务端)设置

# vi etc/chrony.conf

添加allow 0.0.0.0/0 添加local stratum 10

注释掉上方的server iburst

4.重启服务

# systemctl restart chronyd.service

5. 其他所有节点,需同步主控机,各节点操作如下

# vi etc/chrony.conf

注释server iburst,新增

server 192.168.126.110 iburst

重启

# systemctl restart chronyd.service

检查是否同步

# chronyc sources -v

查看时间同步源状态

#chronyc sourcestats -v

立刻手工同步

#chronyc -a makestep

校验时间服务器


#chronyc tracking

3、禁用 SELinux

# 查看/etc/selinux/config
cat etc/selinux/config
# 永久禁用 SELinux
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' etc/selinux/config
sudo sed -i 's/^SELINUX=permissive$/SELINUX=disabled/' etc/selinux/config
# 查看 SELinux 当前的状态
sestatus && getenforce && cat etc/selinux/config

#重启

#reboot

4、关闭RemoveIPC

关闭RemoveIPC。CentOS操作系统默认为关闭。

5、字符集设置

将各数据库节点的字符集设置为相同的字符集,可以在/etc/profile文件中添加“export LANG=XXX”(XXX为Unicode编码)。

echo "export LANG=en_US.UTF-8" >> /etc/profile

source /etc/profile

6、安装依赖包

联网情况下可以使用默认yum源。

# yum -y install libaio-devel flex bison ncurses-devel glibc-devel patch *lsb-core* readline-devel libnsl bzip2 expect

7、修改python版本

安装软件需要依赖Python3的版本,默认Python 2.7.18版本,需要软连接指定版本。

8、操作系统参数调整

预安装时会自动修复

9、用户相关创建配置

1.创建用户和组

用户也可以不创建,后面执行预安装会自动创建(创建完成不影响)

#创建用户&&设置密码

groupadd dbgroup

useradd -g dbgroup omm

passwd omm

2.配置免密码登录

编辑/etc/sudoers文件,文末加入:

omm ALL=(ALL) NOPASSWD:ALL

如果想要控制某个用户(或某个组用户)只能执行root权限中的一部分命令,

或者允许某些用户使用sudo时不需要输入密码,一般修改/etc/sudoers文件

cat << EOF >>/etc/sudoers

omm ALL=(ALL) NOPASSWD:ALL

EOF

测试omm用户登录

$ sudo -su root

3.创建omm用户ssh key

后面执行预安装会自动创建可以忽略。

切换用户

# su – omm

执行命令,一直按回车键就行

$ ssh-keygen -t rsa

4.指定公钥文件

配置节点omm用户的互信。后面执行预安装会自动创建可以忽略。

$ ssh-copy-id -i ~/.ssh/id_rsa.pub omm@192.168.126.22

$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.126.22

10、创建目录并上传安装包

以root用户登录待安装openGauss的主节点,并按规划创建存放安装包的目录。

#创建软件安装目录

mkdir -p /opt/software/openGauss

#将安装包“openGauss-x.x.x-openEuler-64bit-all.tar.gz”和配置文件“cluster_config.xml”都上传至上一步所创建的目录中。

#在安装包所在的目录下,解压安装包openGauss-x.x.x-openEuler-64bit-all.tar.gz。安装包解压后,会有OM安装包和Server安装包。继续解压OM安装包,会在/opt/software/openGauss路径下自动生成script子目录,并且在script目录下生成gs_preinstall等各种OM工具脚本。

cd /opt/software/openGauss

tar -zxvf openGauss-5.0.2-openEuler-64bit-all.tar.gz

tar -zxvf openGauss-5.0.2-openEuler-64bit-om.tar.gz

chmod 755 -R /opt/software

chown -R omm:dbgrp /opt/

11、创建XML配置文件(cluster_config.xml)

包含部署openGauss的服务器信息、安装路径、IP地址以及端口号等。

在script/gspylib/etc/conf/cluster_config_template.xml获取XML文件模板。

cd /opt/software/openGauss/

cp script/gspylib/etc/conf/cluster_config_template.xml /opt/software/openGauss/

mv cluster_config_template.xml cluster_config.xml

修改配置文件如下:

    [root@node1 openGauss]# cat cluster_config.xml
    <?xml version="1.0" encoding="utf-8"?>
    <ROOT>
    <CLUSTER>
    <PARAM name="clusterName" value="Cluster_OpenGauss" />
    <PARAM name="nodeNames" value="node1,node2"/>
    <PARAM name="gaussdbAppPath" value="/opt/huawei/install/app" />
    <PARAM name="gaussdbLogPath" value="/var/log/omm" />
    <PARAM name="tmpMppdbPath" value="/opt/huawei/tmp"/>
    <PARAM name="gaussdbToolPath" value="/opt/huawei/install/om" />
    <PARAM name="corePath" value="/opt/huawei/corefile"/>
    <PARAM name="backIp1s" value="192.168.126.21,192.168.126.22"/>
    </CLUSTER>
    <DEVICELIST>
    <DEVICE sn="node1">
    <PARAM name="name" value="node1"/>
    <PARAM name="azName" value="AZ1"/>
    <PARAM name="azPriority" value="1"/>
    <PARAM name="backIp1" value="192.168.126.21"/>
    <PARAM name="sshIp1" value="192.168.126.21"/>
    <!-- dn -->
    <PARAM name="dataNum" value="1"/>
    <PARAM name="dataPortBase" value="15400"/>
    <PARAM name="dataNode1" value="/opt/huawei/install/data/dn,node2,/opt/huawei/install/data/dn"/>
    <PARAM name="dataNode1_syncNum" value="0"/>
    </DEVICE>
    <DEVICE sn="node2">
    <PARAM name="name" value="node2"/>
    <PARAM name="azName" value="AZ1"/>
    <PARAM name="azPriority" value="1"/>
    <PARAM name="backIp1" value="192.168.126.22"/>
    <PARAM name="sshIp1" value="192.168.126.22"/>
    </DEVICE>
    </DEVICELIST>
    </ROOT>
    复制


    五、openGauss 主备集群部署

    1、安装前检查

    安装前置脚本gs_preinstall可以协助用户自动完成如下的安装环境准备工作:

    • 自动设置Linux内核参数以达到提高服务器负载能力的目的。这些参数直接影响数据库系统的运行状态,请仅在确认必要时调整。openGauss所设置的Linux内核参数取值请参见配置操作系统参数。

    • 自动将openGauss配置文件、安装包拷贝到openGauss主机的相同目录下。

    • openGauss安装用户、用户组不存在时,自动创建安装用户以及用户组。

    • 读取openGauss配置文件中的目录信息并创建,将目录权限授予安装用户。

    执行预安装命令:使用预安装脚本检查系统环境,并设置必要的系统参数(只在主节点执行)。

    # cd /opt/software/openGauss/script

    # ./gs_preinstall -U omm -G dbgrp -X /opt/software/openGauss/cluster_config.xml --sep-env-file=/home/omm/env

    创建用户omm

    创建root互信如上选择yes

    创建omm互信

    Preinstallation succeeded.

    部分Warning可以执行/opt/software/openGauss/script/gs_checkos -i A -h node1 --detail查看手工修复。

    2、配置 omm 用户环境变量

      $ vi .bash_profile
      #使该环境变量生效
      export MPPDB_ENV_SEPARATE_PATH=/home/omm/env
      export GPHOME=/opt/huawei/install/om
      export UNPACKPATH=/opt/software/openGauss
      export PGDATA=/opt/huawei/install/data/dn
      export PGPORT=15400
      export PATH=$GPHOME/script/gspylib/pssh/bin:$GPHOME/script:$PATH
      export LD_LIBRARY_PATH=$GPHOME/lib:$LD_LIBRARY_PATH
      export PYTHONPATH=$GPHOME/lib
      export PATH=/root/gauss_om/omm/script:$PATH
      export GAUSSHOME=/opt/huawei/install/app
      export PATH=$GAUSSHOME/bin:$PATH
      export LD_LIBRARY_PATH=$GAUSSHOME/lib:$LD_LIBRARY_PATH
      export S3_CLIENT_CRT_FILE=$GAUSSHOME/lib/client.crt
      export GAUSS_VERSION=5.0.2
      export PGHOST=/opt/huawei/tmp
      export GAUSSLOG=/var/log/omm/omm
      umask 077
      export GAUSS_ENV=1
      source .bash_profile
      复制


      3、openGauss 主备集群部署

      使用具有适当权限的用户(如omm用户)执行安装命令。指定参数启动数据库,内存、进程和字符集等参数,主节点执行即可。

      $gs_install -X /opt/software/openGauss/cluster_config.xml --gsinit-parameter="--encoding=UTF8" --dn-guc="max_process_memory=4GB" --dn-guc="shared_buffers=128MB" --dn-guc="bulk_write_ring_size=128MB" --dn-guc="cstore_buffers=16MB"

      中间提示设置数据库密码,之后继续 2次Successfully完成安装部署。

      4、验证测试

      安装完成后,验证openGauss数据库是否成功安装并运行。

      查看集群状态

      $ gs_om -t status --detail

      $ gs_om -t status -h node1

      $ gs_om -t status -h node2

      数据库安装完成后,默认生成名称为postgres的数据库。第一次连接数据库时可以连接到此数据库。主备节点同时连接测试。

      5、设置备库只读(可选)

      备机可读特性为可选特性,需要修改配置参数并重启主备机器后才能使用。在开启备机可读之后,备机将支持读操作,并满足数据一致性要求。

      1.如果主备机上的openGauss数据库实例正在运行,请先分别停止主备机上的数据库实例。

      2.分别打开主机与备机的postgresql.conf配置文件,找到并将对应参数修改为:

      wal_level=hot_standby;hot_standby = on;hot_standby_feedback = on。

      3.参数

      max_standby_streaming_delay、 max_prepared_transactions、 max_standby_archive_delay、 hot_standby_feedback可以参考《数据库参考》按需进行设置。

      4.修改完成后,分别启动主备机即可。

      六、卸载 OpenGauss 集群

      1、卸载openGauss

      卸载openGauss的过程包含卸载openGauss和对openGauss服务器的环境做清理。

      openGauss提供了卸载脚本帮助用户完整的卸载openGauss。

      以操作系统用户omm登录数据库主节点。

      使用gs_uninstall卸载openGauss。

      gs_uninstall --delete-data

      或者在openGauss中每个节点执行本地卸载。

      gs_uninstall --delete-data -L

      2、一键式环境清理

      在openGauss卸载完成后,如果不需要在环境上重新部署openGauss,可以运行脚本gs_postuninstall对openGauss服务器上环境信息做清理。openGauss环境清理是对环境准备脚本gs_preinstall所做设置的清理。

      前提条件

      • openGauss卸载执行成功。

      • root用户互信可用。

      • 只能使用root用户执行gs_postuninstall命令。

      操作步骤

      1.以root用户登录openGauss服务器进入script路径下。

      cd /opt/software/openGauss/script

      2.使用gs_postuninstall进行清理。若为环境变量分离的模式安装的数据库需要source环境变量分离文件ENVFILE。

      ./gs_postuninstall -U omm -X /opt/software/openGauss/cluster_config.xml --delete-user --delete-group

      或者在openGauss中每个节点执行本地后置清理。

      ./gs_postuninstall -U omm -X /opt/software/openGauss/cluster_config.xml --delete-user --delete-group -L

      omm为运行openGauss的操作系统用户名,/opt/software/openGauss/cluster_config.xml为openGauss配置文件路径。

      若为环境变量分离的模式安装的数据库需删除之前source的环境变量分离的env参数。

      unset MPPDB\_ENV\_SEPARATE\_PATH

      3.删除openGauss数据库各节点root用户的互信

      七、集群启停

      1、启动数据库服务

      $ gs_om -t start

      2、停止数据库服务

      $ gs_om -t stop

      3、节点数据库服务启停

      启停主备节点

      主节点:
      $ gs_ctl start|stop|restart -D /opt/huawei/install/data/dn -M primary

      备节点:
      $ gs_ctl start|stop|restart -D /opt/huawei/install/data/dn -M standby

      八、集群主备切换

      主备切换

      openGauss在运行过程中,数据库管理员可能需要手工对数据库节点做主备切换。例如发现数据库节点主备failover后需要恢复原有的主备角色,或怀疑硬件故障需要手动进行主备切换。级联备机不能直接转换为主机,只能先通过switchover或者failover成为备机,然后再切换为主机。

      查看集群状态

      $ gs_om -t status –detail

      以操作系统用户omm登录准备切换为主节点的备节点,执行如下命令

      $ gs_ctl switchover -D /opt/huawei/install/data/dn

      /opt/huawei/install/data/dn为备数据库节点的数据目录。

      查看集群状态

      $ gs_om -t status –detail

      备注:对于同一数据库,上一次主备切换未完成,不能执行下一次切换。当业务正在操作时,发起switchover,可能主机的线程无法停止导致switchover显示超时,实际后台仍然在运行,等主机线程停止后,switchover即可完成。比如在主机删除一个大的分区表时,可能无法响应switchover发起的信号。

      主机故障时,可以在备机执行如下命令。

      $ gs_ctl failover -D /opt/huawei/install/data/dn

      switchover或failover成功后,执行如下命令记录当前主备机器信息。

      $ gs_om -t refreshconf

      九、问题整理

      1、执行预安装命令报错如下:

      解决办法:

      安装expect包

      2、执行预安装命令报错如下:

      解决办法:

      openEuler-LTS 20.03版操作系统提供的libreadline库文件为libreadline.so.8,而并非数据库初始化脚本所需要的libreadline.so.7,初始化时自然无法找到这个文件。在/usr/lib64路径下对两个文件建立软连接。

      3、执行预安装命令报错如下:

      解决办法:

      删除上次创建的文件夹及文件/opt/huawei/install

      4、执行安装命令报错如下:

      解决办法:

      赋权

      5、执行安装命令报错如下:

      解决办法:

      执行vi ~/.bashrc查看环境变量,将GAUSS_ENV=2改为GAUSS_ENV=1,重新执行安装命令即可。

      十、总结

      通过端午假期两天的深入学习与实践,我对OpenGauss数据库有了初步的认识。期待在未来的日子里,能够更深入地探索OpenGauss的更多高级特性,将其应用于实际项目中,以解决实际问题。同时,我也期待与更多的技术同行一起交流学习,共同推动OpenGauss生态的发展,为开源社区贡献力量。

      点击阅读原文跳转作者文章

      文章转载自openGauss,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论