当前位置: 首页 > news >正文

10-Oracle RAC完整实战

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=false

root 执行脚本:

# 节点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滚动升级。

http://www.jsqmd.com/news/1285826/

相关文章:

  • Arduino十年生态演进:从开源硬件到物联网与智能硬件的实战开发
  • 蓝桥杯C++ B组实战复盘:从算法竞赛到大厂Offer的进阶之路
  • LENA-R8与STM32F217ZG的物联网硬件协同设计
  • Scratch编程进阶:从数学原理到算法实现,掌握画圆与几何艺术创作
  • 路由重发布原理与配置实战:打通OSPF、EIGRP异构网络
  • 日化PLM厂商一半科技凭什么排第一?日化美妆赛道TOP1厂商的硬实力拆解
  • 2026 年新发布:赞皇可靠的卷材布料硅胶印花供货商格局重塑与选型新思路,用了它,大货损耗直接降到5%?这玩意儿到底藏着啥印花秘密 - 行业推荐官[官方】--
  • Spring Boot + Vue 企业产品展示网站搭建方案
  • C++入门必学:命名空间、IO流与缺省参数详解
  • 从Intel Edison LCD Cursor样例到嵌入式HMI:字符LCD光标控制原理与移植实战
  • ESP32-C6开发板初体验:从环境搭建到GPIO点灯实战
  • C++入门指南:从系统级编程到面向对象实践
  • Fortify SCA命令行扫描实战:从Linux到iOS的DevSecOps集成指南
  • STM32寄存器编程入门:从库函数到直接硬件操作
  • LTE Cat 1bis物联网模块LEXI-R10401D与PIC18开发指南
  • Input Leap完整指南:如何用开源KVM软件实现跨设备无缝控制
  • USB充电协议BC1.2详解:从识别原理到硬件实现与故障排查
  • STM32内部FLASH实现USB U盘:原理、实现与优化指南
  • 2026郑州漏水维修全攻略,卫生间/阳台/外墙/屋顶/地下室对症方案+靠谱商家推荐 - 苏易房屋修缮
  • 吴恩达Prompt Engineering教程:从基础到实战的提示词工程完整指南
  • TP4056锂电池充电模块DFR0208:从原理到实战的完整指南
  • RK3568 调试YT8531 YT6801驱动
  • 多链路聚合通信保障技术在轨检车的应用
  • Python基础之函数
  • Arduino环境光传感器选型指南:从光敏电阻到数字芯片的进阶之路
  • 一,自我介绍
  • Android Handler机制解析:线程通信与UI更新优化
  • C++输入流核心机制:解决cin读取带空格字符串的四种方法与实践指南
  • Python模块化编程:从import机制到项目实战的完整指南
  • 2026年靠谱园林杉木杆批发,选对渠道省心更省钱