尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

GaussDB 100在EulerOS上的安装部署与运维排查实战指南

GaussDB 100在EulerOS上的安装部署与运维排查实战指南 简介这是一份面向华为GaussDB 100 1.0.1的Linux部署资源包专为EulerOS 20 SP8 64位环境准备适合数据库管理员、运维工程师及GaussDB初学者用于安装、升级与初步调优。压缩包共6个文件以Python自动化脚本为主体涵盖安装、升级、功能库等环节另含sha256校验文件便于在部署时验证包完整性整个资源包仅7.39MB轻量易获取。已有1304人浏览学习。相较仅提供安装介质此包附带可执行的部署辅助脚本能够帮助用户在EulerOS环境中快速完成GaussDB 100的基本安装与版本升级同时通过校验文件确保文件正确性减少因包损坏或版本不匹配导致的部署失败适合需要在离线或内网环境搭建GaussDB实验环境的技术人员参考使用。1. 安装包初识这个tar.gz里到底装了什么拿到GaussDB_100_1.0.1-DATABASE-EULER20SP8-64bit.tar.gz这个文件第一反应可能会有点懵。文件名很长但其实信息量很足拆开看就清楚了GaussDB_100是产品名1.0.1是版本号DATABASE说明这是数据库内核主程序包EULER20SP8表示适配的操作系统是EulerOS 20 SP864bit则是x86_64架构最后的tar.gz是打包压缩格式。这套命名规则在华为系软件里很常见看清楚这几个字段基本上就能判断一个包跟自己的环境是否匹配。GaussDB 100是华为自研的关系型数据库主打的场景是OLTP在线事务处理。跟GaussDB 200/300那类分析型或分布式版本定位不同100这个版本更偏轻量、单机高性能有点像Oracle单实例的用法。我在生产环境里拿它跑过几套中等规模的事务系统吞吐和稳定性都挺能打而且部署结构简单没有太多分布式组件要伺候这对运维来说是个加分项。它同时兼容SQL标准常见的数据类型、事务隔离级别、索引方式都有从Oracle或MySQL迁移过来的团队上手压力不算大。1.1 文件名里的信息量文件名的每个字段都值得细琢磨一下。GaussDB_100_1.0.1-DATABASE-EULER20SP8-64bit.tar.gzGaussDB_100产品系列标识对应数据库内核版本100。1.0.1小版本号。这个版本属于可用的稳定分支我在实际安装和测试中没遇到明显的内核级bug。DATABASE说明是数据库服务端程序包。同系列还有TOOLS、CLIENT等独立包用来装管理工具或客户端组件。EULER20SP8目标OS版本。不是所有Linux发行版都能直接装包内的二进制在编译时链接了特定glibc版本和系统库跨系统移植容易出乱子。64bitx86_64体系结构。现在主流服务器基本都是这个架构ARM版是另一个独立的安装包别混用。tar.gz先用tar打包再用gzip压缩是Linux下最常见的软件分发格式。建议下载之前先拿md5sum算一下校验值和官方提供的MD5比对一致再继续操作。压缩包在传输过程中损坏的情况不算少见我曾经遇到过解压到一半直接报CRC错误的情况最后重新下载才解决。1.2 GaussDB 100的定位与适用场景GaussDB 100在华为数据库家族里的位置有点像Oracle的Standard Edition One属于面向中小型业务系统的单机事务型数据库。它不太适合那种动辄几十个节点的超大数据仓库场景但在几千上万个并发事务、总数据量几十TB以内的场景下表现得相当扎实。适合用GaussDB 100的场景包括企业核心OLTP业务比如ERP、CRM、订单中心等。从Oracle迁移的存量系统特别是在信创替代背景下兼容性迁移路径成熟。需要强一致性事务保障的金融、电信类应用。对部署复杂度敏感、希望用最少的人工维护换取稳定性的项目。它支持标准SQL、存储过程、触发器、序列、视图、物化视图等常见数据库对象也提供表空间、用户权限体系、在线备份恢复等企业级能力。在国产数据库里属于成熟度高、生态也比较完整的那一档。2. 环境准备EulerOS 20 SP8下先做哪些功课拿到安装包直接解压安装往往会在后面冒出各种莫名其妙的错误。我建议在动手之前先花二十分钟把环境检查一遍。这个时间花得很值因为后面排错消耗的时间往往是这几分钟的十倍以上。2.1 系统基础要求EulerOS 20 SP8是华为欧拉操作系统的稳定版本基于openEuler 20.03 LTS维护。安装GaussDB 100之前建议先跑几条命令确认环境# 查看系统版本 cat /etc/openEuler-release # 查看架构 uname -m # 查看内存和磁盘 free -g df -h /opt /home /data硬件方面个人实际测试的经验值如下表资源项最低要求推荐配置说明CPU2核8核以上OLTP场景对CPU主频敏感内存4GB16GB以上数据缓冲区DATA_BUFFER按内存的60%-70%预留磁盘10GB100GB以上数据库文件、归档日志、备份文件分盘存放文件系统ext4xfs建议xfs大文件顺序读写性能更好内核参数也需要检查。数据库对共享内存和信号量的默认配置经常不够用常见的调优点包括# 查看当前信号量配置 cat /proc/sys/kernel/sem # 查看共享内存上限 cat /proc/sys/kernel/shmmax如果sem的值小于250 32000 100 128或者shmmax低于1GB建议调整。修改方式是在/etc/sysctl.conf里追加配置kernel.sem 250 32000 100 128 kernel.shmmax 68719476736 kernel.shmall 16777216然后执行sysctl -p让配置生效。这一步虽然不是每次都必须做但如果不做初始化数据库实例的时候经常会出现共享内存不足的报错。2.2 依赖包与运行用户GaussDB 100安装时对依赖包有三类常见的坑。第一类是基础库缺失。在最小化安装的EulerOS上可能会缺libaio、libaio-devel、numactl-devel、glibc-devel这几个包。安装命令yum install -y libaio libaio-devel numactl-devel glibc-devel第二类是时区和时间同步。数据库对时间一致性非常敏感建议提前配置好NTP或chrony服务避免后续排查问题时时间线对不上。第三类是用户和目录规划。数据库中有一个硬性要求不能用root用户直接安装和运行数据库服务。必须创建一个专用的操作系统用户我用的是gaussdbgroupadd dbgrp useradd -g dbgrp -d /home/gaussdb -s /bin/bash gaussdb mkdir -p /data/gaussdb chown -R gaussdb:dbgrp /data/gaussdb安装目录和数据目录分开是我一直坚持的习惯。安装目录放二进制文件数据目录放实例文件、日志、数据文件这样备份和升级都方便也避免了后续扩容时需要挪动文件系统的尴尬。3. 解压与安装部署全程实录3.1 tar.gz解压的正确姿势tar.gz解压命令非常简单但有几个细节很多人容易忽略。tar -zxvf GaussDB_100_1.0.1-DATABASE-EULER20SP8-64bit.tar.gz -C /data/gaussdb参数解释-z通过gzip解压。-x解压模式。-v显示详细过程方便观察进度。-f指定文件名。-C指定解压目标目录。如果不加-C文件会被解压到当前目录。我曾见过有人直接在根目录下解压结果文件散落在/底下后续管理非常混乱。解压完成后进入解压目录看一眼结构cd /data/gaussdb ls -la正常情况下会看到一个类似GaussDB_100_1.0.1-DATABASE-EULER20SP8-64bit的目录里面包含install.sh、bin目录、lib目录、admin脚本目录等。安装脚本一般叫install.sh执行权限大概率已经设置好了如果没有先补一下chmod x install.sh3.2 安装配置流程安装的过程其实就是在跑一个交互式脚本。我建议用gaussdb用户执行不要用rootsu - gaussdb cd /data/gaussdb/GaussDB_100_1.0.1-DATABASE-EULER20SP8-64bit ./install.sh脚本会先检查环境然后问你几个关键选项目录。最重要的几个路径我建议这样规划配置项推荐值说明数据库软件安装目录/opt/gaussdb/app存放二进制和依赖库数据库数据目录/data/gaussdb/data单独挂载大容量磁盘存放数据、日志数据库监听端口1888默认端口是1888和传统数据库的1521、3306区分开字符集UTF-8绝大多数场景下别选别的安装过程中还会要求设置数据库管理员sys的密码。这里提醒一下密码策略默认要求强密码大小写字母、数字、特殊字符至少包含三类长度不低于8位。别嫌麻烦直接用高强度密码后面放到密码管理工具里就行别用弱密码糊弄等被扫出来再改就晚了。安装完成后脚本会提示初始化实例并启动数据库。我习惯多花几分钟做一次手动验证确保数据库确实是正常跑着的# 切换到安装目录 cd /opt/gaussdb/app/bin # 连接本地数据库 ./zsql sys/密码localhost:1888能够进到SQL提示符界面说明基础安装是成功的。接下来可以跑一条简单的SQL验证事务能力CREATE TABLESPACE ts_demo DATAFILE /data/gaussdb/data/ts_demo.dbf SIZE 128M AUTOEXTEND ON NEXT 16M MAXSIZE 2G; CREATE USER demo IDENTIFIED BY Demo1234 DEFAULT TABLESPACE ts_demo; GRANT CONNECT, RESOURCE TO demo;这段SQL做三件事创建一个独立表空间、创建一个业务用户、给用户赋基础权限。整个过程能顺利执行说明存储引擎、权限体系、SQL引擎都是正常的。3.3 服务启停与开机自启动数据库安装完成后用系统自带的服务管理工具去管它比手动起进程靠谱得多。虽然没有默认配置systemd服务手动补一个并不复杂cat /etc/systemd/system/gaussdb.service EOF [Unit] DescriptionGaussDB 100 Database Afternetwork.target [Service] Typeforking Usergaussdb Groupdbgrp ExecStart/opt/gaussdb/app/bin/python /opt/gaussdb/app/bin/zctl.py -t start ExecStop/opt/gaussdb/app/bin/python /opt/gaussdb/app/bin/zctl.py -t stop Restarton-failure [Install] WantedBymulti-user.target EOF配置好后执行systemctl daemon-reload systemctl enable gaussdb systemctl start gaussdb按我的经验zctl.py脚本路径可能在不同版本里有差异建议先手动跑一次/opt/gaussdb/app/bin/python /opt/gaussdb/app/bin/zctl.py -t status确认路径能通再写进service文件。4. 常见问题与排查技巧实录这部分是重头戏。我把实际部署中踩过的坑和帮别人排查过的问题整理出来希望能帮你少走弯路。4.1 解压和安装阶段的问题问题一解压提示磁盘空间不足这个最常发生在数据盘和根目录共用分区的情况下。解压看起来只是几十个GB的源码目录实际上数据库安装包解压后占用的空间往往是你预期的两三倍。建议在解压前先用df -h确认目标目录有至少5倍于压缩包大小的可用空间。问题二libaio.so.1: cannot open shared object file这个报错说明基础库缺失或版本不匹配。在EulerOS 20 SP8上最直接的解决方式yum install -y libaio libaio-devel如果装完还是报错可能是装到了非标准路径执行一下ldconfig刷新动态库缓存。问题三zctl.py启动时报权限错误八成是安装目录或数据目录的属主不对。确认一下chown -R gaussdb:dbgrp /opt/gaussdb /data/gaussdb4.2 初始化实例的问题问题一初始化时报共享内存不足这个就是前面提到的内核参数问题。确认kernel.shmmax和kernel.shmall已经调大并且sysctl -p生效了。注意有些参数需要重新登录shell才会在当前会话中生效改完最好重新登录一次。问题二监听端口1888被占用如果在同一台机器上装过多个实例或者1888被其他服务占了安装脚本会报地址冲突。解决方式有两个一是杀掉占用进程二是在配置里把端口改成别的。个人建议直接改端口ALTER SYSTEM SET PORT2888;改完重启数据库生效。问题三字符集问题导致中文数据乱码初始化实例时字符集一定要确认选对。如果已经初始化为非UTF-8重建实例是唯一干净的解法。别想着改参数就行数据文件里的编码已经定了后面迁数据更痛苦。4.3 运维阶段的问题问题一数据库启动后自动停止这种情况常见于内存配置超出了许可范围。比如物理内存只有8GB但把DATA_BUFFER配到了6GB加上进程本身的消耗系统内存吃紧进程被OOM Killer杀掉。检查一下/var/log/messages里有没有Out of memory的记录。解法是把DATA_BUFFER调到物理内存的50%左右留足系统和其他进程的余量。问题二DML操作极慢大量等待锁先跑一下SELECT * FROM V$LOCK_WAIT;看看有没有锁等待。业务侧的排查重点是是否有长事务没有提交或者某个事务持锁后停顿堵住后面的请求。一个比较实用的习惯是在应用层设置事务超时避免慢SQL长期持有锁。问题三表空间自动扩展失败检查表空间所在的文件系统是否还有剩余空间。另一个容易被忽视的点是AUTOEXTEND的MAXSIZE上限如果达到上限就算磁盘有空间也不会继续扩展。建议ALTER TABLESPACE ts_demo DATAFILE /data/gaussdb/data/ts_demo.dbf AUTOEXTEND ON NEXT 16M MAXSIZE 32G;把上限放高一点或者干脆关闭上限限制。4.4 问题排查速查表现象可能原因排查命令解决建议启动报共享内存不足kernel.shmmax过小cat /proc/sys/kernel/shmmax调大shmmax并重新登录无法创建共享内存段信号量耗尽ipcs -l调大kernel.sem四个值端口冲突其他进程占用ss -lntp | grep 1888改端口或杀进程连接被拒绝监听未启动ss -lntp | grep 1888检查zctl status和监听日志中文乱码字符集不匹配SHOW CHARSET;重建实例或转换客户端编码系统日志无错误但启动失败权限问题ls -la /opt/gaussdb/app检查目录属主数据文件无法扩展MAXSIZE达到上限SELECT * FROM DV_TABLESPACES;调大MAXSIZE耗时查询杀掉后连接卡住事务未回滚SELECT * FROM V$TRANSACTION;通过视图确认回滚进度5. 安装完成后的必要检查与优化数据库能起来只是第一步离“可以交给业务用”还有几件事要做。我把这一阶段的检查和优化按优先级排个序。第一件事确认备份策略。单机数据库最怕的就是磁盘损坏和误操作。GaussDB 100支持物理备份和逻辑备份两类手段。建议至少做到每天凌晨做一次全量逻辑备份用exp导出到独立的备份盘。有条件的话配置归档日志配合物理备份做时间点恢复。备份文件至少保留7天定期做一次恢复演练。备份这事情做过恢复演练才算真正放心。别等出事了才发现备份文件是坏的那就是灾难中的灾难。第二件事检查系统资源限制。数据库进程的文件句柄数和进程数上限如果太低高并发下会出现too many open files。在/etc/security/limits.conf里追加gaussdb soft nofile 65536 gaussdb hard nofile 65536 gaussdb soft nproc 65536 gaussdb hard nproc 65536注意用root修改后重新登录ulimit -n才能看到新值。第三件事设置数据库参数。有几个参数我每次装完都会检查一遍ALTER SYSTEM SET DATA_BUFFER_SIZE 8G; ALTER SYSTEM SET LOG_BUFFER_SIZE 64M; ALTER SYSTEM SET UNDO_TABLESPACE_SIZE 8G; ALTER SYSTEM SET TEMP_TABLESPACE_SIZE 8G;具体数值根据业务负载和物理内存调整。原则很简单数据缓存越大读性能越好但别大到导致系统自身无内存可用。第四件事验证远程连接。做完本地连接验证后建议从另一台机器测试远程访问./zsql sys/密码192.168.1.10:1888如果远程连不上检查两点数据库的LISTEN_ADDRESS是否配置为0.0.0.0或实际网卡地址防火墙有没有放行1888端口。常见的情况是数据库好好的就是防火墙把端口挡了。firewall-cmd --add-port1888/tcp --permanent firewall-cmd --reload6. 服务启停与开机自启动数据库状态管理建议用自带的zctl.py脚本把它封装成systemd服务比手动起停可靠得多。6.1 手动启停命令# 启动数据库 python /opt/gaussdb/app/bin/zctl.py -t start # 停止数据库 python /opt/gaussdb/app/bin/zctl.py -t stop # 查看状态 python /opt/gaussdb/app/bin/zctl.py -t status这里强调一个细节执行zctl.py的用户必须是启动数据库时使用的用户通常就是gaussdb。用root去执行启动命令大概率会报权限错误因为数据库进程以root身份运行是被安全机制禁止的。6.2 配置systemd自启动为了一个更干净、受系统管理的自启动方式我在实际部署中会给GaussDB 100配置systemd服务cat /etc/systemd/system/gaussdb.service EOF [Unit] DescriptionGaussDB 100 Database Afternetwork.target [Service] Typeforking Usergaussdb Groupdbgrp ExecStart/opt/gaussdb/app/bin/python /opt/gaussdb/app/bin/zctl.py -t start ExecStop/opt/gaussdb/app/bin/python /opt/gaussdb/app/bin/zctl.py -t stop Restarton-failure [Install] WantedBymulti-user.target EOF配置完成后systemctl daemon-reload systemctl enable gaussdb systemctl start gaussdb注意ExecStart和ExecStop里的路径务必以你实际的安装目录为准。安装目录不同路径不对会导致服务启动失败查日志半天找不到原因。如果服务器重启后想确认数据库确实自动拉起来了用一条命令验证systemctl status gaussdb --no-pager -l状态显示active (running)就说明一切正常。最后再分享一个小建议安装数据库其实只是万里长征第一步真正考验人的是后续的运维和调优。我在多次部署GaussDB 100的过程中最深的一个体会是环境准备工作做得越扎实后面出现诡异问题的概率就越小。把内核参数、系统限制、目录规划这些前置工作做足了安装过程会顺利得让你觉得不真实。另外一个从踩坑中得来的教训是每次调整完配置都要做一次完整的启动-连接-建表-插入-查询-停止的回归验证。别只瞄一眼进程在不在就觉得没事。数据库这种基础设施小问题不及时暴露积累到最后就是大事故。如果你也正在准备在EulerOS上部署这套数据库按着这篇文章的顺序走一遍每一步确认无误后再往下推进基本上不会出什么大岔子。遇到具体问题优先看日志文件——GaussDB 100运行日志和告警日志会告诉你绝大部分问题的真实原因。机器不会说谎日志也不会多花点时间读日志比蒙头猜原因高效得多。本文还有配套的精品资源点击获取
返回列表