一、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生态的发展,为开源社区贡献力量。
点击阅读原文跳转作者文章