ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

麒麟V10上安装openGauss 6.0.0完全指南(含踩坑记录)

2026/9/17 3:44:42 拓冰建站 浏览量
麒麟V10上安装openGauss 6.0.0完全指南(含踩坑记录) 1. 环境准备与架构设计思路1.1 为什么选择麒麟V10 openGauss 6.0.0这个组合先说结论麒麟V10和openGauss都是目前国产化替代浪潮里绕不开的两个名字一个是操作系统一个数据库两者配合使用的场景在政务、金融、能源这些行业越来越多见。如果你所在的公司或单位已经开始了信创改造这个组合几乎是早晚要碰到的。麒麟V10分桌面版和服务器版服务器版又有SP1、SP2、SP3这些小版本底层有x86_64和aarch64鲲鹏、飞腾两种架构。openGauss是华为开源的单机/分布式数据库内核基于PostgreSQL 9.2.4演进但做了大量企业级增强6.0.0是目前比较新的稳定版本。两者组合起来就是一个标准的国产化单机数据库环境。我在实际装的过程中最大的感受是安装本身不算难难的是安装之前的系统准备和安装之后的参数调优。很多人在第一步就被防火墙、依赖包、版本不匹配这些看似不起眼的问题卡住折腾一天都没装上。这篇博客就是把整个过程掰开揉碎把容易踩的坑全部指出来。1.2 openGauss 6.0.0在麒麟V10上的部署方式拆解openGauss 6.0.0支持两种安装方式一种是omopenGauss Manager方式适合集群部署会创建om用户和clusterconfig配置文件另一种是极简安装方式适合单机学习和测试场景脚本是gs_initdb直接初始化数据库。本篇文章讲的是单机部署所以用的是极简安装也就是直接解压安装包后执行初始化命令。为什么单机不用om原因很简单om方式有一堆额外的依赖和配置项什么cluster_config.xml、ssh互信配置、gs_om服务管理这些都是为多节点集群设计的单机场景用om反而容易引入不必要的问题。极简方式清爽直接一个用户、一个目录、一条初始化命令就能把数据库跑起来。需要说明的是openGauss 6.0.0官方在麒麟V10上验证过x86_64和aarch64两种架构但依赖包略有差异。aarch64架构需要额外注意gcc、libaio这些基础库是否齐全后面会详细说。2. 麒麟V10系统层面的准备工作2.1 安装前必查的3个系统条件在正式动手之前先把系统环境捋清楚。我用的是麒麟V10 SP3服务器版x86_64架构内核版本4.19。这几个信息必须确认因为不同小版本的系统预装的依赖包可能不一样安装命令也会有差别。第一个要查的是系统版本。用cat /etc/kylin-release或者nload /etc/os-release都能看。如果你拿到的系统是SP2或更早的版本建议先升级到SP3因为SP3修复了不少基础库的兼容性问题openGauss 6.0.0在上面跑得更稳。第二个要查的是架构。用uname -mx86_64和aarch64的安装包是两个不同的包不能混用。很多人在这一步搞混下载了aarch64的包想在x86机器上装结果直接报Exec format error。第三个要查的是内存和磁盘。openGauss单机版官方建议至少2GB内存20GB磁盘空间这算是跑起来的底线。实际使用中如果内存只有2GB建议把shared_buffers调小到256MB否则初始化时可能因为内存不足直接失败。[rootlocalhost ~]# cat /etc/kylin-release Kylin Linux Advanced Server release V10 SP3 [rootlocalhost ~]# uname -m x86_64 [rootlocalhost ~]# free -g total used free shared buff/cache available Mem: 7 1 5 0 1 62.2 创建专用用户和目录权限规划不能偷懒openGauss 6.0.0强制要求不能使用root用户来初始化和运行数据库。加上我前面提到的如果你自己下载了openGauss安装包解压出来会有个simpleInstall目录里面是极简安装的脚本这意味着整个安装过程都需要一个专用的普通用户。实际操作中我习惯创建一个叫omm的用户用户组也是omm作为openGauss的专属运行用户。这里有个细节openGauss安装目录的属主必须是omm否则初始化时gs_initdb会直接报权限错误。groupadd omm useradd -g omm -m -d /home/omm -s /bin/bash omm密码自己设置一个比如MyPassw0rd2024注意openGauss的密码策略默认要求大小写数字特殊字符太简单了后面还要改。目录规划上通常把数据库软件装在/opt/openGauss数据目录单独放/opt/openGauss/data这样升级的时候数据不会丢。说实话数据目录和软件目录分开是DBA的基本素养防止误操作把数据清了。mkdir -p /opt/openGauss/data chown -R omm:omm /opt/openGauss还有一个大部分人都容易忽略的操作关闭透明大页。openGauss对THPTransparent Huge Pages非常敏感数据库运行时如果内存持续分配大页可能导致性能抖动。在/etc/rc.d/rc.local里加一行echo never /sys/kernel/mm/transparent_hugepage/enabled重启后依然有效。2.3 内核参数调优这一步决定数据库能不能长期稳定跑openGauss对操作系统内核参数有明确的要求官方文档里列了一堆sysctl配置。这些参数如果不调初始化的时候可能不报错但跑一段时间就会出现莫名其妙的性能问题或者连接不上。我就吃过这个亏装完没调内核参数跑了三天数据库直接OOM日志里一堆Out of memory: Killed process。核心要调的是这几个# 在 /etc/sysctl.conf 中追加 kernel.semmsl 250 kernel.semmns 32000 kernel.semopm 100 kernel.semmni 128 kernel.shmall 1073741824 kernel.shmmax 274877906944 kernel.shmmni 4096 net.ipv4.ip_local_port_range 9000 65535 net.core.rmem_default 262144 net.core.rmem_max 4194304 net.core.wmem_default 262144 net.core.wmem_max 4194304 fs.aio-max-nr 1048576 fs.file-max 6815744 vm.overcommit_memory 0shmmax和shmall这两个是共享内存的参数openGauss用了大量的共享内存来做buffer pool不调大的话数据库可能起不来或者起得很慢。vm.overcommit_memory 0是让内核智能判断内存分配避免数据库申请大块内存时直接被拒绝。修改完执行sysctl -p让参数生效。注意有些参数是只读的sysctl -p会报错比如kernel.shmmax在某些内核上不能在线修改需要写入/etc/sysctl.conf后重启系统才能生效。所以千万别以为执行完命令就万事大吉最好用sysctl kernel.shmmax确认一下实际值。提示fs.aio-max-nr取值不要低于1048576openGauss在并发高的时候会用到大量AIO请求数值太小会导致数据库日志里频繁出现aio: insufficient aio requests available。2.4 安装依赖包一步到位避免后续报错麒麟V10服务器版默认安装的软件包并不包含openGauss运行所需的全部依赖需要手动装几个。用yum装就行麒麟V10的yum源默认是配好的如果没配好先检查/etc/yum.repos.d/下的仓库文件。yum install -y libaio-devel flex bison ncurses-devel glibc-devel patch readline-devel这几个包里面libaio-devel是数据库异步IO必需的flex和bison是编译相关虽然极简安装不需要编译但gs_initdb脚本在初始化过程中可能会调用它们。readline-devel是命令行交互需要的没有的话gsql登录时方向键会乱码。另外如果系统是最小化安装的还需要装tar、python3、unzip这些基础工具。openGauss安装包是tar.gz格式没有tar一切白搭。python3是om方式安装需要用的极简安装其实用不到但装了没坏处。还要注意防火墙和SELinux。这两样东西是数据库装不上的头号嫌疑犯。麒麟V10默认防火墙是firewalldSELinux默认是Enforcing。openGauss的数据目录文件如果被SELinux拦截初始化的时候会出现奇怪的权限报错。最简单的方案是都关掉内网数据库环境这么干问题不大systemctl stop firewalld systemctl disable firewalld sed -i s/SELINUXenforcing/SELINUXdisabled/ /etc/selinux/config setenforce 0setenforce 0是临时关闭重启后失效所以还必须改配置文件。改完之后建议重启一次系统让SELinux彻底处于disabled状态再继续后面的操作。3. openGauss 6.0.0安装部署实操全记录3.1 下载安装包版本和架构必须一一对应openGauss 6.0.0的安装包可以从官方镜像站下载下载的时候注意区分几个关键信息版本号6.0.0、操作系统openEuler、架构x86_64或aarch64、安装方式极简版还是om版。这里有个很多人都会搞混的点openGauss官网提供的安装包一般分为企业版和极简版两种企业版面向om方式部署极简版面向单机部署。文件名通常长这样openGauss-6.0.0-CentOS-64bit.tar.gz极简版x86架构openGauss-6.0.0-openEuler-aarch64.tar.gz极简版ARM架构openGauss-6.0.0-CentOS-64bit-om.tar.gzom企业版注意官网给出的系统列通常是CentOS/openEuler但在麒麟V10上装完全没有问题因为麒麟V10本身兼容CentOS 7/8的二进制接口。我第一次装的时候也犹豫过担心系统不对装不上实测下来麒麟V10 SP3 x86_64直接跑CentOS 64bit的包没有任何兼容性问题。下载完成后先校验一下MD5或者SHA256确保文件完整。之前遇到过下载了一半就断了的安装包解压的时候报错排查了半天才发现是安装包的问题。3.2 解压安装目录权限和属主是重灾区把安装包上传到服务器后切到omm用户下解压。注意整个解压和后续操作都要在omm用户下进行不要用root解压完再chown那样容易遗漏一些隐藏文件。su - omm cd /opt/openGauss tar -zxvf openGauss-6.0.0-CentOS-64bit.tar.gz解压之后会看到simpleInstall、bin、lib、share这些目录。simpleInstall目录下有个install.sh脚本这是官方提供的极简安装脚本可以一键完成初始化。但我更推荐直接用bin/gs_initdb命令手动初始化因为install.sh脚本封装的逻辑太多中途出错了不好排查。解压完之后再确认一下目录属主ls -ld /opt/openGauss chown -R omm:omm /opt/openGauss3.3 初始化数据库参数详解与关键坑位初始化数据库是整个过程的核心环节这一步出错的人最多。gs_initdb的基本用法如下cd /opt/openGauss/bin ./gs_initdb -D /opt/openGauss/data --nodenameprimary --pwpasswdMyPassw0rd2024 --encodingUTF8 --localeen_US.UTF-8几个参数逐一说明-D指定数据目录必须是一个不存在的空目录如果目录已存在且有文件会直接报错。--nodename节点名称单机版可以随便起常见的有primary、dn这个名称会写入postgresql.conf后续远程连接时会用到。--pwpasswd数据库超级用户默认是omm如果omm用户不存在则用当前用户名的密码。这个密码必须符合复杂度要求否则初始化会直接失败。--encoding数据编码建议UTF8支持中文更友好。--locale本地化设置建议C或en_US.UTF-8用zh_CN.UTF-8有时会导致排序规则和索引异常。初始化过程中会有一堆信息输出最后看到Success. You can now start the database server就说明成功了。如果中途报错不要慌把错误信息复制到搜索引擎一搜基本都有答案后面我专门整理了常用的报错处理。注意gs_initdb初始化出来的数据目录在第一次启动之前配置文件用的是默认参数。postgresql.conf里默认监听localhost端口默认5432。如果需要对外开放要改listen_addresses和port后面会具体演示。3.4 正式启动数据库前的关键配置初始化完成后启动数据库前还有几个配置文件要改。其中最核心的是/opt/openGauss/data/postgresql.conf以及同目录下的pg_hba.conf。先说postgresql.conf。用vim打开找到这几项并修改listen_addresses 0.0.0.0 # 监听所有网卡 port 15432 # 端口号避免和默认5432冲突 max_connections 100 # 最大连接数 password_encryption_type 1 # 密码加密方式0为md51为sha2562为sm3password_encryption_type是openGauss特有的参数默认值为2sm3加密。这个参数会影响pg_hba.conf里认证方式的配置如果密码加密方式设置成sm3那么pg_hba.conf里对应条目也要用sm3认证用md5会报错。为了兼容性和便于管理我习惯设成1sha256。再说pg_hba.conf。这个文件控制哪些客户端IP可以连数据库以及用什么认证方式。默认只有localhost需要添加内网网段# TYPE DATABASE USER ADDRESS METHOD host all all 0.0.0.0/0 sha256这里把0.0.0.0/0全放开了如果公司有安全要求可以改成具体的网段比如192.168.1.0/24。认证方式要和password_encryption_type对应设了sha256就写sha256设了md5就写md5否则报错unsupported frontend protocol。改完配置文件之后还有个容易忽略的点数据目录下会生成一个postmaster.pid文件启动前要确认没有残留的。ls -l /opt/openGauss/data/postmaster.pid如果有这个文件说明上次数据库没有正常关闭直接启动会报lock file exists。删掉再启动即可但前提是确认数据库确实没有在运行。3.5 启动与验证一条一条命令确认启动openGauss用的是gs_ctl命令cd /opt/openGauss/bin ./gs_ctl start -D /opt/openGauss/data看到server started字样就说明启动成功了。用ps aux | grep gauss能看到一堆gaussdb进程这就是数据库的主进程。然后登录数据库验证cd /opt/openGauss/bin ./gsql -d postgres -p 15432 -U omm -W MyPassw0rd2024 -r登录成功后执行select version()能看到openGauss的版本信息。到这里一个最基本的openGauss 6.0.0单机实例就跑起来了。为了方便管理,可以设置环境变量echo export PATH/opt/openGauss/bin:$PATH ~/.bashrc echo export LD_LIBRARY_PATH/opt/openGauss/lib:$LD_LIBRARY_PATH ~/.bashrc source ~/.bashrc设置完之后直接输gsql就能进入客户端的交互界面不用每次输完整路径。LD_LIBRARY_PATH必须设置否则连接时可能报找不到libpq.so.5的错误。4. 上线前的账密策略与安全管理4.1 openGauss默认用户和权限模型说明初始化完成后openGauss会自动创建一个超级用户默认与当前操作系统用户同名也就是omm。这个超级用户拥有最高权限可以创建数据库、创建用户、修改配置、kill会话等等。同时初始化还会自动创建三个数据库postgres、template0、template1。postgres是日常连接的默认库template0是空模板template1是带默认对象的模板。新建数据库如果不指定模板默认从template1克隆。openGauss的权限模型和PostgreSQL高度一致数据库实例级别有超级用户数据库级别有owner表级别有grant权限。这种三级权限模型的好处是粒度细可以精确控制谁能在哪张表上执行什么操作。4.2 修改密码策略适应国产化密码规范openGauss的初始化密码虽然已经设置了但实际使用时经常需要调整密码策略尤其是password_policy参数。默认情况下password_policy2要求密码必须包含大小写字母、数字和特殊字符并且长度至少8位。有的单位密码规范没这么复杂可以把策略调低ALTER SYSTEM SET password_policy 1;password_policy的取值含义如下取值含义0无复杂度校验只检查长度1仅校验包含大小写字母、数字2校验大小写、数字、特殊字符长度至少8位设置完之后重启数据库或者执行gs_ctl reload让参数生效。ALTER SYSTEM SET会修改配置文件不需要手工去改postgresql.conf。4.3 创建业务账号避免长期用超级用户跑业务实际生产环境中我强烈建议创建一个专用的业务账号而不是用超级用户omm跑业务。超级用户权限太大一旦业务SQL写得不规范误删了整个库也没人拦得住。而且从审计角度看所有操作都用一个账号出了事情没法追溯是谁干的。CREATE USER app_user IDENTIFIED BY AppPassw0rd2024; CREATE DATABASE appdb OWNER app_user;这个app_user就拥有appdb数据库的所有权限日常业务连接就指定用这个账号连appdb。需要更多权限的时候再通过GRANT单独授予做到最小权限原则。4.4 远程连接配置与常见加密认证问题远程连接是数据库部署绕不开的话题。openGauss默认只监听localhost,如果要从别的机器连过来按前面3.4节的方法把listen_addresses改成0.0.0.0并在pg_hba.conf里放行对应网段。改完之后重启数据库在另一台机器上用客户端工具比如Navicat、DBeaver试试能不能连上。如果连不上先用telnet ip 15432测试端口是否通。端口不通多半是防火墙问题需要放行firewall-cmd --zonepublic --add-port15432/tcp --permanent firewall-cmd --reload如果端口通了但连接报错FATAL: no pg_hba.conf entry for host说明pg_hba.conf里的网段没有覆盖到你的客户端IP去补一条即可。还有一个常见问题是客户端和服务器之间的加密认证不匹配。openGauss 6.0.0默认强制要求SSL连接如果客户端不支持SSL或者SSL协商失败会直接拒绝连接。如果内网环境对安全性要求不高可以在postgresql.conf里把ssl on改成ssl off但注意这样会降低数据传输的安全性非必要不推荐。5. 常见问题与故障排查实录5.1 gs_initdb初始化失败的5个高频原因这一节把我在Init阶段和实际帮别人排查时遇到的高频问题整理一下。第一类目录权限问题。报错信息类似could not change directory to /opt/openGauss/data: Permission denied。这个问题几乎都是因为data目录不是current用户即omm的或者父级目录权限不够。排查步骤ls -ld /opt/openGauss/data确认属主是omm。第二类依赖库缺失。报错error while loading shared libraries: libaio.so.1。这是因为系统缺libaio或libaio-devel用yum install -y libaio-devel装一下就能解决。第三类内存不足。报错No space left on device或者could not create shared memory segment。前者是磁盘满了用df -h查看后者是共享内存参数没调重点检查kernel.shmmax和kernel.shmall。第四类端口被占用。报错could not bind to address。用ss -lntp | grep 5432检查端口是不是已经被占用换一个端口或者kill掉占用进程。第五类locale不匹配。报错invalid locale name。在gs_initdb命令里指定--localeC或--localeen_US.UTF-8不要用系统里不存在的locale。5.2 数据库启动失败日志怎么看最有效数据库启动失败的排查核心是看日志。openGauss的日志默认在数据目录下的pg_log文件夹里文件名格式类似postgresql-2024-06-01_000000.log。查看日志用tail命令tail -100 /opt/openGauss/data/pg_log/postgresql-$(date %Y-%m-%d)_*.log日志里会有明确的错误信息。最常见的几种FATAL: lock file postmaster.pid already exists历史pid文件残留确认进程不存在后删掉pid文件。FATAL: could not create listen socket for port 15432端口被占用换个端口或者释放端口。FATAL: could not open configuration file pg_hba.conf配置文件被误删或权限不对检查文件存在性。养成一个好习惯每次启动之前先看日志启动失败之后立刻看日志。日志文件是故障排查的第一手资料比在网上瞎搜高效得多。5.3 性能踩坑实录参数初始化后不要直接跑大查询很多人在数据库装好后会迫不及待地导数据、跑SQL、测性能。这里要提醒一个非常容易忽略的问题openGauss默认的work_mem、shared_buffers参数都是按最小配置来的直接拿默认参数去跑大查询性能和稳定性都会很难看。我实测过的一个典型配置2核4G的机器默认shared_buffers128MB、work_mem64MB跑一个大表的聚合查询执行时间要30秒以上。把shared_buffers调到1024MB、work_mem调到128MB之后同样的查询只要7秒。参数调优的原则是不要一步到位追求大先小步调整、观察、验证。修改参数后要重启数据库或者gs_ctl reload用show shared_buffers;确认生效。5.4 openGauss日常维护必备命令清单安装完成、验证通过之后日常运维还需要掌握几个核心命令我整理成了一张速查表。操作命令启动数据库gs_ctl start -D /opt/openGauss/data停止数据库gs_ctl stop -D /opt/openGauss/data重启数据库gs_ctl restart -D /opt/openGauss/data查看状态gs_ctl status -D /opt/openGauss/data登录数据库gsql -d postgres -p 15432 -U omm -W 密码 -r查看进程ps aux查看日志tail -f /opt/openGauss/data/pg_log/*.log备份数据库gs_dump -p 15432 -U omm -F c -f /backup/appdb.dmp appdb恢复数据库gs_restore -p 15432 -U omm -d appdb /backup/appdb.dmp备份和恢复这块多说一句。gs_dump生成的是逻辑备份文件主要用于迁移和误删恢复不能替代物理备份。生产环境建议用gs_basebackup做物理备份但单机学习环境用gs_dump就够了。5.5 openGauss扩展生态与学习资源建议openGauss虽然是PostgreSQL的衍生品但它的生态和PostgreSQL原版已经有了一些分化。比如openGauss特有的gs_ctl、gsql命令行工具以及shardingsphere中间件、DataKit管理平台这些周边组件都是独立发展的。如果是从PostgreSQL转过来的开发者注意几个不兼容的地方pg_stat_activity视图在openGauss里部分字段有差异、pg_hba.conf的认证方式多了sm3、一些扩展插件比如PostGIS在openGauss里需要单独适配。数据库的深入学习路径我的建议是先看官方文档的SQL语法和系统表说明然后尝试用gsql做一个简单的业务系统比如学生选课系统或者员工信息管理系统多写SQL、多调优自然就熟练了。官方文档在Gitee上有中文版写得还算清晰。最后再分享一个小经验如果你是在虚拟机里安装麒麟V10跑openGauss开局内存尽量给到4GB以上否则编译执行计划、跑TPCC测试这种负载很容易把内存打满。个人实际操作中遇到的绝大多数问题其实都是系统资源不够引起的把资源给够了安装过程能省去一半的麻烦。整个流程走下来你会发现openGauss的安装理念和MySQL不太一样它更像Oracle强调用户规划、目录规划、参数调优这些细节。每一步按部就班来不跳步、不偷懒麒麟V10上装好一个可用的openGauss 6.0.0单机实例真的不需要折腾太久。