☰
openGauss在CentOS与openEuler上的完整安装指南与避坑实践
2026/10/19 8:11:12 网站建设 项目流程

把一个开源数据库老老实实装进 CentOS 或者 openEuler,说难不难,说简单也真不简单。openGauss 这几年在国产数据库里关注度一直很高,尤其是它从内核层面就针对企业级场景做了一堆优化,比如并行查询、备机强一致、内存表、数据压缩这些能力,都比传统 PostgreSQL 系的开源库要更贴近生产环境。但问题也恰恰出在这里——它确实不是那种 apt install 一下就能跑的东西,安装前要改系统参数、建用户、调内核,一步没做对,后面启动数据库的时候各种诡异报错就来了。

这篇文章我打算把 openGauss 在 CentOS 和 openEuler 上的安装过程从头到尾捋一遍。不是我背文档,而是把每一个关键步骤背后的“为什么”讲清楚,顺便把那些文档不会写、报错了才明白的坑也一并填上。如果你是刚接触 openGauss、想在自己的服务器上先跑起来做测试,或者公司内部要搭一套国产数据库环境做评估,这篇应该能让你少折腾一晚上。

1. 环境准备:选对 Linux 发行版和 openGauss 版本

1.1 CentOS 和 openEuler 到底怎么选

很多人一上来就问,到底用 CentOS 还是 openEuler?我的建议很直接:如果你只是为了学习、跑 Demo、写测试用例,CentOS 7.9 或者 CentOS Stream 都没问题,网上资料多,遇到问题查起来方便。但如果你是给公司的生产环境做选型评估,我更推荐 openEuler。原因很简单,openGauss 和 openEuler 本身就是同源生态,openEuler 的内核版本、编译工具链和 glibc 版本都是经过适配的,openGauss 在 openEuler 上的表现更稳定,官方文档里很多性能指标也是在 openEuler 上跑出来的。

还有一个很现实的原因:CentOS 8 已经停止维护了,CentOS 7 也进入了 EOL 阶段,新装系统如果是从安全角度考虑,我不太建议再往 CentOS 上押注。openEuler 有社区长期维护,版本节奏也稳定,如果你所在团队已经在用鲲鹏芯片的服务器,那 openEuler 基本就是唯一选择,x86 架构下装 openEuler 也能用,但体验最好的还是 ARM 环境。

1.2 openGauss 的三个版本分支,别下错了

openGauss 官方提供三类安装包:企业版、轻量版、极简版。我第一次装的时候就吃过亏,下载的时候图省事直接找了最小的包,结果装完发现一堆功能没有,还得重新折腾。

  • 企业版:完整功能包,支持一主多备、级联备机、逻辑复制、资源池化这些高级特性,适合做生产环境和功能验证。安装方式支持命令行安装和图形化安装,包体在 200MB 左右。
  • 轻量版:把一些企业级组件裁剪掉了,核心的数据库能力保留得比较完整,适合在开发环境、测试环境跑,内存占用小,启动快。如果你只是学 SQL、练调优、做应用开发联调,这个版本足够。
  • 极简版:只有一个最小化的数据库内核,可以直接用单机模式跑,包体非常小,主要是给开发者做内核研究用的,日常使用不推荐。

如果你不确定该选哪个,我的建议是直接下载企业版。虽然包大一点,安装步骤多几步,但功能完整,后续想测什么特性都有,省得以后再换版本。轻量版适合那种手里只有 2G 内存小机器的场景,企业版光共享内存就要吃掉不少。

1.3 磁盘和内存的硬性门槛

openGauss 对硬件的要求不算特别苛刻,但也不是什么机器都能跑。最低配置要求 2 核 CPU、2GB 内存、10GB 磁盘,这个配置基本只能启动服务,跑点简单查询。我自己实测下来,4 核 8GB 内存是比较舒服的起步配置,跑 TPC-C 之类的基准测试至少得 16GB 内存。

磁盘方面有个细节容易被忽略:openGauss 安装过程会创建 xlog 日志目录、数据目录和临时文件目录,三个目录加起来初始就要占 1GB 左右的空间。而且数据库运行时的 WAL 日志会持续增长,如果磁盘空间规划得太紧,跑几天就会报 “No space left on device”。建议给数据目录预留至少 20GB,如果要做压力测试或者跑大批量数据导入,50GB 起步才稳妥。

2. 安装前的系统配置:这些参数不改,装上也会出事

2.1 为什么 openGauss 安装脚本非要你用 root 执行

openGauss 的正常安装流程是先用 root 用户执行安装脚本,脚本会帮你自动创建 omm 用户和 dbadmin 用户组。这个设计其实是参考了企业级数据库的一贯做法:数据库服务本身不能用 root 跑,因为 root 权限太大,一旦数据库被攻击或者 SQL 注入,后果不堪设想。但创建用户、改系统参数这些操作又必须要 root,所以官方把安装流程拆成了两段:root 做系统初始化,然后切换到 omm 用户完成数据库初始化。

这里有一个很实用的建议:不要手动去创建 omm 用户。官方安装脚本会处理用户创建、家目录设置、环境变量等一堆细节。我自己第一次装的时候想当然地先建了个 opengauss 用户,结果后面切用户执行安装脚本时,各种权限和路径问题接踵而至,白白浪费了一个小时。老老实实让脚本干它该干的活。

2.2 关闭防火墙和 SELinux,不是偷懒而是必须

openGauss 默认监听 26000 端口,如果防火墙开着,外部客户端连接时会出现 “Connection refused” 或者连接超时的现象,但你在服务器本机用 gsql 连接却是正常的。这种“本机能连、外部连不上”的问题,十有八九就是防火墙拦了端口。

# 停止防火墙服务 systemctl stop firewalld # 禁用防火墙开机自启 systemctl disable firewalld # 永久关闭 SELinux(需要修改配置文件) # 将 SELINUX=enforcing 改为 SELINUX=disabled vim /etc/selinux/config

SELinux 的问题更隐蔽,即使你开着 SELinux 并且放行了端口,数据库进程访问文件目录的权限也可能被 SELinux 的策略限制,导致数据库启动失败或者运行时报权限错误。新装系统如果没特殊安全要求,直接关掉,等数据库跑通了再去考虑精细化加固。需要注意的是,修改 SELinux 配置必须重启系统才能生效,不要妄想 setenforce 0 能一劳永逸。

2.3 内核参数调整:一条条说清楚为什么要改

openGauss 安装文档里有一堆内核参数要设置,我当初嫌麻烦,想着先装上去再说,结果数据库启动之后动不动就报错,最后老老实实回来补参数。这里我把核心的几个参数掰开揉碎讲清楚。

# 修改 systemd 默认 limits 配置 cat >> /etc/security/limits.conf << EOF * soft stack 1024000 * hard stack 1024000 * soft nofile 65536 * hard nofile 65536 * soft nproc 131072 * hard nproc 131072 EOF # 关掉透明大页,避免性能抖动 echo always > /sys/kernel/mm/transparent_hugepage/defrag

nofile是文件描述符上限,数据库系统每建立一条连接、每打开一个表文件都要消耗文件描述符,默认的 1024 根本不够用。我遇到过并发连接稍高就报 “Too many open files” 的情况,就是这个问题。stack调大是为了防止某些深度递归的 SQL 查询导致栈溢出崩溃。nproc是进程数限制,数据库会 fork 出后台进程处理各类任务,限制太小会直接导致连接失败。

内核参数里最容易被忽略的是net.core.somaxconn和net.ipv4.tcp_max_syn_backlog,这两个参数控制 TCP 连接队列的大小。高并发场景下如果队列太小,客户端连接请求会被直接丢弃,表现就是连接建立失败但服务器日志里没有异常。生产环境建议都调到 65535。

还有一个值得注意的参数是系统共享内存kernel.shmall和kernel.shmmax。openGauss 默认使用共享内存来缓存数据,如果共享内存上限设置得太小,数据库启动时分配缓存会报could not resize shared memory segment的错。安装文档里给的是 536870912(512MB),但我实测 8GB 内存的机器,这个值调成 4294967296(4GB)才能让数据库跑得比较舒服。

3. 正式安装 openGauss:完整流程与参数说明

3.1 下载安装包和校验

安装包可以从 openGauss 官网下载,注意选择对应架构的包。x86 和 ARM 的安装包是不通用的,下载的时候看一眼包名里的架构标识,x86_64还是aarch64,下错了装到一半就会报错。文件比较大,建议用 wget 或者浏览器下载时保持网络稳定,下载完成后做一下 SHA256 校验,防止下载损坏。

sha256sum openGauss-5.0.0-CentOS-64bit.tar.bz2

官方页面上会给出对应的校验值,对比一下一致再执行安装。这一步很多人会跳过,但我觉得命令行下载的场景下,文件损坏其实并不罕见。

3.2 解压和配置 cluster_config 文件

下载下来的包是一个 tar.bz2 压缩文件,解压之后会得到安装脚本、二进制文件、配置文件模板等一堆东西。其中cluster_config.xml是安装过程的核心配置文件,你要做的事情就是按实际情况改里面的主机名、IP、数据目录这些信息。

<CLUSTER> <PARAM name="clusterName" value="dbCluster"/> <PARAM name="nodeNames" value="node1"/> <PARAM name="gaussdbAppPath" value="/opt/software/openGauss/app"/> <PARAM name="gaussdbLogPath" value="/var/log/omm"/> <PARAM name="tmpMppdbPath" value="/opt/software/openGauss/tmp"/> <PARAM name="gaussdbToolPath" value="/opt/software/openGauss/tool"/> <PARAM name="corePath" value="/var/log/core"/> <PARAM name="backIp1s" value="192.168.1.10"/> <PARAM name="dataNum" value="1"/> </CLUSTER>

注意nodeNames这里要填的是服务器的 hostname,不是 IP 地址。这是我踩过的一个坑:我一开始在里面填了 IP 地址,安装脚本执行到生成配置文件的阶段就报错了,提示找不到对应的主机名。如果你不记得当前机器的 hostname,执行hostname命令看一下。backIp1s填的是内网 IP,如果你只是单机部署,填本机 IP 即可。

3.3 一键安装命令的执行过程和资源消耗

配置文件准备好之后,安装就变得非常简单了,一条命令搞定:

./install.sh -U omm -p /opt/software/openGauss/app -X /opt/software/openGauss/cluster_config.xml

-U omm指定数据库运行用户,-p指定安装目录,-X指定刚才改好的配置文件。安装脚本会依次完成:创建用户和用户组、设置目录归属、修改环境变量、初始化数据库实例、配置开机自启服务。整个过程大概五分钟到十分钟,取决于机器性能。

这里有个耐心问题。脚本执行过程中终端会输出大量日志信息,中间可能会有一些 WARNING 甚至 ERROR 级别的输出,但千万不要看到 ERROR 就慌了。有些 WARNING 是可以忽略的,比如关于透明大页的提示,有些 ERROR 只是某个可选组件配置失败,不影响主流程。判断的标准是看脚本最后的退出状态,如果输出里出现了Successfully或者表示安装完成的字样,那说明整体安装成功。我在第一次安装时就因为看到几行 WARNING 就直接中断了脚本,结果发现主数据库其实早就装好了,白白浪费了一次流程。

3.4 环境变量和 PATH 配置

安装完成后,切换到 omm 用户,openGauss 的相关命令会自动加入 PATH。这个依赖的是安装脚本写入到~/.bashrc里的环境变量。如果你发现切换到 omm 用户后执行gsql提示找不到命令,大概率是环境变量没生效,执行一下source ~/.bashrc再试。

sudo -i -u omm source ~/.bashrc gsql --version

我习惯先看版本确认安装状态,再去看服务启动情况。如果gsql --version能正常输出版本号,说明客户端没问题,接下来就是启动数据库服务了。

4. 初始化数据库:从启服务到第一条 SQL

4.1 服务启停和状态查看的正确姿势

openGauss 安装完成后,数据库实例不会自动启动,需要手动执行一次启服务操作。以 omm 用户执行以下命令:

gs_ctl start -D /opt/software/openGauss/data

-D参数指定数据目录,这个目录路径在安装时已经写入到配置文件里了,如果你用的是默认配置文件,路径会类似/opt/software/openGauss/data。启动成功的标志是日志输出里出现server started这样的提示。

查看服务状态我比较习惯用gs_ctl status -D /opt/software/openGauss/data,它会输出节点是否 online、数据库运行进程的 PID、数据目录的同步状态这些信息。重点看node_state是否为Primary,如果显示的是Standby或者Pending,那说明虽然进程起来了,但高可用关系还没建立,需要进一步检查。

4.2 首次连接数据库和默认密码策略

初始化完成后,系统会生成一个超级管理员用户omm,默认密码是安装过程中由脚本自动生成的随机字符串,记录在安装目录下的omm用户家目录的某个临时文件里,或者日志里可以找到。首次登录命令:

gsql -d postgres -p 26000 -U omm -W '初始密码'

这里有一个非常容易卡人的地方:openGauss 的密码策略默认要求复杂度极高。如果你后面想改成自己的密码,比如openGauss#123这种,不光要满足长度不少于 8 位,还必须包含大写字幕、小写字母、数字和特殊字符的至少三类组合。我就见过有人在这里折腾了很久,就是因为设置的密码复杂度不够,提示Password is too weak。

登录成功后,第一件事我建议先看几个基础信息,确认安装没有潜在问题:

SELECT version(); SELECT current_setting('server_version'); SELECT name, setting FROM pg_settings WHERE name IN ('port','data_directory','max_connections');

这几条 SQL 能确认数据库版本、当前端口、数据目录和最大连接数。特别是max_connections,默认值只有 100,如果应用场景并发不高可以先不调,但如果是测试高并发,提前调大可以避免后面反复重启数据库。

4.3 开启远程连接的配置

默认情况下,openGauss 只监听本地连接,外部客户端(比如你在自己电脑上用 DBeaver 连接)是连不上的。需要改两个文件。

第一个是postgresql.conf,把监听地址从默认的 localhost 改为主机 IP:

listen_addresses = '0.0.0.0'

第二个是pg_hba.conf,添加远程客户端的访问规则:

host all all 192.168.1.0/24 sha256

注意 openGauss 的认证算法是sha256,不是 PostgreSQL 常用的md5或者scram-sha-256,如果你在这边填错认证方式,连接时会直接报认证失败。改完这两个文件后,需要重启数据库才能生效:

gs_ctl restart -D /opt/software/openGauss/data

改配置之前,强烈建议先备份原文件。这是我做运维养成的一个习惯,任何配置文件改动前先cp一份带日期的副本,出问题可以秒级回滚,不用靠记忆去把改动一项一项改回去。

5. 常见报错和排查技巧实录

5.1 编译安装中出现的典型问题对照表

整个安装过程中,我见过的高频报错基本可以整理成一张表。排查问题的时候,先对照这张表缩小范围,再去看日志,效率会高很多。

报错信息可能原因解决办法
pm_hba.conf 中认证方式错误认证方式填了 md5 或 scram改成 sha256 后重启数据库
listen_addresses 设置无效配置后未重启数据库执行 gs_ctl restart 重启
DATA_DIR 路径不存在或权限不足数据目录未创建或归属错误检查目录归属,chown 给 omm 用户
The account is locked连续多次密码错误触发锁定使用 omm 用户执行 gs_ctl 解锁或重置密码
No space left on device磁盘空间不足清理 WAL 日志或扩容磁盘
Remote connection refused防火墙未放通端口systemctl stop firewalld 或放行 26000 端口
could not resize shared memory segment内核共享内存参数过小调大 kernel.shmmax 并 sysctl -p 生效
GSSAPI 认证错误客户端工具版本不兼容升级 gsql 客户端或使用兼容版本

5.2 日志排查思路和排错实操记录

如果一次安装不顺利,正确思路不是反复重跑安装脚本,而是按顺序排查日志。openGauss 的日志有三个层级:安装日志、服务端日志、数据目录运行日志。

安装日志通常在安装目录的log子目录下,文件名类似install.log,这里记录了安装脚本每一步执行的结果和报错堆栈。服务端日志在数据目录下的pg_log文件夹里,文件名格式是postgresql-日期_时间.log,数据库启动失败、连接异常、SQL 执行错误都会记录在这里。还有一个比较隐蔽的是gs_ctl的日志,在数据目录的pg_ctl子目录下,主要记录启停服务时的异常信息。

我自己处理过的一个典型问题:数据库启动时报could not open configuration file /opt/software/openGauss/data/postgresql.conf: Permission denied。排查时发现数据目录的所有者是 root,而不是 omm 用户。原因是我在安装前手动创建过数据目录,没有注意目录归属。解决办法很简单,chown -R omm:dbadmin /opt/software/openGauss/data之后启动就正常了。

5.3 安装过程退出重来的正确方式

如果安装过程中断或失败,想重新安装,我建议不要在同一台机器上反复执行安装脚本,因为残留的配置文件和数据库进程会干扰下一轮安装。正确做法是先彻底清理:

# 停止数据库 gs_ctl stop -D /opt/software/openGauss/data # 清除环境变量痕迹 rm -f ~/.bashrc.bak # 删除安装目录和数据目录 rm -rf /opt/software/openGauss

如果之前创建过 omm 用户,是否删除看你自己的习惯。官方脚本支持重复安装,但前提是环境干净。我倾向于保留 omm 用户,因为重新创建用户还要处理密码和家目录权限,省点事。但目录一定要清理干净,特别是tmpMppdbPath指向的临时目录,有时候会残留 socket 文件,导致新的实例启动时端口被占用。

6. 安装完成后的验证与日常维护建议

6.1 用几个命令快速验证安装是否健康

安装完成、数据库启动之后,我建议做一套“体检流程”,五分钟内确认数据库是否处于健康状态。

# 查看集群状态 gs_om -t status # 查看数据库进程 ps -ef | grep gaussdb # 验证数据库版本和关键参数 gsql -d postgres -p 26000 -c "SELECT version();"

gs_om -t status是检查整个集群状态最直接的工具,单机部署时它会显示一个 Primary 节点的信息。如果在输出里看到Degraded字样,说明节点状态有问题,需要结合前文的日志排查思路定位。正常状态应该是绿色的Normal或至少Unavailable,具体取决于版本差异。

我还习惯验证一下数据目录的 WAL 目录增长情况。刚启动的空库 WAL 目录很小,但如果跑了几分钟就涨得很快,说明数据库可能处于频繁 checkpoint 的状态,这时候要检查磁盘空间和 shared_buffers 参数是否合理。

6.2 配置修改的习惯和备份策略

openGauss 很多配置参数是支持在线修改的,比如work_mem、maintenance_work_mem,不需要重启就能生效。但像listen_addresses、port、max_connections这类参数,必须在postgresql.conf里改完后重启数据库。

在线修改的操作方式:

ALTER SYSTEM SET work_mem = '64MB'; SELECT pg_reload_conf();

这里要特别提醒:ALTER SYSTEM改的参数会写入到postgresql.auto.conf文件,这个文件的优先级高于postgresql.conf。如果哪天你改了postgresql.conf但发现不生效,先去检查postgresql.auto.conf里有没有残留的配置项把这个参数覆盖了。我踩过这个坑,排查了半天才发现是最早测试参数时在 auto.conf 里留下的值。

备份方面,openGauss 提供了gs_dump工具,类似 PostgreSQL 的pg_dump,支持数据库级和 schema 级逻辑备份。我的建议是至少有一套自动化的定时备份,写个 shell 脚本放到 crontab 里。

0 2 * * * su - omm -c "gs_dump -U omm -W '密码' -p 26000 -d postgres -F c -f /backup/opengauss_$(date +%Y%m%d).dump"

物理备份(基础备份)在单机环境下相对复杂,涉及归档日志配置,逻辑备份对绝大多数场景已经够用了。如果你后续要做主备架构,再认真研究物理备份也不迟。

6.3 从单机环境向主备架构扩展的思路

如果你这次装单机只是第一步,后面想搭主备集群,那安装时就要提前留好一些伏笔。首先,backIp1s不要把 IP 写死,规划好以后节点之间的内网通信网段。其次,至少准备好两台服务器,时间同步要做起来,openGauss 的主备节点对时间偏差很敏感,偏差过大会直接导致主备断连。

主备架构不再使用install.sh的单机安装流程,而是要走gs_preinstall加gs_install的完整集群安装流程,配置文件的格式也会从单节点的cluster_config.xml变成多节点的集群配置。这个流程比单机复杂很多,涉及 SSH 免密、节点间互信、数据目录规划等一系列动作,建议单机验证跑通后再动手。

我个人体会是,先把单机环境吃透,把日志排查、参数调整、备份恢复这些基本功都练扎实,再上主备架构会顺手很多。数据库这种基础设施,慢就是快。

7. 写在最后的几点真话

openGauss 的安装本身不算难,真正的难度在于你懂不懂每一步操作背后的原理。设置内核参数的时候,如果你知道nofile限制了文件描述符的数量,以后碰到 “Too many open files” 就能秒定位。配置pg_hba.conf的时候,如果你了解sha256是 openGauss 默认的密码哈希算法,就不会被那些复制 PostgreSQL 教程而来的错误配置带偏。

从实际使用体验来看,openGauss 是一个内核功底很扎实的数据库,但它对运维技能的要求比 MySQL 高出不少,这也不是缺点,毕竟企业级数据库本来就应该严肃对待。用习惯了之后,你会慢慢喜欢上它那些贴心的设计,比如数据校验、全密态计算、AI 自治运维这些能力,在别的开源数据库里很少能在一个产品里全部看到。

最后分享一个小技巧。安装完 openGauss 后,在$GAUSSHOME目录下有个bin文件夹,里面有大量实用工具命令,比如gs_encrypt用于生成加密密码,gs_ssh用于在集群节点间执行命令,gs_check用于环境检查。我习惯在装完之后把$GAUSSHOME/bin下面的命令都浏览一遍,花不了多少时间,但能让你对这个系统的能力边界有一个整体认知。搞清楚你手上工具能干什么,是比记命令本身更重要的一件事。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询