十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

Oracle 19c RAC安装排雷:从INS-06006错误到RPM依赖的实战解决方案

Oracle 19c RAC安装排雷:从INS-06006错误到RPM依赖的实战解决方案 1. 项目概述一次典型的Oracle 19c RAC安装排雷实录最近在给客户部署一套新的Oracle 19c RAC环境本以为轻车熟路没想到在安装Grid InfrastructureGI软件的第一步就栽了跟头遇到了经典的“INS-06006”错误。这个错误提示“无法列出节点名”看似简单背后却牵扯到操作系统环境、软件包依赖和网络配置等一系列基础问题尤其对于刚接触RAC或者在新版本操作系统上部署的朋友来说很容易在这里卡住。更棘手的是在解决这个问题的过程中还连带暴露了“没找到rpm命令”以及一系列RPM包依赖的“连环坑”。今天我就把这次踩坑和填坑的全过程结合最新的CentOS/RHEL 7.9、Oracle Linux 8等环境详细拆解一遍。无论你是正在部署19c RAC还是未来可能遇到类似问题这篇从实战中总结的排错指南应该能帮你省下不少折腾的时间。2. 问题深度解析INS-06006错误的根源与表象2.1 INS-06006错误的直接诱因当你启动Oracle Grid Infrastructure安装向导runInstaller在“集群节点选择”环节点击“添加”或直接下一步时突然弹出一个错误对话框核心信息就是“INS-06006: Passwordless SSH connectivity not set up between the following node(s)”。很多人的第一反应是去检查SSH互信这没错但这只是表象之一。实际上INS-06006是一个比较笼统的错误码它本质上是安装程序在尝试与远程节点通信并执行基础检查时失败了。失败的原因可能有好几个SSH问题只是最常见的一种。安装程序底层会调用ssh、scp等命令并依赖/etc/hosts文件或DNS来解析节点名。如果节点名解析失败比如主机名配置了域名但/etc/hosts里只写了短名或者SSH连接需要手动确认首次连接时的known_hosts提示甚至是目标节点上的bash环境变量有问题都会触发这个错误。但根据我这次的经验以及近期社区的热议在新版最小化安装的系统上一个更隐蔽的根源是目标节点上缺少必要的操作系统工具包导致安装程序连最基本的“节点存在性验证”都无法完成。2.2 隐藏的“元凶”RPM命令缺失与包管理器环境在排查SSH确认无误后我通过查看安装日志通常位于$ORACLE_BASE/cfgtoollogs下发现了更具体的线索。日志显示安装程序尝试在远程节点上执行rpm -q命令来查询某个基础包如binutils的版本时返回了“命令未找到”或类似错误。这就是第二个热搜词“没找到rpm命令”的由来。这听起来有点不可思议rpm是Red Hat系Linux的基石怎么会没有但在以下两种场景中确实可能发生极度精简的系统镜像某些云平台或容器化的基础镜像为了追求极致小巧可能只安装了dnf或yum它们底层调用rpm但没有将/usr/bin/rpm这个可执行文件包含在基础包rpm中这听起来矛盾实际上rpm命令本身来自rpm这个包而yum或dnf是另一个包。在最小安装时有可能只安装了包管理器dnf的核心部分而rpm命令行工具被意外省略虽然罕见但确有案例。环境变量PATH被破坏更常见的情况是目标节点的PATH环境变量设置异常导致安装程序通过SSH远程执行命令时在/usr/bin或/bin目录下找不到rpm。这可能发生在自定义了全局环境变量的系统中。一旦rpm命令无法执行Oracle安装程序的一系列预检查就全部瘫痪了因为它严重依赖rpm来验证系统包是否满足要求。于是INS-06006就成了最终呈现给用户的结果。2.3 连锁反应操作系统RPM包依赖的深水区解决了rpm命令问题只是拿到了入场券。紧接着你就会正式踏入Oracle RAC安装中最磨人的阶段满足那一长串的操作系统RPM包依赖要求。Oracle 19c RAC对于Linux的包依赖要求非常严格不仅要求包存在还对最低版本有明确限制。这引出了搜索词中大量的“rpm 下载网站”、“openssh rpm”、“socat的rpm包”等需求。对于CentOS/RHEL 7.9主要依赖包括但不限于binutilscompat-libcap1compat-libstdc-33gccgcc-cglibcglibc-develkshlibaiolibaio-devellibgcclibstdclibstdc-devellibXilibXtstmakesysstatelfutils-libelf-develfontconfig-devellibXrenderlibXrandrlibXineramalibXcursorlibXaulibXftlibXpmlibXmulibpnglibjpeglibXawlibX11libXextmotifopenssh-clients等。其中ksh、compat-libstdc-33、libX*系列图形包在最小化安装中很容易缺失。而对于Oracle Linux 8或RHEL 8包名有部分变化例如某些compat-lib*包被新的版本替代并且需要关注libnsl等包。如果系统是ARM架构如飞腾搜索“麒麟v10 飞腾版 openssh-10.3p1 rpm 升级包”这类词条说明在国产化替代环境中寻找架构兼容的RPM包更是难上加难官方仓库可能不提供需要从可信的第三方或厂商处获取。注意切勿随意从不明网站下载RPM包这可能导致系统被植入恶意软件或出现不兼容问题。应优先使用操作系统自带的官方仓库如CentOS的Base、EPEL、Oracle的ULN或Yum服务器或像repo.mysql.com用于mysql数据库rpm安装这样的知名软件供应商仓库。3. 系统性解决方案与实操步骤3.1 第一阶段诊断与修复基础通信环境在开始安装之前我们必须确保所有节点处于一个“可被安装程序正常探测”的状态。步骤1验证节点名解析至关重要这是导致INS-06006的高频原因。在所有集群节点上检查/etc/hosts文件。必须确保每个节点的公有主机名public hostname、私有主机名private hostname和虚拟主机名VIP hostname都能被正确解析。错误示例在/etc/hosts里只写了192.168.1.10 rac1但你的节点实际配置的主机名是rac1.example.com。正确做法在/etc/hosts中为每个IP地址同时配置短名和全限定域名FQDN。例如192.168.1.10 rac1 rac1.example.com 192.168.1.11 rac2 rac2.example.com 192.168.1.20 rac1-priv rac1-priv.example.com 192.168.1.21 rac2-priv rac2-priv.example.com 192.168.1.30 rac1-vip rac1-vip.example.com 192.168.1.31 rac2-vip rac2-vip.example.com使用hostname和hostname -f命令分别查看短名和FQDN确保它们都能ping通。步骤2建立彻底的SSH互信不要仅仅满足于能免密登录。使用Oracle提供的sshUserSetup.sh脚本或手动建立互信时务必包含所有类型的主机名短名、FQDN、私有IP对应主机名。在所有节点上为oracle和grid用户生成密钥ssh-keygen -t rsa。将所有节点的公钥id_rsa.pub内容汇总追加到每个节点每个用户的~/.ssh/authorized_keys文件中。执行彻底的连通性测试ssh rac1 datessh rac1.example.com datessh rac1-priv date。确保每一个命令都不需要输入密码且没有首次连接提示。步骤3检查并修复rpm命令问题诊断从一个节点SSH到另一个节点直接执行which rpm和rpm --version。ssh rac2 which rpm rpm --version如果返回/usr/bin/which: no rpm in (...)或bash: rpm: command not found则证实了问题。修复如果rpm包确实未安装极罕见连接到该问题节点使用yum或dnf安装它。因为yum本身可能依赖rpm所以可能需要通过rpm命令从安装介质手动安装rpm包形成“鸡生蛋”的循环。更实际的方法是如果系统是克隆出来的检查源镜像是否完整如果是云主机考虑重置或选择更标准的基础镜像。如果rpm存在但PATH问题检查目标节点上/etc/profile、~/.bash_profile等文件确保PATH变量包含了/usr/bin。一个稳妥的方法是在grid和oracle用户的~/.bash_profile中显式导出PATHexport PATH$PATH:/usr/bin:/bin。然后务必通过SSH执行一个交互式命令来触发环境变量重新加载例如ssh rac2 source ~/.bash_profile; which rpm。3.2 第二阶段一站式解决RPM包依赖解决了通信问题我们就可以集中火力攻克包依赖。我推荐一个高效且可靠的方法而不是手动一个个去找。步骤1使用Oracle官方预安装脚本最推荐Oracle提供了名为rpm的预安装检查脚本但它更强大的功能是能生成一份缺失包的详细报告和修复脚本。从Oracle 19c Grid安装介质中找到runcluvfy.sh脚本。但更直接的是使用gridSetup.sh的-executePrereqs参数。在任意节点以grid用户身份运行cd /path/to/grid_software ./gridSetup.sh -executePrereqs -silent -responseFile /path/to/response_file.rsp如果没有响应文件可以临时运行检查虽然可能会提示缺少响应文件但有时会先进行一部分检查。更好的方式是先运行集群验证工具./runcluvfy.sh stage -pre crsinst -n rac1,rac2 -verbose仔细阅读输出日志。它会明确列出每个节点上缺失的包、版本不满足的包。这是你解决问题的权威清单。步骤2配置本地Yum/DNF仓库并批量安装手动下载单个RPM包是下策。我们应该配置一个包含所有依赖的本地仓库。挂载操作系统ISO镜像将CentOS/RHEL的完整安装ISO挂载到所有节点例如/mnt/iso。创建本地仓库文件# 在所有节点上操作 sudo mkdir -p /media/localrepo sudo mount -o loop /path/to/CentOS-7-x86_64-Everything.iso /media/localrepo # 创建repo文件 sudo cat /etc/yum.repos.d/local.repo EOF [local] nameLocal Repository baseurlfile:///media/localrepo enabled1 gpgcheck0 EOF安装缺失的包组根据runcluvfy输出的清单使用yum groupinstall和单独安装结合。# 安装常用的开发工具和兼容库组 sudo yum groupinstall -y Development Tools sudo yum install -y compat-libstdc-33 libaio-devel ksh elfutils-libelf-devel fontconfig-devel libXrender-devel libXrandr-devel libXinerama-devel libXcursor-devel libXtst-devel libXi-devel # 对于图形化安装如果需要在服务器上运行OUI还需要 sudo yum install -y xorg-x11-utils xorg-x11-xauth xorg-x11-server-utils针对compat-libcap1这个包在CentOS 7的默认仓库中可能叫compat-libcap1也可能需要从较旧的版本或EPEL仓库中寻找。如果找不到有时可以忽略因为更高版本的libcap可能已满足要求但这需要根据具体错误判断。步骤3处理特殊包与架构适配对于像“麒麟v10 飞腾版”这样的ARM架构环境通用仓库不适用。寻找可信源联系操作系统厂商麒麟软件获取对应的ARM架构软件仓库源.repo文件或离线仓库包。手动编译作为最后的手段对于极少数在ARM仓库中也没有的包如特定版本的compat-libstdc-33可以考虑在相同架构的机器上下载源码包SRPM进行编译。但这需要较强的技术能力。使用Oracle Linux如果条件允许在ARM服务器上直接安装Oracle Linux for ARM版本其预配置的Unbreakable Linux Network (ULN)仓库能提供最好的兼容性。实操心得在开始安装Grid之前我习惯在所有节点上手动执行一遍yum install oracle-database-preinstall-19c。这个RPM包是Oracle为单实例数据库提供的但它会安装大量共通的依赖包如binutilsgcclibaio等能为RAC安装扫清大约70%的包障碍。虽然它不包含RAC特定的高可用性包但作为基础准备非常有效。4. 安装过程中的问题排查与现场调试即使准备工作万无一失安装过程中仍可能遇到变数。掌握现场调试方法至关重要。4.1 实时日志监控不要只盯着安装程序的图形界面进度条。打开多个终端实时跟踪关键日志全局安装日志$ORACLE_BASE/cfgtoollogs/gridSetup/下的时间戳目录查看gridSetupActions*.log。特定操作日志在安装的每个阶段OUI会在/tmp下生成OraInstall*目录里面的日志更详细。集群验证日志$GRID_HOME/cfgtoollogs/cluvfy/下的日志。当出现错误时第一时间去这些日志里搜索ERROR、CRS-、INS-等关键字。INS-06006的详细原因通常会在这些日志中暴露无遗比如会显示它具体在执行哪个远程命令时失败。4.2 手动模拟安装程序检查如果你怀疑是某个特定检查点失败可以手动模拟安装程序的行为。例如针对节点通信# 以grid用户从节点1执行检查节点2 ssh rac2 /usr/bin/rpm -q --queryformat %{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n binutils # 检查内核参数 ssh rac2 sysctl -n kernel.sem # 检查用户限制 ssh rac2 ulimit -Hn ulimit -Sn通过手动执行你能立刻看到具体的错误输出是“包未安装”还是“权限被拒绝”抑或是“命令未找到”。4.3 应对图形安装界面问题如果因为缺少libX*包导致安装界面无法启动与“chrome rpm安装包”搜索类似都是GUI软件依赖而你又在纯字符界面的服务器上有两条路安装必要的X11库如上文所述安装xorg-x11-xauth等包然后通过SSH X11 Forwarding从本地有图形界面的电脑启动安装程序。使用ssh -X gridrac1登录再运行./gridSetup.sh。采用静默安装这是生产环境最主流、最可靠的方式。先在一个测试环境通过图形界面生成响应文件-saveResponseFile然后仔细修改这个响应文件最后在所有生产节点上使用-silent -responseFile参数进行安装。这完全避免了图形界面的依赖问题。5. 常见问题速查与终极清单以下是我将多次实战中遇到的问题浓缩成的速查表你可以像查字典一样使用它问题现象可能原因排查命令与解决方案INS-060061. SSH互信未建立或不全。2./etc/hosts解析错误。3. 远程节点rpm命令不可用。4. 远程节点PATH环境变量错误。1.ssh rac2 date测试所有主机名。2. 检查/etc/hosts确保短名、FQDN、VIP、私有IP主机名均有对应。3.ssh rac2 which rpm; echo $PATH。4. 检查目标节点~/.bash_profile中的PATH设置。“没找到rpm命令”1.rpm包确实未安装罕见。2.PATH环境变量未包含/usr/bin。1. 尝试yum install rpm如果yum可用。2. 在用户profile文件中添加export PATH/usr/bin:$PATH并source后测试。缺少compat-libstdc-33CentOS 7默认仓库可能不包含此老版本库。1. 从CentOS Vault仓库如http://vault.centos.org下载对应版本的RPM手动安装。2. 或安装compat-libstdc更新版本有时可兼容。缺少libX*系列包最小化安装未安装图形库。sudo yum install xorg-x11-utils xorg-x11-xauth libXtst-devel libXi-devel ...根据错误提示逐个安装。安装程序卡在“设置Oracle基目录”权限问题。/u01/app等目录的属主应为grid:oinstall。sudo chown -R grid:oinstall /u01/app sudo chmod -R 775 /u01/app集群服务CRS启动失败共享存储ASM权限、网络SCAN配置、内核参数hugepages等问题。检查$GRID_HOME/log/nodename/alert*.log和crsctl stat res -t输出。重点看ASM磁盘组权限kfod、网络接口oifcfg。静默安装失败响应文件参数错误、环境变量未设置、预检查未通过。1. 对比图形界面生成的响应文件。2. 在静默安装命令前显式设置ORACLE_HOMEORACLE_BASE等变量。3. 单独运行预检查-executePrereqs。最后再分享一个小技巧在开始漫长的Grid安装之前不妨先花点时间在所有节点上运行Oracle的集群验证工具CLUVFY的完整预检查。虽然它可能报告一些警告如时间同步偏差几秒但对于错误ERROR必须一个不漏地解决。把它当作一次严格的“入学考试”通过之后正式的安装过程往往会顺利得多。毕竟在RAC的世界里前期一分的细致准备能避免后期十分痛苦的排错。
返回列表