ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

麒麟V10 SP3安装金仓数据库实战:环境预检与权限排错全攻略

麒麟V10 SP3安装金仓数据库实战:环境预检与权限排错全攻略 麒麟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标准要求是信号量SEMMSL1024、SEMMNS4096、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分区调小或者干脆合并把空间留给数据分区。分区规划参考分区建议大小挂载点用途/boot2G/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 urwx”。建立专用用户的流程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-port54321/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.datlicense文件、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回kylinchown -R kylin:kylin /tmp/KingbaseES_* chmod -R urwx /tmp/KingbaseES_*这里就引出了热词里那条“金仓 permission should be urwx”——别慌后面第5章专门展开讲。4. 数据库初始化、参数配置与服务管理4.1 初始化数据库目录的核心参数安装程序只负责把软件放到位真正“建库”的动作是initdb。这一步的参数直接决定了数据库的编码、数据校验方式、超级用户改起来代价很大所以初始化的时侯就要想清楚。多数场景用这套初始化命令就够了cd /opt/Kingbase/ES/V8/KESRealPro/V008R006C008B0014/Server/bin ./initdb -D /data/kingbase/data -E UTF8 -U system --localeC参数说明-D指定数据目录必须放在有空间的分区上别放到安装目录里-E UTF8指定数据库编码强烈建议直接用UTF8-U system指定超级用户名默认是system生产环境如果你是Oracle迁过来的也可以把超级用户设成sys反正应用侧能对应上就行--localeC避免区域设置带来的排序和索引行为差异稳妥初始化成功后会看到清晰的提示告诉你数据目录已经准备好日志文件在哪。如果初始化失败报错信息基本会出现在终端或者当前用户目录下的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_mem32MB以上排序、hash join的内存小查询不要开太大maintenance_work_mem256MB以上维护操作如建索引、VACUUM用max_connections200-500按业务并发预估fsyncon绝对不要关宁可性能弱一点也要保证一致性synchronous_commiton或off交易类系统保持on分析类可尝试offlogging_collectoron打开日志收集排查问题必需改完任何参数都要重启数据库或者reload配置./sys_ctl -D /data/kingbase/data reload生产环境里shared_buffers特别容易调错过有的同行直接给到内存的80%结果OS层缺页严重性能反而跌了。我的经验值是内存16G给4G内存64G给16G别贪多。5. 权限报错为主的常见问题排查实录5.1 “permission should be urwx”到底是怎么回事热词里那句“金仓 permission should be urwx”基本每个装金仓的人都会遇到。这个报错出现在安装程序解压后运行时本质是文件权限校验安装程序要求核心文件对属主或当前用户具备可读、可写、可执行权限缺一个就报这一句。最常见的诱因有两类。第一类是安装包用root解压后续用普通用户运行文件属主是root普通用户自然没有执行权限。第二类是安装包拷贝到Linux时文件权限被重置成了644可执行位丢了。解决办法很直接chown -R kylin:kylin /opt/Kingbase chmod -R urwx /opt/Kingbase这里多说一句不要图省事用chmod 777虽然能解决问题但数据库程序目录对所有人可写这本身就是一个安全风险等保测评的时候是要被扣分的。正确姿势是chmod -R urwx或者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_space0如果关了之后问题消失那就从金仓的启动脚本里加环境变量适配而不是长期关闭系统加固。5.3 数据目录磁盘写满与日志清理生产环境跑几个月最常犯的隐患是日志无限增长。金仓的日志默认在数据目录下的log或者sys_log里在kingbase.conf配置log_directory控制。不清理的话重库一个周就能写出几十GB日志。日志管理建议分三层第一层是数据库自身的日志轮转设置log_rotation_age和log_rotation_size按天或按大小切分第二层是操作系统的journald日志麒麟V10 SP3的/var/log/journal也可能膨胀定期用journalctl --vacuum-size500M收一收第三层是运维crontab每月压缩归档一次老日志再清掉90天前的。5.4 虚拟化环境下的性能与稳定性热词里“虚拟机安装麒麟V10金仓”说明有不少人是先把麒麟装虚拟机里练手。虚拟机装没问题但有几个点必须提醒磁盘模式用SCSI而不是IDEIDE模式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才能放心交付。我在实际项目里装金仓最耗时的往往不是安装本身而是前期的环境检查和后期的权限收口。这两块做到位了剩下的就是按部就班执行命令。希望这篇经验能帮你少走几个弯路尤其那些在报错信息里反复打转的夜晚能省则省。
返回列表