addnode.sh并非远程安装工具,仅完成节点配置写入OCR,需提前在新节点静默安装GI至root.sh前、配置ocr.loc、同步DNS/GNS、手动启动ASM及监听器,并验证CRS状态、磁盘组挂载和实例运行。

addnode.sh 不是“远程一键加节点”工具
它根本不会在新节点上自动安装 Grid Infrastructure;你必须提前在新节点完成 GI 的静默安装(到 root.sh 前置阶段),否则脚本直接报 ORA-15032 或 Cannot communicate with CRS daemon。常见误操作是把 addnode.sh 当成安装器,结果卡在 “Copying files to remote nodes…” —— 实际是 SSH 连不通 root 用户,或新节点压根没解压 $GRID_HOME。
- 必须先在新节点手动执行:
gridSetup.sh -silent -executeConfigTools -responseFile /path/to/grid.rsp(不带-performInstall,也不运行root.sh) -
/etc/oracle/ocr.loc必须存在且内容正确,例如:ocrconfig_loc=+OCR或指向 NFS 路径;缺失或路径不可读会导致 OCR 初始化失败 - 检查
olsnodes -n在原节点是否已列出新节点名和 IP;若无,说明 DNS/GNS 未同步,addnode.sh会在发现阶段超时
新节点 ASM 实例默认不启动,必须手动干预
即使 addnode.sh 显示成功,crsctl stat res -t | grep asm 很可能显示 OFFLINE,因为 Flex ASM 模式下新节点默认不托管 ASM 实例。此时 asmcmd lsdg 会报 ORA-15000,所有 diskgroup 无法挂载。
- 先确认 ASM 模式:
crsctl query css votedisk输出含ASM,说明 voting disk 在 ASM 上,必须让 ASM 实例先 up - 手动启动:
srvctl start asm -n <new_node_name></new_node_name>;若失败,查$ORACLE_HOME/log/<node>/agent/crsd/orarootagent_root/orarootagent_root.log</node>,常见原因是/dev/asm*设备不可见 - RHEL8+ 环境必须启用 ASM Filter Driver:
asmfilterdriver -i,并确认lsmod | grep oracleasm有输出;udev 规则缺失也会导致磁盘识别失败
节点加入后 SCAN VIP 不漂移?不是网络问题,是资源依赖没理清
客户端连不上新实例,常归咎于 SCAN VIP 没漂过去,但真实原因往往是数据库实例依赖的 ASM diskgroup 未挂载,或监听器未注册。SCAN VIP 本身不“漂移”,它由 GNS 动态分配,前提是新节点上的 ora.LISTENER_SCAN<n>.lsnr</n> 和 ora.<db_name>.db</db_name> 资源状态为 ONLINE 且无依赖错误。
- 验证监听器:
srvctl status listener -n <new_node_name></new_node_name>;若为STOPPED,手动启动:srvctl start listener -n <new_node_name></new_node_name> - 检查数据库实例注册:
lsnrctl services <scan_listener_name></scan_listener_name>是否列出新节点的实例服务名;若无,确认local_listener参数指向本节点 VIP,且remote_listener指向 SCAN - 别跳过
cluvfy stage -pre nodeadd -n <new_node> -fixup</new_node>:它能提前暴露 udev 权限、内核参数(如kernel.sem)、cvuqdisk包缺失等硬伤
最容易被忽略的三个细节
脚本返回 “Successfully added node” 只代表配置写入 OCR,不代表节点真正可用。以下三点不验证,上线后必出故障:
-
crsctl check crs在新节点上必须返回 “CRS-4638: Oracle High Availability Services is online”,而非仅 “CRS-4639: Could not contact Oracle High Availability Services” -
asmcmd lsdg必须能看到所有 diskgroup 状态为MOUNTED,且USABLE_FILE_MB > 0;OCR/Voting 所在 DG 空间不足 2GB 会导致后续扩容失败 - 用
sqlplus / as sysdba连新节点实例,执行SELECT inst_id, instance_name, status FROM gv$instance;——inst_id必须对应新节点,且status = OPEN;否则 DBCA 添加实例步骤实际未生效











