10-Oracle RAC完整实战
📅 2026/7/29 7:40:04
👁️ 阅读次数
📝 编程学习
Oracle RAC 完整实战——从两台裸机到双节点集群
社保系统单机扛不住了——全省几百万参保人的查询都打在一台 Oracle 上。上 RAC。两节点,共享存储,一台挂了另一台自动接管。这篇文章从规划、互信、安装到启动停机全流程,每一步踩过的坑都记下来了。
文章目录
- Oracle RAC 完整实战——从两台裸机到双节点集群
- 一、RAC 是什么——一句话
- 二、硬件规划(双节点)
- 三、环境准备(两节点同步执行)
- 四、配置 SSH 互信
- 五、配置共享存储(ASM)
- 六、安装 Grid Infrastructure(grid 用户执行)
- 七、创建 ASM 数据磁盘组
- 八、安装 Oracle Database 软件(oracle 用户执行)
- 九、DBCA 静默建 RAC 库
- 十、启动和停机
- 十一、常见坑
一、RAC 是什么——一句话
两台物理服务器装同一个数据库软件,共享同一份数据文件,对外看是一个数据库。一台挂了,另一台继续跑——对应用来说,数据库 IP 没变,连接自动漂移。
关键组件:
| 组件 | 作用 |
|---|---|
| Gird Infrastructure (GI) | 集群软件,管理节点间心跳、共享存储、虚拟IP |
| ASM | 自动存储管理,替代文件系统管理数据磁盘 |
| SCAN | 单一客户端访问名,DNS/GNS 解析到任一节点 |
| VIP | 每节点一个虚拟IP,节点故障时漂移到另一节点 |
二、硬件规划(双节点)
节点1: rac1.sb.gov.cn public IP: 192.168.70.11 private IP: 10.10.10.11 (心跳) VIP: 192.168.70.21 OS: Oracle Linux 8 RAM: 128GB CPU: 32核 节点2: rac2.sb.gov.cn public IP: 192.168.70.12 private IP: 10.10.10.12 (心跳) VIP: 192.168.70.22 OS: Oracle Linux 8 RAM: 128GB CPU: 32核 SCAN IP: 192.168.70.30 (DNS或本地/etc/hosts) 共享存储(SAN/Fiber Channel): /dev/mapper/asm_data01 500GB 数据盘 /dev/mapper/asm_data02 500GB /dev/mapper/asm_ocr01 10GB OCR/Voting磁盘 /dev/mapper/asm_ocr02 10GB /dev/mapper/asm_ocr03 10GB/etc/hosts在两节点上配置:
# Public 192.168.70.11 rac1.sb.gov.cn rac1 192.168.70.12 rac2.sb.gov.cn rac2 # VIP 192.168.70.21 rac1-vip.sb.gov.cn rac1-vip 192.168.70.22 rac2-vip.sb.gov.cn rac2-vip # Private(心跳) 10.10.10.11 rac1-priv.sb.gov.cn rac1-priv 10.10.10.12 rac2-priv.sb.gov.cn rac2-priv # SCAN(两个IP指向同一个域名) 192.168.70.30 rac-scan.sb.gov.cn rac-scan三、环境准备(两节点同步执行)
# 关闭防火墙和SELinuxsystemctl stop firewalld&&systemctl disable firewalldsed-i's/SELINUX=enforcing/SELINUX=disabled/'/etc/selinux/config setenforce0# 安装依赖(Oracle Linux 8 的 preinstall rpm 一键搞定)yuminstall-yoracle-database-preinstall-19c# 关闭透明大页(RAC要求)echonever>/sys/kernel/mm/transparent_hugepage/enabledecho"echo never > /sys/kernel/mm/transparent_hugepage/enabled">>/etc/rc.local# 停掉avahi(mDNS会和SCAN冲突)systemctl stop avahi-daemon&&systemctl disable avahi-daemon# 创建用户和目录groupadd-g54321oinstallgroupadd-g54322dbagroupadd-g54323opergroupadd-g54324asmadmingroupadd-g54325asmdbauseradd-u54321-goinstall-Gdba,oper,asmadmin,asmdba griduseradd-u54322-goinstall-Gdba,oper,asmdba oraclemkdir-p/u01/app/gridmkdir-p/u01/app/19.0.0/gridmkdir-p/u01/app/oracle/product/19.0.0/dbhome_1chown-Rgrid:oinstall /u01chown-Roracle:oinstall /u01/app/oraclechmod-R775/u01配置内核参数/etc/sysctl.conf:
fs.file-max = 6815744 kernel.sem = 250 32000 100 128 kernel.shmmni = 4096 kernel.shmall = 1073741824 kernel.shmmax = 4398046511104 net.core.rmem_default = 262144 net.core.rmem_max = 4194304 net.core.wmem_default = 262144 net.core.wmem_max = 1048576 fs.aio-max-nr = 1048576 net.ipv4.ip_local_port_range = 9000 65500四、配置 SSH 互信
# 在两节点上都以grid用户执行su- gridmkdir-p~/.sshchmod700~/.ssh# 节点1生成密钥ssh-keygen-trsa-N''-f~/.ssh/id_rsa# 节点2生成密钥ssh-keygen-trsa-N''-f~/.ssh/id_rsa# 合并公钥(在节点1上执行即可)cat~/.ssh/id_rsa.pub>>~/.ssh/authorized_keyssshrac2cat~/.ssh/id_rsa.pub>>~/.ssh/authorized_keysscp~/.ssh/authorized_keys rac2:~/.ssh/authorized_keys# 配置known_hosts防止首次连接确认ssh-keyscan rac1 rac2 rac1-priv rac2-priv>>~/.ssh/known_hostsscp~/.ssh/known_hosts rac2:~/.ssh/known_hosts# 验证互信sshrac1date&&sshrac2datesshrac1-privdate&&sshrac2-privdate# oracle用户同样需要互信(以oracle身份重复上面步骤)五、配置共享存储(ASM)
# 两节点执行——配置UDEV规则固定磁盘权限和所有者# 查磁盘的WWID/usr/lib/udev/scsi_id-g-u-d/dev/sdb# 创建 /etc/udev/rules.d/99-oracle-asm.rulescat>/etc/udev/rules.d/99-oracle-asm.rules<<'EOF' KERNEL=="sd*", SUBSYSTEM=="block", PROGRAM="/usr/lib/udev/scsi_id -g -u -d /dev/$parent", RESULT=="36000c29a1234567890abcdef12345678", SYMLINK+="asm/ocr01", OWNER="grid", GROUP="asmadmin", MODE="0660" KERNEL=="sd*", SUBSYSTEM=="block", PROGRAM="/usr/lib/udev/scsi_id -g -u -d /dev/$parent", RESULT=="36000c29a1234567890abcdef12345679", SYMLINK+="asm/ocr02", OWNER="grid", GROUP="asmadmin", MODE="0660" KERNEL=="sd*", SUBSYSTEM=="block", PROGRAM="/usr/lib/udev/scsi_id -g -u -d /dev/$parent", RESULT=="36000c29a1234567890abcdef1234567A", SYMLINK+="asm/ocr03", OWNER="grid", GROUP="asmadmin", MODE="0660" KERNEL=="sd*", SUBSYSTEM=="block", PROGRAM="/usr/lib/udev/scsi_id -g -u -d /dev/$parent", RESULT=="36000c29a1234567890abcdef1234567B", SYMLINK+="asm/data01", OWNER="grid", GROUP="asmadmin", MODE="0660" KERNEL=="sd*", SUBSYSTEM=="block", PROGRAM="/usr/lib/udev/scsi_id -g -u -d /dev/$parent", RESULT=="36000c29a1234567890abcdef1234567C", SYMLINK+="asm/data02", OWNER="grid", GROUP="asmadmin", MODE="0660" EOF# 重载规则udevadm control --reload-rules&&udevadm trigger# 验证ls-la/dev/asm/*# 输出: crw-rw---- 1 grid asmadmin ... ocr01 ...六、安装 Grid Infrastructure(grid 用户执行)
# 解压安装包unzipLINUX.X64_193000_grid_home.zip-d/u01/app/19.0.0/gridchown-Rgrid:oinstall /u01/app/19.0.0/grid# 在节点1执行(仅节点1,GI安装程序会自动推送到节点2)su- gridcd/u01/app/19.0.0/grid ./gridSetup.sh-silent-responseFile/tmp/grid.rsp\-waitForCompletion-ignorePrereq响应文件/tmp/grid.rsp核心内容:
oracle.install.responseFileVersion=/oracle/install/rspfmt_crsinstall_response_schema_v19.0.0 INVENTORY_LOCATION=/u01/app/oraInventory oracle.install.option=CRS_CONFIG ORACLE_BASE=/u01/app/grid ORACLE_HOME=/u01/app/19.0.0/grid # 集群配置 oracle.install.crs.config.gpnp.configureGNS=false oracle.install.crs.config.autoConfigureClusterNodeVIP=false oracle.install.crs.config.clusterNodes=rac1.sb.gov.cn:rac1-vip.sb.gov.cn,rac2.sb.gov.cn:rac2-vip.sb.gov.cn oracle.install.crs.config.networkInterfaceList=eth0:192.168.70.0:1,eth1:10.10.10.0:5 # eth0=public(subnet type 1), eth1=private(subnet type 5) # OCR和Voting磁盘(至少3块,奇数为宜) oracle.install.asm.OSDBA=asmdba oracle.install.asm.OSOPER=asmadmin oracle.install.asm.OSASM=asmadmin oracle.install.asm.diskGroup.name=OCR oracle.install.asm.diskGroup.disks=/dev/asm/ocr01,/dev/asm/ocr02,/dev/asm/ocr03 oracle.install.asm.diskGroup.redundancy=NORMAL安装完成后以 root 在两节点各执行两个脚本:
# 节点1/u01/app/oraInventory/orainstRoot.sh /u01/app/19.0.0/grid/root.sh# 节点2/u01/app/oraInventory/orainstRoot.sh /u01/app/19.0.0/grid/root.sh验证 GI 状态:
crsctl check crs# CRS-4640: Oracle High Availability Services is onlinecrsctlstatres-t# 查看所有资源状态七、创建 ASM 数据磁盘组
# 以 grid 用户执行asmca-silent-createDiskGroup\-diskGroupNameDATA\-diskList'/dev/asm/data01','/dev/asm/data02'\-redundancyEXTERNAL# 存储层已有RAID,这里选EXTERNAL验证:
export ORACLE_SID=+ASM1 sqlplus/assysasmSELECTNAME,STATE,TOTAL_MB,FREE_MBFROMV$ASM_DISKGROUP;八、安装 Oracle Database 软件(oracle 用户执行)
unzipLINUX.X64_193000_db_home.zip-d/u01/app/oracle/product/19.0.0/dbhome_1# 只在节点1执行cd/u01/app/oracle/product/19.0.0/dbhome_1 ./runInstaller-silent-responseFile/tmp/db.rsp-ignorePrereq响应文件/tmp/db.rsp:
oracle.install.option=INSTALL_DB_SWONLY UNIX_GROUP_NAME=oinstall INVENTORY_LOCATION=/u01/app/oraInventory ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1 ORACLE_BASE=/u01/app/oracle oracle.install.db.InstallEdition=EE oracle.install.db.OSDBA_GROUP=dba oracle.install.db.OSOPER_GROUP=oper oracle.install.db.rootconfig.executeRootScript=falseroot 执行脚本:
# 节点1和2各执行/u01/app/oracle/product/19.0.0/dbhome_1/root.sh九、DBCA 静默建 RAC 库
# oracle 用户在节点1执行dbca-silent-createDatabase-responseFile/tmp/dbca_rac.rsp响应文件核心内容:
responseFileVersion=/oracle/assistants/rspfmt_dbca_response_schema_v19.0.0 gdbName=orcl sid=orcl databaseConfigType=RAC RACOneNodeServiceName= policyManaged=false createServerPool=false createAsContainerDatabase=false numberOfPDBs=0 nodelist=rac1,rac2 templateName=General_Purpose.dbc sysPassword=你的密码 systemPassword=你的密码 storageType=ASM diskGroupName=DATA recoveryGroupName=DATA characterSet=AL32UTF8 nationalCharacterSet=AL16UTF16 memoryPercentage=30 databaseType=MULTIPURPOSE automaticMemoryManagement=false totalMemory=40960十、启动和停机
启动(按顺序):
# 1. 两节点启动 GI(OS 启动后自动做,手动用这个)crsctl start crs# 2. 确认所有资源 ONLINEcrsctlstatres-t# 3. 启动数据库(在任一节点)srvctl start database-dorcl停机(按顺序):
# 1. 停数据库srvctl stop database-dorcl# 2. 停所有节点服务# 可选:单节点srvctl stop nodeapps-nrac1# 3. 停集群(两节点各执行)crsctl stop crs查看状态:
# 集群资源一览crsctlstatres-t# 数据库状态srvctl status database-dorcl# 实例状态srvctl status instance-dorcl-iorcl1,orcl2# RAC连接:应用连SCAN,自动路由到任一节点sqlplus user/pass@rac-scan:1521/orcl十一、常见坑
| 问题 | 原因 | 解决 |
|---|---|---|
root.sh执行卡住 | 心跳网络不通 | ping rac2-priv,检查eth1配置 |
| ASM 磁盘不可见 | UDEV 规则没生效 | udevadm trigger; ls -la /dev/asm/ |
| DNS/SCAN 解析失败 | /etc/hosts条目不全 | 两节点检查 hosts 文件一致性 |
安装程序提示PRVG-1901 | 网络检查略不过 | -ignorePrereq跳过 |
| 节点2 安装失败的 | SSH 互信没配完 | ssh rac2 date确认无密码 |
| NTP 时间不同步 | 死锁检测依赖时间一致性 | 配chronyd并开-x选项给 Oracle |
✅ 亮点:RAC从零开始——规划到互信到ASM到静默安装到启动停机——全命令行可复现。扩展方向:RAC One Node(单实例自动漂移,比双节点RAC省license费)、RAC+DataGuard灾备组合、19c RAC滚动升级。
编程学习
技术分享
实战经验