基于Linux平台的openGauss一主两备高可用集群部署与运维实践研究

基于Linux平台的openGauss一主两备高可用集群部署与运维实践研究

前言

本文基于 openGauss 数据库,介绍在 Linux 环境下从安装配置到集群部署的完整流程,涵盖节点规划、环境准备、脚本执行与状态验证等关键步骤。通过本篇实战指南,你将掌握如何快速构建稳定高效的 openGauss 高可用集群体系,为企业级应用提供坚实的数据保障。

Linux配置OpenGauss数据库远程访问

上传安装包至指定目录

开始部署openGauss数据库之前,需要进行充分的准备工作。首先将下载的openGauss安装包通过root用户上传到Linux服务器的指定目录。建议选择系统级的目录进行存放,这样便于统一管理和维护,通常会将安装包上传至/usr/local/目录下,这是Linux系统中存放本地安装软件的常规位置。

创建安装目录与设置权限

创建专用的安装目录并设置适当的权限是确保安装顺利进行的重要步骤,需要创建一个专门的目录来存放openGauss数据库的相关文件。

bash 复制代码
mkdir /usr/local/openGauss

设置目录权限

保证安装过程中不会出现权限问题,需要给该目录设置适当的访问权限。这里给予该目录所有人可以访问的权限,采用官网推荐的单节点安装方式。

bash 复制代码
chmod 777 /usr/local/openGauss

切换至普通用户执行安装

由于openGauss数据库的安全设计,不允许直接使用root用户进行安装,为了避免潜在的安全风险,因此需要切换到普通用户来进行后续的安装操作。

切换到普通用户后,需要解压openGauss压缩包到之前创建的目录中,解压过程需要使用正确的参数来确保文件完整提取。

bash 复制代码
tar -jxf openGauss-3.1.1-CentOS-64bit.tar.bz2 -C /usr/local/openGauss

进入安装目录

解压完成后,需要进入解压后目录下的simpleInstall目录,这个目录包含了安装所需的所有脚本和配置文件。

bash 复制代码
cd /usr/local/openGauss/simpleInstall

运行 install.sh 脚本

接下来执行install.sh脚本进行openGauss的安装,其中-w参数用于设置数据库的初始密码,这是安装过程中必须提供的安全参数。安装完成后,还需要更新环境变量以确保数据库命令可以正常使用。

bash 复制代码
sh install.sh  -w "xxxx" &&source ~/.bashrc

SEMMNS 参数错误解决方案

安装过程中,可能会遇到系统参数相关的错误提示。其中一个常见的问题是SEMMNS参数设置不足,这会影响到数据库的正常运行。

bash 复制代码
the maximum number of SEMMNS is not correct. The current SEMMNS value is: 128. Please check it.
It should be greater than 200. You can modify it in file '/etc/selinux/config'.

调整系统参数

遇到这个问题时,需要切换到root权限的用户执行相应的命令来调整系统参数。通过修改内核信号量参数,可以解决这个安装障碍。

bash 复制代码
sysctl -w kernel.sem="250 85000 250 330" 

重新执行安装

参数调整完成后,重新执行安装命令即可顺利完成安装。安装完成后,需要验证数据库进程是否正常运行,这是确认安装成功的重要步骤

bash 复制代码
ps ux | grep gaussdb

查看数据库运行进程

当看到相关的数据库进程信息显示时,表示openGauss数据库已经成功安装并正在运行。至此,在Linux系统上安装openGauss数据库的任务就完成了。

安装cpolar内网穿透工具

Linux 安装cpolar,上面安装成功了openGauss数据库,下面在Linux安装cpolar内网穿透工具,通过cpolar 转发本地端口映射的http公网地址,可以很容易实现远程访问,而无需自己注册域名购买云服务器。下面是安装cpolar步骤。

bash 复制代码
curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash

配置cpolar系统服务

安装完成后,需要将cpolar添加到系统服务中,这样可以确保cpolar在系统重启后能够自动启动,提供持续稳定的服务。

bash 复制代码
sudo systemctl enable cpolar

启动cpolar服务

添加系统服务后,需要立即启动cpolar服务,使其开始工作并准备接收配置指令。

bash 复制代码
sudo systemctl start cpolar

访问cpolar管理界面

cpolar安装成功后,在外部浏览器上访问Linux 的9200端口即:【http://局域网ip:9200】,使用cpolar账号登录,登录后即可看到cpolar web 配置界面,结下来在web 管理界面配置即可。

创建openGauss主节点端口号公网地址

登录cpolar web UI管理界面后需要点击左侧仪表盘的隧道管理来创建新的隧道。隧道创建是建立远程连接的关键步骤,需要仔细配置各个参数。

  • 隧道名称:可以根据实际用途自定义,但要注意不要与已有的隧道名称重复,以便于识别和管理
  • 协议:选择tcp协议,这是数据库连接的标准协议
  • 本地地址:设置为5432,这是openGauss数据库的默认监听端口
  • 域名类型:选择临时随机TCP端口,这对于测试环境来说既方便又经济
  • 地区:选择China VIP,这样可以获得更好的网络连接性能

获取公网连接地址

隧道创建成功后,需要打开左侧的在线隧道列表,查看刚刚创建隧道后生成的tcp地址。这个地址就是需要的公网连接地址,可以在任意有网络连接的设备上使用该地址进行数据库连接。

远程连接测试

cpolar中成功创建公网地址后,可以使用gsql工具通过cpolar公网地址进行远程连接测试。连接时需要提供完整的连接参数,包括主机地址、端口号、数据库名称、用户名和密码。

  • host:cpolar提供的公网域名地址
  • port:公网地址对应的端口号
  • dbname:要连接的具体数据库名称
  • user:数据库的认证用户名
  • password:对应用户的认证密码
bash 复制代码
gsql -d "host=3.tcp.vip.cpolar.cn port=10290 dbname=postgres user=jon password=xxxxxx"

配置固定TCP地址

生产及长期开发环境建议配置固定 TCP 地址,核心优势是地址永久不变,可避免端口变化导致的连接中断,还能简化应用配置管理。配置后通过 gsql 连接测试,成功即可获得稳定访问地址,为后续开发使用提供便利。

基于Linux的openGauss一主两备集群部署

准备主节点与上传安装包

主节点上执行以下操作来准备集群部署环境。首先创建软件目录并上传安装包,这是确保所有必要文件就位的基础步骤。

创建软件目录并上传安装包:

bash 复制代码
mkdir -p /opt/software/openGauss

解压安装包:

bash 复制代码
tar xf openGauss-All-6.0.2-openEuler22.03-x86_64.tar.gz

编写集群配置文件 cluster_config.xml

主节点需生成 XML 格式的集群配置文件,这是定义集群架构与各节点角色的关键,文件将包含集群全局参数及各节点详细配置信息。

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?> 
<ROOT> 
 <CLUSTER> 
     <PARAM name="clusterName" value="Cluster_wanglu" /> 
     <PARAM name="nodeNames" value="openGauss01,openGauss02,openGauss03" /> 
     <PARAM name="gaussdbAppPath" value="/data/openGauss/install/app" /> 
     <PARAM name="gaussdbLogPath" value="/data/openGauss/log" /> 
     <PARAM name="tmpMppdbPath" value="/data/openGauss/tmp"/> 
     <PARAM name="gaussdbToolPath" value="/data/openGauss/install/om" /> 
     <PARAM name="corePath" value="/data/openGauss/corefile"/> 
     <PARAM name="backIp1s" value="10.0.0.51,10.0.0.52,10.0.0.53"/> 
 </CLUSTER> 
 <DEVICELIST> 
     <DEVICE sn="openGauss01"> 
         <PARAM name="name" value="openGauss01"/> 
         <PARAM name="azName" value="AZ1"/> 
         <PARAM name="azPriority" value="1"/> 
         <PARAM name="backIp1" value="10.0.0.51"/> 
         <PARAM name="sshIp1" value="10.0.0.51"/> 
         <PARAM name="cmsNum" value="1"/> 
         <PARAM name="cmServerPortBase" value="15000"/> 
         <PARAM name="cmServerListenIp1" value="10.0.0.51,10.0.0.52,10.0.0.53"/> 
         <PARAM name="cmServerHaIp1" value="10.0.0.51,10.0.0.52,10.0.0.53"/> 
         <PARAM name="cmServerLevel" value="1"/> 
         <PARAM name="cmServerRelation" value="openGauss01,openGauss02,openGauss03"/> 
         <PARAM name="cmDir" value="/data/openGauss/data/cm"/> 
         <PARAM name="dataNum" value="1"/> 
         <PARAM name="dataPortBase" value="15400"/> 
         <PARAM name="dataNode1" value="/data/openGauss/data/dn,openGauss02,/data/openGauss/data/dn,openGauss03,/data/openGauss/data/dn"/> 
         <PARAM name="dataNode1_syncNum" value="0"/> 
     </DEVICE> 
     <DEVICE sn="openGauss02"> 
         <PARAM name="name" value="openGauss02"/> 
         <PARAM name="azName" value="AZ1"/> 
         <PARAM name="azPriority" value="1"/> 
         <PARAM name="backIp1" value="10.0.0.52"/> 
         <PARAM name="sshIp1" value="10.0.0.52"/> 
         <PARAM name="cmServerPortStandby" value="15000"/> 
         <PARAM name="cmDir" value="/data/openGauss/data/cm"/> 
     </DEVICE> 
     <DEVICE sn="openGauss03"> 
         <PARAM name="name" value="openGauss03"/> 
         <PARAM name="azName" value="AZ1"/> 
         <PARAM name="azPriority" value="1"/> 
         <PARAM name="backIp1" value="10.0.0.53"/> 
         <PARAM name="sshIp1" value="10.0.0.53"/> 
         <PARAM name="cmServerPortStandby" value="15000"/> 
         <PARAM name="cmDir" value="/data/openGauss/data/cm"/> 
     </DEVICE> 
 </DEVICELIST> 
</ROOT>

运行安装前置脚本

执行安装前置脚本,主节点执行,创建完openGauss配置文件后,在执行安装前,为了后续能以最小权限进行安装及openGauss管理操作,保证系统安全性,需要运行安装前置脚本gs_preinstall准备好安装用户及环境。

bash 复制代码
[root@openGauss01 openGauss]# ./script/gs_preinstall -U omm -G dbgrp -X cluster_config.xml

清除root用户的SSH互信配置:

bash 复制代码
rm -rf /root/.ssh

执行 gs_install 安装集群

基于指定的XML配置文件安装openGauss集群。

  • gs_install 是 openGauss 的集群安装工具,用于根据配置文件部署集群
  • -X 参数指定集群配置文件(XML 格式)的路径,这里为 /opt/software/openGauss/cluster_config.xml,文件中定义了集群节点、路径、端口等关键信息
  • 执行前需确保:已切换到 omm 用户、配置文件正确无误、节点间 SSH 互信已建立
bash 复制代码
gs_install -X /opt/software/openGauss/cluster_config.xml

查看集群状态

安装完成后,使用以下命令查看集群状态,确认所有节点正常运行。

bash 复制代码
gs_om -t status --detail

集群运维管理

日常监控与维护

查看集群详细状态:

bash 复制代码
gs_om -t status --detail

查看集群配置文件:

bash 复制代码
gs_om -t view

重启集群:

bash 复制代码
gs_om -t restart

停止集群:

bash 复制代码
gs_om -t stop

数据库连接与管理

连接主节点数据库:

bash 复制代码
gsql -d postgres -p 15400 -h openGauss01 -U omm

查看数据库状态:

sql 复制代码
SELECT * FROM pg_stat_activity;

查看复制状态:

sql 复制代码
SELECT * FROM pg_stat_replication;

故障切换测试

手动切换主备:

bash 复制代码
gs_ctl switchover -D /data/openGauss/data/dn

查看切换日志:

bash 复制代码
tail -f /data/openGauss/log/omm/om/gs_ctl-*.log

性能优化建议

内存参数调优

根据服务器实际内存配置调整以下参数:

sql 复制代码
-- 设置共享内存大小
ALTER SYSTEM SET shared_buffers = '2GB';

-- 设置工作内存
ALTER SYSTEM SET work_mem = '64MB';

-- 设置维护工作内存
ALTER SYSTEM SET maintenance_work_mem = '1GB';

网络参数优化

sql 复制代码
-- 调整最大连接数
ALTER SYSTEM SET max_connections = 1000;

-- 设置TCP保活参数
ALTER SYSTEM SET tcp_keepalives_idle = 60;
ALTER SYSTEM SET tcp_keepalives_interval = 10;
ALTER SYSTEM SET tcp_keepalives_count = 10;

安全配置

访问控制配置

配置客户端认证:

bash 复制代码
# 编辑pg_hba.conf文件
vi /data/openGauss/data/dn/pg_hba.conf

添加访问规则:

sql 复制代码
# TYPE  DATABASE        USER            ADDRESS                 METHOD
host    all             all             10.0.0.0/24            md5
host    all             all             192.168.0.0/16         md5

备份与恢复策略

执行基础备份:

bash 复制代码
gs_basebackup -D /data/backup/ -h openGauss01 -p 15400 -U omm -W

配置自动备份:

bash 复制代码
# 创建备份脚本
vi /opt/scripts/backup_opengauss.sh

总结

这篇实操指南把 Linux 上 openGauss 一主两备集群的核心流程从单节点安装、cpolar 远程访问(还踩了 SEMMNS 参数的坑),到 XML 配节点、脚本一键部署集群,再到日常监控、故障切换、性能调优和备份,全程都是能直接复用的步骤,帮我们快速落地高可用数据库方案,解决了开发和生产中数据库稳定运行、远程管理的核心需求。

相关推荐
百***86052 小时前
Spring BOOT 启动参数
java·spring boot·后端
by__csdn2 小时前
微服务与单体那些事儿
java·后端·微服务·云原生·架构
天草二十六_简村人2 小时前
dify中级入门示例--使用知识库搭建智能客服机器人
后端·ai·云原生·ai编程
optimistic_chen3 小时前
【Java EE进阶 --- SpringBoot】AOP原理
spring boot·笔记·后端·java-ee·开源·aop
IT_陈寒3 小时前
Vue3性能优化实战:我从这5个技巧中获得了40%的渲染提升
前端·人工智能·后端
IUGEI4 小时前
Websocket、HTTP/2、HTTP/3原理解析
java·网络·后端·websocket·网络协议·http·https
iOS开发上架哦4 小时前
iOS App HTTPS 抓包实战:从 TLS 分析到多工具协同的完整解决方案
后端
申阳4 小时前
Day 12:09. 基于Nuxt开发博客项目-使用NuxtContent构建博客模块
前端·后端·程序员
得物技术4 小时前
Golang HTTP请求超时与重试:构建高可靠网络请求|得物技术
java·后端·go