麒麟V10 SP3环境安装金仓这件事,最近问的人确实不少。也是,麒麟V10 SP3现在是国产服务器操作系统里出镜率最高的几个之一,金仓又是国产数据库里绕不开的一环,信创项目、等保改造、行业替换,哪哪都要把这两样凑一块儿。但真要动手装的时候,坑比想象中多:架构选错、依赖缺失、权限报错、分区不够,每一个都够你折腾半天的。这篇就把我在麒麟V10 SP3上装金仓的完整过程、踩过的坑、排查思路一次说清。
1. 项目需求与整体选型思路
1.1 麒麟V10 SP3平台特性与适配要点
拿到机器第一件事,别急着解压安装包。先把这台机器是什么架构、什么版本摸清楚。麒麟V10 SP3这个版本在市面上流通的形式有好几种:银河麒麟高级服务器操作系统V10 SP3、麒麟桌面版V10 SP3,还有一些行业定制版。底层内核虽然都是4.19左右,但不同版本带的glibc、安全加固策略、内核模块都不一样,直接影响数据库能不能跑起来。
另外,CPU架构这块儿特别关键。X86_64的机器好办,碰到ARM生态的,比如飞腾、鲲鹏,就得专门找适配ARM版的安装包。有的团队图省事,拿X86的包在ARM机器上硬解压,结果就是一连串的segment fault和consistency错误,白折腾一晚上。
我的建议是,上手第一件事先跑三行命令:
cat /etc/kylin-release uname -m free -g分别确认系统版本、CPU架构、内存大小。内存少于2G的建议先扩容,金仓装上只是开始,后面跑业务、建索引、备份都要吃内存,别在这里抠预算。
1.2 金仓版本选择与适用场景定位
金仓数据库目前主流的是KingbaseES V8系列,也有叫KES V8的,或者V009R00X系列版本号的,安装包命名里一般带架构标识和厂商标识。选版本的时候别只看“最新版”,要看你所在项目的兼容性要求:有的上层应用明确写了支持V008R006C008,你拿V009的去对接就有风险。
场景定位也要想清楚。是OLTP交易系统,还是数据分析类的OLAP场景?是同构迁移替代Oracle,还是新建系统直接用?这些影响了初始化参数、表空间规划、甚至license类型。金仓的license一般分试用版和正式版,正式版又分标准版、企业版。企业版才带真正的主备集群、读写分离、透明加密这些高级功能,标准版只有基本的高可用能力。
1.3 为什么第一步先确认架构与内核
你可能觉得这是小题大做,但我在项目上真遇到过:安装包是X86版,机器是海光或者兆芯的X86兼容架构,装是装上去了,跑压测的时候样例脚本一跑就崩。后来发现是某个动态库在兼容架构上没完全适配。更常见的是ARM机器上拿X86包硬装,initdb阶段直接报非法指令。
内核参数也得提前看一眼。金仓对IPC、信号量、线程数有限制要求。检查下面这几个值:
sysctl kernel.sem sysctl fs.file-max ulimit -n sysctl kernel.shmall sysctl kernel.shmmax标准要求是:信号量SEMMSL>=1024、SEMMNS>=4096、SHMMAX不低于1G。麒麟V10 SP3默认的SHMMAX往往是180G级别或者很小的值,如果过小,初始化数据库或者高并发跑的时候会报“could not resize shared memory segment”之类的错误。
2. 安装前的环境准备与目录规划
2.1 生命周期与分区规划
很多人装金仓习惯直接丢到根目录或者home下面,等数据库跑起来才发现日志把磁盘撑爆了。金仓的数据文件、WAL日志、备份文件增长都很快,尤其在生产环境,一个晚上写几十GB日志是再正常不过的事。
我一般建议单独划一个数据分区,比如挂载到/data,然后数据目录放在/data/kingbase,而安装程序目录放/opt/Kingbase。这样重装系统、升级版本的时候,数据目录独立,风险和风险面都小得多。热词里提到的“麒麟V10自动分区规则 backup分区默认大小多少g”,其实就是安装系统时自动分区生成的backup分区。麒麟的自动分区默认会给backup分区分不少空间,有时候会挤占数据分区,所以手工分区的时候要记得把backup分区调小或者干脆合并,把空间留给数据分区。
分区规划参考:
| 分区 | 建议大小 | 挂载点 | 用途 |
|---|---|---|---|
| /boot | 2G | /boot | 系统引导 |
| / | 至少80G | / | 系统与程序 |
| /data | 其余空间 | /data | 金仓数据目录 |
| backup | 不分配或20G | — | 若存在,限制大小 |
我给过一个具体的估算公式:主库空间 = 当前数据量 × 1.5,再叠加WAL日志与临时文件的空间,再留30%的安全余量。比如业务数据预期200G,那就至少给数据分区400G。别抠,数据目录写满是DBA最不想见到的场景之一。
2.2 依赖包与yum源准备
金仓在麒麟上安装,依赖包基本都集中在系统库里,但有些不一定会默认装。常见需要确认的包有这些:
yum install -y glibc gcc-c++ libaio libaio-devel ncurses-libs tzdata pam-devel其中最容易漏的是libaio。金仓的IO子系统在异步IO模式下会调用libaio,少了它启动的时候不报,但跑批量导入时会有莫名其妙的IO error。另外,nss和nspr这两个包在有些精简版麒麟里也有缺失,会导致SSL认证初始化失败,报“Failed to initialize SSL”之类的错误。
如果机器部署在内网,yum源不通,就提前把离线rpm包拷进去。方法可以是在能联网的机器上装个createrepo,做一个本地yum源,或者直接用yumdownloader --resolve把所有依赖整体拉下来。我习惯用第一种,把依赖放到一台内部镜像机上,后续其他机器装东西也能用。
2.3 专用用户创建与权限移交
安全基线要求数据库不允许用root跑,这是常识,但实际操作中还是有人图省事用root初始化。这里明确说:用root初始化金仓,后续连数据文件的属主都是root,应用层读写会引发一堆权限问题,最典型的正是热词里那个“permission should be u=rwx”。
建立专用用户的流程:
groupadd kylin useradd -g kylin -d /home/kylin -s /bin/bash kylin mkdir -p /opt/Kingbase mkdir -p /data/kingbase chown -R kylin:kylin /opt/Kingbase chown -R kylin:kylin /data/kingbase给数据目录和安装目录的属主授权完成后,后面所有安装、初始化、启停动作都以kylin身份操作。root只保留系统级的管理权限,这样做既能满足等保要求,又能避免后面踩权限坑。
2.4 防火墙与SELinux处理
麒麟V10 SP3默认的firewalld一般没启用端口,如果装了就直接放行金仓端口。金仓默认端口是54321,也有的版本用54322,具体看安装时选的端口。放行命令:
firewall-cmd --permanent --add-port=54321/tcp firewall-cmd --reloadSELinux在麒麟上默认是enforcing的话,需要把数据库数据目录的上下文设对,或者直接调整为permissive模式。生产环境我建议保留SELinux enforcing,然后按类型标注数据目录和进程,但测试环境就别纠结了,permissive更省心。
3. 金仓数据库安装全流程实操
3.1 安装包获取与介质校验
金仓安装包的命名风格大概是这样:KingbaseES_V008R006C008B0014_Lin64_x86_64.tar.gz或者带aarch64字样。这里说几个要点:
先校验文件完整性。安装包在传输过程中损坏的情况并不罕见,尤其是通过U盘从Windows拷到麒麟的时候,解压报错十有八九是文件不完整。
md5sum KingbaseES_*.tar.gz和官方给的md5值比对一致再解压。另外确认一下这个机器是否已经装过金仓,残留的旧安装会影响新装。看两个地方:/opt/Kingbase目录是否存在,以及有没有旧的Kingbase进程在跑:
ps -ef | grep kingbase ls /opt/Kingbase有残留的旧目录,建议备份后清掉再装,尤其老版本和新版本的配置文件差异很大,直接覆盖容易出隐性冲突。
3.2 静默安装与图形安装怎么选
麒麟平台的图形桌面环境不是每台机器都有。大多数服务器是纯命令行,这时候就老老实实走静默安装。金仓的安装脚本在解压后的目录里,一般是setup.sh。
我的经验是:测试环境用图形安装方便看界面,生产环境一律静默安装,好记录、好审计、好复现。静默安装的响应文件一般在安装包解压目录下,叫install.conf之类的。需要填的几个关键字段主要是:安装方式、安装目录、端口、数据目录、字符集。配置好之后执行:
./setup.sh -silent -response-file ../install.conf字符集这里特别提醒:金仓默认字符集是UTF8,但和Oracle迁移过来的时候,如果原来用的是ZHS16GBK,老老实实选UTF8,然后把应用连接串的字符集也改成UTF8,别搞什么GBK直连,编码纠纷能排查到你怀疑人生。
3.3 安装过程与目录结构核对
安装完成后,先别急着初始化数据库。习惯性检查一下安装目录的层次结构,确认关键目录都齐了:
ls -l /opt/Kingbase/ES/V8/ ls -l /opt/Kingbase/ES/V8/KESRealPro/金仓的目录结构大概是这样:/opt/Kingbase/ES/V8/KESRealPro下面有bin(可执行程序)、lib(动态库)、share(扩展和文档)、license.dat(license文件)、data(数据目录,初始化前可能是空的)。bin里最重要的就是initdb、sys_ctl、ksql,这三个对应了PostgreSQL的initdb、pg_ctl、psql,用过PG的兄弟上手会很快。
到这里还要做一步关键操作:检查license文件是否存在。没license安装程序也能装上,但initdb的时候大概率会失败。license文件一般叫license.dat,需要和当前机器绑定的CPU、IP或者机器码对应。装完发现license文件不对,会报类似“license is invalid”或“host not in license”的错误。
3.4 常见安装阶段错误与处理
安装阶段最常见的错误有两类,一类是解压失败,另一类是权限不足。
解压失败基本是介质损坏或磁盘满。用df -h看挂载点的使用率,注意/tmp目录往往容易被忽略,安装程序解压临时文件会用/tmp,/tmp满了也会报错。清理方式:
rm -rf /tmp/install*权限不足则集中在两个点:一是解压后的安装目录属主不是当前用户,二是license文件或者脚本没有可执行权限。既然安装全程用kylin用户,那解压、赋权这些动作也要用kylin用户做,或者做完之后强制chown回kylin:
chown -R kylin:kylin /tmp/KingbaseES_* chmod -R u+rwx /tmp/KingbaseES_*这里就引出了热词里那条“金仓 permission should be u=rwx”——别慌,后面第5章专门展开讲。
4. 数据库初始化、参数配置与服务管理
4.1 初始化数据库目录的核心参数
安装程序只负责把软件放到位,真正“建库”的动作是initdb。这一步的参数直接决定了数据库的编码、数据校验方式、超级用户,改起来代价很大,所以初始化的时侯就要想清楚。
多数场景用这套初始化命令就够了:
cd /opt/Kingbase/ES/V8/KESRealPro/V008R006C008B0014/Server/bin ./initdb -D /data/kingbase/data -E UTF8 -U system --locale=C参数说明:
-D指定数据目录,必须放在有空间的分区上,别放到安装目录里-E UTF8指定数据库编码,强烈建议直接用UTF8-U system指定超级用户名,默认是system;生产环境如果你是Oracle迁过来的,也可以把超级用户设成sys,反正应用侧能对应上就行--locale=C避免区域设置带来的排序和索引行为差异,稳妥
初始化成功后会看到清晰的提示,告诉你数据目录已经准备好,日志文件在哪。如果初始化失败,报错信息基本会出现在终端或者当前用户目录下的initdb.log里。看日志比猜原因高效一百倍。
4.2 数据目录空间的backup分区误区
前面热词里提到“金仓 permission”之外,另一个高频词是“cutback分区默认大小”。其实这里很多人理解偏了——backup分区是操作系统安装时自动划分的备份恢复分区,和金仓备份没有直接关系。
麒麟V10 SP3手动分区时如果不处理,系统会按自动化规则留出一个不小的backup分区。这个分区在系统层面承担恢复镜像功能,但对数据库来说基本是闲置空间。你不改它,它就白白吃掉几十GB;你改它,又担心系统恢复没地方。折中做法是把backup分区控制在20GB以内,够系统恢复用就行,其余空间给数据分区。磁盘本来就不大的机器,这步规划值得花两分钟好好算。
4.3 数据库服务注册与开机自启
初始化完成后,先用前台方式验证数据库能不能正常拉起:
./sys_ctl -D /data/kingbase/data -l /data/kingbase/logs/startup.log start看到LOG: database system is ready to accept connections这样的输出,再去看54321端口有没有监听:
netstat -tlnp | grep 54321确认端口正常后,再注册成系统服务,否则重启机器之后数据库起不来,生产环境这可是大事故。金仓安装包一般自带服务脚本,在/opt/Kingbase/ES/V8/KESRealPro/Server/script目录下,名字类似kingbaseesd。参考做法:
cp /opt/Kingbase/ES/V8/KESRealPro/Server/script/kingbaseesd /etc/init.d/ chkconfig --add kingbaseesd chkconfig kingbaseesd on如果需要调整数据目录或端口,直接编辑/etc/init.d/kingbaseesd里的环境变量,改完先stop再start,别热改。
4.4 常用参数调整
金仓的核心配置文件是数据目录下的kingbase.conf,和PostgreSQL的postgresql.conf类似。几个值得调整的关键参数:
| 参数 | 建议值 | 调整理由 |
|---|---|---|
| shared_buffers | 内存的1/4 | 共享缓冲区,太小则慢,太大则OS层缓存冲突 |
| work_mem | 32MB以上 | 排序、hash join的内存,小查询不要开太大 |
| maintenance_work_mem | 256MB以上 | 维护操作如建索引、VACUUM用 |
| max_connections | 200-500 | 按业务并发预估 |
| fsync | on | 绝对不要关,宁可性能弱一点也要保证一致性 |
| synchronous_commit | on或off | 交易类系统保持on,分析类可尝试off |
| logging_collector | on | 打开日志收集,排查问题必需 |
改完任何参数,都要重启数据库或者reload配置:
./sys_ctl -D /data/kingbase/data reload生产环境里shared_buffers特别容易调错过,有的同行直接给到内存的80%,结果OS层缺页严重,性能反而跌了。我的经验值是:内存16G给4G,内存64G给16G,别贪多。
5. 权限报错为主的常见问题排查实录
5.1 “permission should be u=rwx”到底是怎么回事
热词里那句“金仓 permission should be u=rwx”基本每个装金仓的人都会遇到。这个报错出现在安装程序解压后运行时,本质是文件权限校验:安装程序要求核心文件对属主或当前用户具备可读、可写、可执行权限,缺一个就报这一句。
最常见的诱因有两类。第一类是安装包用root解压,后续用普通用户运行,文件属主是root,普通用户自然没有执行权限。第二类是安装包拷贝到Linux时文件权限被重置成了644,可执行位丢了。解决办法很直接:
chown -R kylin:kylin /opt/Kingbase chmod -R u+rwx /opt/Kingbase这里多说一句:不要图省事用chmod 777,虽然能解决问题,但数据库程序目录对所有人可写,这本身就是一个安全风险,等保测评的时候是要被扣分的。正确姿势是chmod -R u+rwx或者755/750这种,宁可多花一分钟,别给审计留话柄。
5.2 依赖缺失与动态库兼容问题大全
麒麟系统的精简安装往往缺少一些基础库。实际踩过的坑供参考:
libaio缺失:异步IO初始化失败,报“Cannot open /proc/version”之类的怪异错误,其实内核正常,就是缺库。解决方式是yum install libaio libaio-devel。
libncurses缺失:ksql命令行工具起不来,终端输入乱码或者直接闪退。装ncurses-libs就能解决。
glibc版本过老:这个最麻烦,老版本麒麟或者某些ARM板子的glibc低于2.17,装新版金仓会直接报找不到GLIBC_2.18之类的符号。要么升级系统,要么选低版本金仓。这时候别硬扛,换版本比折腾库划算。
安全加固导致动态库加载失败:麒麟有部分版本默认开启mmap随机化或者地址随机化加固,偶尔把金仓的动态库加载搞挂了。临时关掉验证一下:
sysctl kernel.randomize_va_space=0如果关了之后问题消失,那就从金仓的启动脚本里加环境变量适配,而不是长期关闭系统加固。
5.3 数据目录磁盘写满与日志清理
生产环境跑几个月,最常犯的隐患是日志无限增长。金仓的日志默认在数据目录下的log或者sys_log里,在kingbase.conf配置log_directory控制。不清理的话,重库一个周就能写出几十GB日志。
日志管理建议分三层:第一层是数据库自身的日志轮转,设置log_rotation_age和log_rotation_size,按天或按大小切分;第二层是操作系统的journald日志,麒麟V10 SP3的/var/log/journal也可能膨胀,定期用journalctl --vacuum-size=500M收一收;第三层是运维crontab,每月压缩归档一次老日志,再清掉90天前的。
5.4 虚拟化环境下的性能与稳定性
热词里“虚拟机安装麒麟V10,金仓”说明有不少人是先把麒麟装虚拟机里练手。虚拟机装没问题,但有几个点必须提醒:
磁盘模式:用SCSI而不是IDE,IDE模式IO延迟高得离谱,压测数据完全没法看。
内存超分:宿主机给虚机超分了内存,数据库跑到高并发容易触发swap抖动。看机器上有没有swap发生,最简单的办法是free -h观察swap usage,一旦持续增长,赶紧检查宿主机配置。
CPU核数:金仓的license有的按CPU核数授权,虚拟机分配8核但license只买了4核,初始化虽能过,应用连进来可能被拒。安装前把CPU拓扑看清楚,避免授权问题。
5.5 连接被拒排查清单
最后几个“数据库装好了但连不上”的经典原因,我整理成速查:
| 现象 | 优先排查项 |
|---|---|
| 连接超时 | 防火墙、安全组、端口是否监听 |
| 认证失败 | sys_hba.conf里的md5/scram-sha-256策略 |
| 提示不认识主机 | sys_hba.conf未放行客户端IP段 |
| 数据库起不来 | kingbase.conf配置错误,看启动日志 |
| license失效 | 检查system时间、hostid是否匹配 |
sys_hba.conf对应PG的pg_hba.conf,路径在数据目录下。测试环境图省事可以放开本地所有用户,生产环境务必用最小授权原则,按网段和用户精确放行。
5.6 给初学者的最后操作建议
如果你也是第一次在麒麟V10 SP3上装金仓,我的建议是先在虚拟机里完整跑一遍“安装-初始化-建库-建表-插入-查询”的闭环,顺便快照一下环境,再上真机操作。等真机部署时,把每一步的命令都记录保存,方便回溯。另外,装完之后别急着走,至少要看一遍启动日志、确认端口、确认进程,再测一条简单的SQL,才能放心交付。
我在实际项目里,装金仓最耗时的往往不是安装本身,而是前期的环境检查和后期的权限收口。这两块做到位了,剩下的就是按部就班执行命令。希望这篇经验能帮你少走几个弯路,尤其那些在报错信息里反复打转的夜晚,能省则省。