OpenGauss集群部署实战探索一、openGauss 简述
openGauss是一款全面友好开放,携手伙伴华为共同打造的企业级开源关系型数据库。openGauss提供面向多核架构的极致性能、全链路的业务、数据安全、基于AI的调优和高效运维的能力。openGauss深度融合华为在数据库领域多年的研发经验,结合企业级场景需求,持续构建竞争力特性。openGauss数据库具有高性能、高可用、高安全、易运维、全开放的特点。
二、部署概要
openGauss社区版本分为长期支持版本和创新版本:
- 长期支持版本 (LTS) :规模上线使用,openGauss 6.0.0 LTS及后续LTS版本发布间隔周期为2年,社区提供3年支持,社区OGSP伙伴提供3年以后维护支持服务。
- 创新版本 (RCx) :作为LTS版本发布前的阶段性特性体验版本,仅供测试使用,提供6个月社区支持。
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、配置时间同步
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 >/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
五、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,重新执行安装命令即可。