高可用 & 容灾15 分钟阅读
Oracle 19c RAC 集群安装完整指南(双节点实战)
从零开始搭建 Oracle 19c RAC 双节点集群的完整教程。涵盖共享存储配置、网络规划、Grid Infrastructure 安装、ASM 磁盘组创建、RAC 数据库建库,以及集群验证和常见故障排查。
2026年4月27日阅读—点赞—收藏—
oracle19crac集群高可用
在知识库中专注阅读,并随时返回相关工具与课程
从零开始搭建 Oracle 19c RAC 双节点集群的完整教程。涵盖共享存储配置、网络规划、Grid Infrastructure 安装、ASM 磁盘组创建、RAC 数据库建库,以及集群验证和常见故障排查。
Oracle Real Application Clusters(RAC)是企业级数据库高可用架构的核心方案。在金融、电信、政务等关键业务系统中,RAC 承担着两大核心使命:高可用和负载均衡。当单节点发生故障时,业务可在秒级自动切换到存活节点,实现接近零停机的服务连续性;在日常运行中,多节点可以同时处理 SQL 请求,线性提升数据库吞吐能力。
对于 DBA 而言,RAC 几乎是中高级岗位的必考技能。无论是等保合规要求的"双活"部署,还是核心系统的容灾架构设计,RAC 都是绕不开的选项。本文将以 Oracle 19c + 双节点 为例,从零开始完成一套完整的 RAC 集群搭建。
本次搭建采用经典的双节点 RAC 架构,拓扑结构如下:
Oracle 19c RAC 双节点网络与共享存储架构图
RAC 网络分为三类:
两个节点的 /etc/hosts 保持一致:
1# Public23> **本章目标**:掌握本章核心知识点4> **前置要求**:完成前序章节学习5> **预计时长**:60 分钟6710.10.10.101 rac-node1810.10.10.102 rac-node29# VIP1010.10.10.103 rac-node1-vip1110.10.10.104 rac-node2-vip12# Private13192.168.10.1 rac-node1-priv14192.168.10.2 rac-node2-priv15# SCAN1610.10.10.100 rac-scan生产环境建议使用 DNS 解析 SCAN 地址,而非 hosts 文件。
共享磁盘必须在两个节点上呈现一致的设备名和权限。推荐使用 UDEV 规则(或 ASMLib)来绑定。
首先获取磁盘的唯一标识:
1# 查看磁盘 SCSI ID2/usr/lib/udev/scsi_id -g -u -d /dev/sdb3# 输出示例:36000c29a1b2c3d4e5f6a7b8c9d0e1f2编写 UDEV 规则文件 /etc/udev/rules.d/99-oracle-asmdevices.rules:
1# OCR 磁盘2KERNEL=="sd*", SUBSYSTEM=="block", ENV{ID_SERIAL}=="36000c29a1b2c3d4e5f6a7b8c9d0e1f2", SYMLINK+="asmdisks/ocr1", OWNER="grid", GROUP="asmadmin", MODE="0660"3KERNEL=="sd*", SUBSYSTEM=="block", ENV{ID_SERIAL}=="36000c29a1b2c3d4e5f6a7b8c9d0e2f3", SYMLINK+="asmdisks/ocr2", OWNER="grid", GROUP="asmadmin", MODE="0660"4KERNEL=="sd*", SUBSYSTEM=="block", ENV{ID_SERIAL}=="36000c29a1b2c3d4e5f6a7b8c9d0e3f4", SYMLINK+="asmdisks/ocr3", OWNER="grid", GROUP="asmadmin", MODE="0660"56# DATA 磁盘7KERNEL=="sd*", SUBSYSTEM=="block", ENV{ID_SERIAL}=="36000c29d4e5f6a7b8c9d0e1f2a3b4c5", SYMLINK+="asmdisks/data1", OWNER="grid", GROUP="asmadmin", MODE="0660"89# FRA 磁盘10KERNEL=="sd*", SUBSYSTEM=="block", ENV{ID_SERIAL}=="36000c29e5f6a7b8c9d0e1f2a3b4c5d6", SYMLINK+="asmdisks/fra1", OWNER="grid", GROUP="asmadmin", MODE="0660"使规则生效:
1udevadm control --reload-rules2udevadm trigger3ls -l /dev/asmdisks/两个节点都必须配置相同的 UDEV 规则,确保设备名一致。
1# 检查内核参数(两节点均执行)2sysctl -a | grep -E "shm|sem|file-max|ip_local_port_range"34# 检查必需 RPM 包5rpm -q binutils compat-libcap1 compat-libstdc++-33 gcc gcc-c++ glibc glibc-devel ksh libaio libaio-devel libX11 libXau libXi libXtst make net-tools smartmontools sysstat67# 配置 grid 和 oracle 用户的资源限制 /etc/security/limits.conf8grid soft nofile 10249grid hard nofile 6553610grid soft nproc 204711grid hard nproc 1638412grid soft stack 1024013grid hard stack 3276814grid soft memlock unlimited15grid hard memlock unlimited1617# 配置 SSH 等效性(grid 用户)18ssh-keygen -t rsa19ssh-copy-id grid@rac-node120ssh-copy-id grid@rac-node21# 以 grid 用户在节点 1 执行2mkdir -p /u01/app/19.3.0/grid3cd /u01/app/19.3.0/grid4unzip /tmp/LINUX.X64_193000_grid_home.zip56# 启动图形安装7export DISPLAY=:0.08./gridSetup.sh安装向导中的关键选项:
安装向导完成后会提示执行 root 脚本,必须严格按顺序执行:
1# ---- 步骤 1:两个节点都执行 orainstRoot.sh ----2# 节点 1(先执行)3[root@rac-node1 ~]# /u01/app/oraInventory/orainstRoot.sh45# 节点 26[root@rac-node2 ~]# /u01/app/oraInventory/orainstRoot.sh78# ---- 步骤 2:先节点 1 执行 root.sh,完成后再节点 2 ----9# 节点 1(先执行,等待完成!)10[root@rac-node1 ~]# /u01/app/19.3.0/grid/root.sh1112# 节点 2(节点 1 的 root.sh 完成后才能执行)13[root@rac-node2 ~]# /u01/app/19.3.0/grid/root.sh注意
注意:root.sh 必须在节点 1 成功完成后再执行节点 2,否则会导致集群初始化失败。这是最常见的安装失败原因之一。
GI 安装过程中已创建 +OCR 磁盘组。现在需要创建 DATA 和 FRA 磁盘组。
使用 asmca 图形工具或 SQL 命令创建:
1-- 以 grid 用户连接 ASM 实例2sqlplus / as sysasm34-- 创建 DATA 磁盘组5CREATE DISKGROUP DATA EXTERNAL REDUNDANCY6 DISK '/dev/asmdisks/data1'7 ATTRIBUTE 'compatible.asm' = '19.0.0.0',8 'compatible.rdbms' = '19.0.0.0',9 'au_size' = '4M';1011-- 创建 FRA 磁盘组12CREATE DISKGROUP FRA EXTERNAL REDUNDANCY13 DISK '/dev/asmdisks/fra1'14 ATTRIBUTE 'compatible.asm' = '19.0.0.0',15 'compatible.rdbms' = '19.0.0.0',16 'au_size' = '4M';1718-- 验证磁盘组状态19SELECT name, state, type, total_mb, free_mb FROM v$asm_diskgroup;输出示例:
1NAME STATE TYPE TOTAL_MB FREE_MB2------ --------- -------- ---------- ----------3OCR MOUNTED NORMAL 30720 286004DATA MOUNTED EXTERNAL 512000 5118005FRA MOUNTED EXTERNAL 512000 5118001# 以 oracle 用户在节点 1 执行2mkdir -p /u01/app/oracle/product/19.3.0/dbhome_13cd /u01/app/oracle/product/19.3.0/dbhome_14unzip /tmp/LINUX.X64_193000_db_home.zip56# 仅安装软件(Software Only)7./runInstaller -silent \8 -responseFile /u01/app/oracle/product/19.3.0/dbhome_1/install/response/db_install.rsp \9 oracle.install.option=INSTALL_DB_SWONLY \10 ORACLE_HOSTNAME=rac-node1 \11 UNIX_GROUP_NAME=oinstall \12 INVENTORY_LOCATION=/u01/app/oraInventory \13 ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1 \14 ORACLE_BASE=/u01/app/oracle \15 oracle.install.db.InstallEdition=EE \16 oracle.install.db.CLUSTER_NODES=rac-node1,rac-node2 \17 oracle.install.db.isRACOneInstall=false \18 SECURITY_UPDATES_VIA_MYORACLESUPPORT=false \19 DECLINE_SECURITY_UPDATES=true2021# 两个节点执行 root.sh22[root@rac-node1 ~]# /u01/app/oracle/product/19.3.0/dbhome_1/root.sh23[root@rac-node2 ~]# /u01/app/oracle/product/19.3.0/dbhome_1/root.sh1dbca -silent -createDatabase \2 -gdbName orcl \3 -sid orcl \4 -templateName General_Purpose.dbc \5 -sysPassword "Oracle#2026" \6 -systemPassword "Oracle#2026" \7 -datafileDestination "+DATA" \8 -recoveryAreaDestination "+FRA" \9 -recoveryAreaSize 204800 \10 -characterSet AL32UTF8 \11 -nationalCharacterSet AL16UTF16 \12 -nodeinfo rac-node1,rac-node2 \13 -databaseType MULTIPURPOSE \14 -automaticMemoryManagement false \15 -totalMemory 8192 \16 -redoLogFileSize 500 \17 -emConfiguration NONE \18 -storageType ASM \19 -nodelist rac-node1,rac-node2建库完成后,两个节点分别启动实例 orcl1 和 orcl2。
安装完成后,务必通过以下命令逐一验证集群状态。
1# 查看所有集群资源2crsctl stat res -t关键资源应全部为 ONLINE:
1NAME TARGET STATE SERVER STATE_DETAILS2-------------------------------------------------------------------3ora.OCR.dg ONLINE ONLINE rac-node14ora.DATA.dg ONLINE ONLINE rac-node15ora.FRA.dg ONLINE ONLINE rac-node16ora.LISTENER.lsnr ONLINE ONLINE rac-node17ora.orcl.db ONLINE ONLINE rac-node1 Open8 ONLINE ONLINE rac-node2 Open9ora.scan1.vip ONLINE ONLINE rac-node110ora.rac-node1.vip ONLINE ONLINE rac-node111ora.rac-node2.vip ONLINE ONLINE rac-node21# 查看 RAC 数据库状态2srvctl status database -d orcl34# 期望输出:5# Instance orcl1 is running on node rac-node16# Instance orcl2 is running on node rac-node21# 查看集群节点状态2olsnodes -n -s34# 查看 CRS 状态5crsctl check crs67# 查看 SCAN Listener8srvctl status scan_listener910# 查看 ASM 实例11srvctl status asm1213# 运行集群验证工具14cluvfy comp healthcheck -collect cluster -bestpractice1# 通过 SCAN 地址连接2sqlplus system/Oracle#2026@rac-scan:1521/orcl34SQL> SELECT instance_name, host_name, status FROM gv$instance;56INSTANCE_NAME HOST_NAME STATUS7-------------- ------------ ------8orcl1 rac-node1 OPEN9orcl2 rac-node2 OPEN现象:节点突然重启,alert 日志出现 CSS daemon is terminating due to a fatal error。
原因:Private 网络延迟过高或中断,CSS(Cluster Synchronization Services)心跳超时。
排查:
1# 查看 CSS 超时参数2crsctl get css misscount3# 默认 30 秒,检查 Private 网络延迟4ping -c 100 -i 0.01 rac-node2-priv解决:排查交换机、网卡、网线物理故障;确认 Private 网卡未配置默认网关;生产环境建议双 Private 网卡做 bonding。
现象:两个节点互相无法通信,其中一个节点被驱逐(eviction)。
排查:
1# 查看集群日志2adrci3adrci> show alert -p "message_text like '%evict%'"45# 检查 gipc 日志6tail -200 $GRID_HOME/log/rac-node1/gipc/gipcmon_*.log解决:检查 Private 网络配置和交换机;确保没有防火墙拦截 Interconnect 流量。
现象:srvctl status vip 显示 VIP 运行在非归属节点上。
排查:
1srvctl status vip -n rac-node12# 如显示 VIP running on node: rac-node2,说明发生了漂移解决:检查原节点的 Public 网络是否正常,修复后执行:
1srvctl relocate vip -n rac-node1 -currentnode rac-node2现象:asmca 或 oracleasm listdisks 看不到共享磁盘。
排查:
1# 检查磁盘设备2ls -l /dev/asmdisks/3# 检查磁盘头部信息4dd if=/dev/asmdisks/data1 bs=512 count=1 | hexdump -C | head56# 检查 ASM 磁盘发现路径7sqlplus / as sysasm8SQL> SHOW PARAMETER asm_diskstring;解决:确认 UDEV 规则正确、磁盘属主为 grid:asmadmin、asm_diskstring 参数包含设备路径。
现象:某节点被集群强制驱逐并重启,/var/log/messages 出现 reboot after panic。
排查:
1# 查看 OCSSD 日志2tail -500 $GRID_HOME/log/rac-node1/cssd/ocssd.log34# 查看操作系统日志5grep -i "panic\|reboot\|evict" /var/log/messages常见原因:Interconnect 中断、I/O 超时(存储故障)、系统负载过高导致心跳延迟。建议为 GI 进程设置 hugepage、配置 I/O 调度器为 deadline。
现象:数据库实例启动报 ORA-29702: error occurred in Cluster Group Service operation。
排查:
1crsctl check crs2crsctl check cluster -all解决:确保 CRS 服务在所有节点正常运行,必要时重启 CRS:
1crsctl stop crs2crsctl start crsOracle 19c RAC 集群安装虽然步骤繁多,但只要做好环境规划(网络、存储、OS 参数),严格按流程执行(尤其是 root.sh 的顺序),整个过程是完全可控的。RAC 安装最容易翻车的三个地方:共享磁盘权限、Private 网络配置、root.sh 执行顺序——把这三个环节做到位,成功率就有九成以上。
如果你觉得手动安装 RAC 步骤太多、容易出错,可以了解一下 ora100 一键安装脚本。ora100 已经支持 RAC 双节点的自动化部署,包括 OS 参数配置、GI 安装、ASM 磁盘组创建、RAC 数据库建库等全流程,只需一个配置文件就能完成从裸机到可用集群的所有步骤。
访问 ora100 项目主页了解 RAC 自动部署功能,让安装效率提升 10 倍。