10-Oracle RAC完整实战

📅 2026/7/29 7:16:50
10-Oracle RAC完整实战
Oracle RAC 完整实战——从两台裸机到双节点集群社保系统单机扛不住了——全省几百万参保人的查询都打在一台 Oracle 上。上 RAC。两节点共享存储一台挂了另一台自动接管。这篇文章从规划、互信、安装到启动停机全流程每一步踩过的坑都记下来了。文章目录Oracle RAC 完整实战——从两台裸机到双节点集群一、RAC 是什么——一句话二、硬件规划双节点三、环境准备两节点同步执行四、配置 SSH 互信五、配置共享存储ASM六、安装 Grid Infrastructuregrid 用户执行七、创建 ASM 数据磁盘组八、安装 Oracle Database 软件oracle 用户执行九、DBCA 静默建 RAC 库十、启动和停机十一、常见坑一、RAC 是什么——一句话两台物理服务器装同一个数据库软件共享同一份数据文件对外看是一个数据库。一台挂了另一台继续跑——对应用来说数据库 IP 没变连接自动漂移。关键组件组件作用Gird Infrastructure (GI)集群软件管理节点间心跳、共享存储、虚拟IPASM自动存储管理替代文件系统管理数据磁盘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 firewalldsystemctl disable firewalldsed-is/SELINUXenforcing/SELINUXdisabled//etc/selinux/config setenforce0# 安装依赖Oracle Linux 8 的 preinstall rpm 一键搞定yuminstall-yoracle-database-preinstall-19c# 关闭透明大页RAC要求echonever/sys/kernel/mm/transparent_hugepage/enabledechoecho never /sys/kernel/mm/transparent_hugepage/enabled/etc/rc.local# 停掉avahimDNS会和SCAN冲突systemctl stop avahi-daemonsystemctl 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.conffs.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# 验证互信sshrac1datesshrac2datesshrac1-privdatesshrac2-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.rulesEOF KERNELsd*, SUBSYSTEMblock, PROGRAM/usr/lib/udev/scsi_id -g -u -d /dev/$parent, RESULT36000c29a1234567890abcdef12345678, SYMLINKasm/ocr01, OWNERgrid, GROUPasmadmin, MODE0660 KERNELsd*, SUBSYSTEMblock, PROGRAM/usr/lib/udev/scsi_id -g -u -d /dev/$parent, RESULT36000c29a1234567890abcdef12345679, SYMLINKasm/ocr02, OWNERgrid, GROUPasmadmin, MODE0660 KERNELsd*, SUBSYSTEMblock, PROGRAM/usr/lib/udev/scsi_id -g -u -d /dev/$parent, RESULT36000c29a1234567890abcdef1234567A, SYMLINKasm/ocr03, OWNERgrid, GROUPasmadmin, MODE0660 KERNELsd*, SUBSYSTEMblock, PROGRAM/usr/lib/udev/scsi_id -g -u -d /dev/$parent, RESULT36000c29a1234567890abcdef1234567B, SYMLINKasm/data01, OWNERgrid, GROUPasmadmin, MODE0660 KERNELsd*, SUBSYSTEMblock, PROGRAM/usr/lib/udev/scsi_id -g -u -d /dev/$parent, RESULT36000c29a1234567890abcdef1234567C, SYMLINKasm/data02, OWNERgrid, GROUPasmadmin, MODE0660 EOF# 重载规则udevadm control --reload-rulesudevadm trigger# 验证ls-la/dev/asm/*# 输出: crw-rw---- 1 grid asmadmin ... ocr01 ...六、安装 Grid Infrastructuregrid 用户执行# 解压安装包unzipLINUX.X64_193000_grid_home.zip-d/u01/app/19.0.0/gridchown-Rgrid:oinstall /u01/app/19.0.0/grid# 在节点1执行仅节点1GI安装程序会自动推送到节点2su- 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.optionCRS_CONFIG ORACLE_BASE/u01/app/grid ORACLE_HOME/u01/app/19.0.0/grid # 集群配置 oracle.install.crs.config.gpnp.configureGNSfalse oracle.install.crs.config.autoConfigureClusterNodeVIPfalse oracle.install.crs.config.clusterNodesrac1.sb.gov.cn:rac1-vip.sb.gov.cn,rac2.sb.gov.cn:rac2-vip.sb.gov.cn oracle.install.crs.config.networkInterfaceListeth0:192.168.70.0:1,eth1:10.10.10.0:5 # eth0public(subnet type 1), eth1private(subnet type 5) # OCR和Voting磁盘至少3块奇数为宜 oracle.install.asm.OSDBAasmdba oracle.install.asm.OSOPERasmadmin oracle.install.asm.OSASMasmadmin oracle.install.asm.diskGroup.nameOCR oracle.install.asm.diskGroup.disks/dev/asm/ocr01,/dev/asm/ocr02,/dev/asm/ocr03 oracle.install.asm.diskGroup.redundancyNORMAL安装完成后以 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_SIDASM1 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.rsporacle.install.optionINSTALL_DB_SWONLY UNIX_GROUP_NAMEoinstall INVENTORY_LOCATION/u01/app/oraInventory ORACLE_HOME/u01/app/oracle/product/19.0.0/dbhome_1 ORACLE_BASE/u01/app/oracle oracle.install.db.InstallEditionEE oracle.install.db.OSDBA_GROUPdba oracle.install.db.OSOPER_GROUPoper oracle.install.db.rootconfig.executeRootScriptfalseroot 执行脚本# 节点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 gdbNameorcl sidorcl databaseConfigTypeRAC RACOneNodeServiceName policyManagedfalse createServerPoolfalse createAsContainerDatabasefalse numberOfPDBs0 nodelistrac1,rac2 templateNameGeneral_Purpose.dbc sysPassword你的密码 systemPassword你的密码 storageTypeASM diskGroupNameDATA recoveryGroupNameDATA characterSetAL32UTF8 nationalCharacterSetAL16UTF16 memoryPercentage30 databaseTypeMULTIPURPOSE automaticMemoryManagementfalse totalMemory40960十、启动和停机启动按顺序# 1. 两节点启动 GIOS 启动后自动做手动用这个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/passrac-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费、RACDataGuard灾备组合、19c RAC滚动升级。