news 2026/9/26 19:20:59

CentOS 7.9 部署 Oracle 19C RAC 集群实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CentOS 7.9 部署 Oracle 19C RAC 集群实战指南

简介:这份PDF文档面向需要在Linux平台搭建Oracle高可用集群的DBA与运维工程师,系统讲解Oracle Linux 7.9环境下Oracle 19C RAC集群的完整部署流程。内容涵盖系统规划、主机与网络规划、虚拟机创建、操作系统安装、防火墙与网络配置、limits.conf与sysctl.conf内核参数调优、用户与目录权限、YUM源与软件包安装、NTP时间同步、ISCSI服务器配置,以及Grid Infrastructure与数据库实例安装、OCR与Voting Disk配置、集群健康检查与日常维护等关键环节,并说明RAC通过ASM管理共享磁盘、由Linux存储管理软件提供共享存储的实现方式。资源包共1个PDF文件,约10.13MB,结构按章节组织,便于按步骤对照操作。目前已有600余人学习,适合希望掌握Oracle 19C RAC集群部署与排错思路的中高级读者参考。

1. 在 CentOS 7.9 上装 Oracle 19C RAC:为什么这份“文档”值得你花一个周末

如果你手上只有两台物理服务器、一个共享存储,或者更常见的——一台高配宿主机想用 VMware 虚拟出整套 RAC 环境,那么“在 Linux 7.9 环境下部署 Oracle 19C RAC 集群”这件事,大概率是你今年绕不过去的一道坎。CentOS 7.9 虽然已经进入维护末期,但大量存量生产环境、银行保险的测试区、以及各类教学实验平台仍然跑在这个版本上,Oracle 19C 又是目前长期支持版本里最稳的一个,两者组合出来的 RAC 集群,是很多 DBA 面试和真实割接场景里的硬指标。这份安装部署文档要解决的不是“Oracle 是什么”,而是把 Grid Infrastructure 和 Database 两套软件在双节点上真正跑起来,让 crsctl stat res -t 里所有资源都变成 ONLINE,让 VIP 能漂、ASM 能挂、实例能互相拉起。适合谁看?适合已经会装单实例、但第一次碰 RAC 的运维;适合被 OCR 磁盘组和网络规划卡住、反复重装的中级工程师;也适合想用虚拟机先跑通全流程再上生产的老手。下面我按自己踩过坑的顺序,把这份文档拆成能照着敲的步骤。

2. 装之前先把账算清:节点、网络、存储三张规划表

RAC 安装失败十有八九不是命令敲错,而是规划阶段就埋了雷。我见过太多人上来就挂 ISO 装系统,结果到 gridSetup.sh 那一步才发现网卡名对不上、SCAN IP 和 VIP 不在同一网段、ASM 磁盘权限是 root:root。所以这一章先把三张表定死,后面所有操作都围绕它们展开。

2.1 节点与操作系统基线:CentOS 7.9 最小化安装后必须补的包

两台节点我一般命名为 rac1 和 rac2,内存不低于 8G(虚拟机建议 12G 起,否则 GI 安装时内存检查会告警),系统盘 100G,另外每台挂两块网卡。CentOS 7.9 用最小化安装,装完先做基线配置。下面这段是所有节点都要执行的,我把它写成一个脚本,避免两台机器手抖敲出差异。

# 关闭防火墙和 SELinux,RAC 环境里这两个是头号玄学来源 systemctl stop firewalld && systemctl disable firewalld setenforce 0 sed -i 's/^SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config # 安装 GI 和 DB 依赖包,缺一个后面都会报 ins-13001 yum install -y bc binutils compat-libcap1 compat-libstdc++-33 \ elfutils-libelf-devel fontconfig-devel glibc-devel glibc-devel.i686 \ ksh libaio libaio-devel libX11 libXau libXi libXtst libXrender \ libXrender-devel libgcc libstdc++ libstdc++-devel make net-tools \ nfs-utils python python-configshell python-rtslib python-six \ smartmontools sysstat unzip xorg-x11-utils xorg-x11-xauth # 关闭透明大页和 NUMA 平衡,这两个不关,后面实例会莫名卡顿 echo never > /sys/kernel/mm/transparent_hugepage/enabled echo never > /sys/kernel/mm/transparent_hugepage/defrag

逻辑说明:防火墙和 SELinux 在 RAC 里会拦截 CSSD 心跳和 ASM 通信,必须关。依赖包列表是 Oracle 19C 官方要求的合集,compat-libstdc++-33 在 CentOS 7.9 的 base 源里可能没有,需要挂本地 ISO 或配置 vault 源。透明大页(THP)会导致 Oracle 出现“幽灵延迟”,NUMA 平衡在双节点虚拟化环境里容易让 GI 心跳超时,所以一并处理。参数上,如果你用的是 VMware,还要在虚拟机高级设置里加vmxnet3网卡并关闭内存气球驱动,否则网络抖动会让 CRS 频繁重启。

2.2 网络规划:public、private、VIP、SCAN 四类地址怎么分

RAC 的网络是新手最容易翻车的地方。我一般用两张网卡:ens33 做 public,ens34 做 private。地址规划如下表,你照着填自己的网段即可。

用途节点 rac1节点 rac2说明
public IP192.168.56.11192.168.56.12对外服务,和 VIP 同网段
private IP10.10.10.1110.10.10.12心跳专用,不要和 public 混用
VIP192.168.56.101192.168.56.102故障时漂移,必须未被占用
SCAN IP192.168.56.200同一地址单 SCAN 即可,多 SCAN 需 DNS
SCAN 端口15211521默认即可

配置 hosts 文件时,两台机器必须完全一致,包括顺序。我习惯把 public、private、VIP、SCAN 全部写进去,并在 rac1 上额外加一行192.168.56.11 rac1的本地解析。private 网卡建议用独立交换机或 VMware 的“仅主机”模式,不要走 NAT,否则心跳延迟会触发CRS-1614告警。另外,/etc/resolv.conf里如果配了不可达的 DNS,GI 安装时会卡在“检查 DNS”很久,建议先注释掉,装完再恢复。

2.3 共享存储:ASM 磁盘用 udev 绑定还是 ASMLib

Oracle 19C 在 CentOS 7.9 上我强烈建议用 udev 绑定,ASMLib 在 7.9 上已经不太维护,而且多一层依赖就多一个故障点。共享存储可以是 iSCSI、NFS 或者 VMware 的共享磁盘。以 VMware 为例,给两台虚拟机各加一块 20G 的共享磁盘,SCSI 控制器选“物理”模式,磁盘模式选“独立-持久”。然后在系统里用lsblk看到类似 sdb 的设备。

# 获取磁盘 WWID,两台机器必须一致 /usr/lib/udev/scsi_id -g -u -d /dev/sdb # 编辑 udev 规则,绑定为 asm-ocr 和 asm-data cat > /etc/udev/rules.d/99-oracle-asmdevices.rules <<EOF KERNEL=="sd*", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/\$name", RESULT=="36000c29a1b3c4d5e6f7a8b9c0d1e2f3a", SYMLINK+="asm-ocr", OWNER="grid", GROUP="asmadmin", MODE="0660" EOF # 重新加载并验证 udevadm control --reload-rules udevadm trigger --type=devices --action=change ls -l /dev/asm-ocr

逻辑说明:scsi_id取到的 WWID 是磁盘唯一标识,两台节点必须相同,否则 udev 规则不生效。RESULT里填你实际取到的值,SYMLINK是给 ASM 用的稳定路径。OWNER 和 GROUP 要等 grid 用户和 asmadmin 组创建后再改,这里先写占位。参数上,MODE 必须是 0660,否则 ASM 实例启动时会报权限不足。如果你用 NFS,则跳过 udev,直接在 GI 安装时选 NFS 路径,但 NFS 的mount选项要加rw,bg,hard,nointr,rsize=1048576,wsize=1048576,tcp,actimeo=0,否则 ASM 会认为磁盘不可靠。

3. 用户、内核参数与 GI 安装:从 gridSetup.sh 到 root.sh 跑完

规划做完,这一章进入真正的安装动作。RAC 安装分两大步:先装 Grid Infrastructure(GI),再装 Database 软件。GI 装完集群就起来了,数据库软件只是挂上去。很多人卡在 root.sh 报错,其实前面用户和内核参数配好,后面就顺了。

3.1 创建 grid 和 oracle 用户:组关系与资源限制

用户和组的创建顺序有讲究,grid 用户要属于 asmadmin、asmoper、asmdba 组,oracle 用户要属于 asmdba、dba、oper 组。两台节点都要执行,且 UID/GID 必须一致。

# 创建组,GID 自定义但两台必须相同 groupadd -g 54321 oinstall groupadd -g 54322 dba groupadd -g 54323 oper groupadd -g 54324 asmadmin groupadd -g 54325 asmoper groupadd -g 54326 asmdba # 创建 grid 用户 useradd -u 54321 -g oinstall -G asmadmin,asmdba,asmoper,dba grid # 创建 oracle 用户 useradd -u 54322 -g oinstall -G dba,asmdba,oper oracle # 设置密码,两台保持一致 echo "grid" | passwd --stdin grid echo "oracle" | passwd --stdin oracle

逻辑说明:oinstall 是 Oracle 清单组,dba 是数据库管理组,asmadmin 是 ASM 管理员组。grid 用户必须属于 asmadmin 才能管理 ASM 磁盘。UID/GID 两台一致是为了 NFS 和共享存储权限不混乱。密码用--stdin设置是为了脚本化,生产环境请用强密码。接下来配置资源限制,编辑/etc/security/limits.conf,追加以下内容,两台都要。

cat >> /etc/security/limits.conf <<EOF grid soft nofile 1024 grid hard nofile 65536 grid soft nproc 2047 grid hard nproc 16384 grid soft stack 10240 grid hard stack 32768 oracle soft nofile 1024 oracle hard nofile 65536 oracle soft nproc 2047 oracle hard nproc 16384 oracle soft stack 10240 oracle hard stack 32768 EOF

参数说明:nofile 是打开文件数,RAC 里 ASM 和 CSSD 会开大量文件句柄,65536 是底线。nproc 是进程数,16384 够用。stack 是栈大小,10240 起步。改完用ulimit -a验证,注意要重新登录才生效。另外/etc/pam.d/login里要加session required pam_limits.so,否则 limits.conf 不生效,这是 CentOS 7.9 的一个常见坑。

3.2 内核参数与 ASM 设备权限:sysctl 配置和 udev 收尾

内核参数直接决定 GI 能不能启动。编辑/etc/sysctl.conf,追加以下内容,两台执行后sysctl -p生效。

cat >> /etc/sysctl.conf <<EOF fs.aio-max-nr = 1048576 fs.file-max = 6815744 kernel.shmall = 2097152 kernel.shmmax = 4294967295 kernel.shmmni = 4096 kernel.sem = 250 32000 100 128 net.ipv4.ip_local_port_range = 9000 65500 net.core.rmem_default = 262144 net.core.rmem_max = 4194304 net.core.wmem_default = 262144 net.core.wmem_max = 1048576 EOF sysctl -p

逻辑说明:kernel.shmmax要大于物理内存的一半,4294967295 是 4G 减 1,适合 8G 内存的虚拟机。kernel.sem四个值分别是 SEMMSL、SEMMNS、SEMOPM、SEMMNI,RAC 里信号量不够会导致ORA-27300。fs.aio-max-nr是异步 IO 请求数,ASM 依赖它。改完内核参数后,回到 2.3 节的 udev 规则,把 OWNER 和 GROUP 改成 grid:asmadmin,然后重新触发 udev,确认/dev/asm-ocr的属主是 grid:asmadmin 且权限 0660。

3.3 解压 GI 并运行 gridSetup.sh:响应文件与 root.sh 执行顺序

把 LINUX.X64_193000_grid_home.zip 上传到 rac1 的/u01/app/19.3.0/grid,解压后以 grid 用户运行gridSetup.sh。我一般用静默模式,因为图形界面在虚拟机里容易卡。先生成响应文件,再执行安装。

# 以 grid 用户解压 mkdir -p /u01/app/19.3.0/grid chown -R grid:oinstall /u01/app cd /u01/app/19.3.0/grid unzip -q LINUX.X64_193000_grid_home.zip # 生成响应文件模板 ./gridSetup.sh -record -destinationFile /tmp/grid_install.rsp

然后编辑/tmp/grid_install.rsp,关键参数如下表。

参数值说明
oracle.install.optionCRS_CONFIG安装集群
ORACLE_BASE/u01/app/gridgrid 的 base
oracle.install.asm.OSDBAasmdbaASM 管理组
oracle.install.asm.OSASMasmadminASM 管理员组
oracle.install.asm.diskGroup.nameOCR第一个磁盘组
oracle.install.asm.diskGroup.disks/dev/asm-ocrudev 路径
oracle.install.asm.diskGroup.redundancyEXTERNAL虚拟机环境用外部冗余
oracle.install.crs.config.clusterNodesrac1:rac1-vip:HUB,rac2:rac2-vip:HUB节点和 VIP
oracle.install.crs.config.networkInterfaceListens33:192.168.56.0:1,ens34:10.10.10.0:5public 和 private
oracle.install.crs.config.scanTypeLOCAL_SCAN单 SCAN
oracle.install.crs.config.SCANAddresses192.168.56.200SCAN IP

执行静默安装:

./gridSetup.sh -silent -responseFile /tmp/grid_install.rsp -waitforcompletion

逻辑说明:-waitforcompletion让安装进程前台等待,方便看日志。安装到 80% 左右会提示在两个节点分别以 root 执行/u01/app/19.3.0/grid/root.sh。注意顺序:先在 rac1 执行,等它跑完再在 rac2 执行,不要同时跑。root.sh 会配置 CSSD、启动 OHASD、注册 ASM。如果卡在CRS-2674或CRS-2800,多半是 private 网卡不通或 udev 权限不对。跑完后用crsctl stat res -t检查,所有资源应该是 ONLINE。

4. 数据库软件安装与建库:dbca 静默建 RAC 实例

GI 跑起来后,数据库软件安装就简单很多。这一章把 db 软件装到/u01/app/oracle/product/19.3.0/dbhome_1,然后用 dbca 建一个 RAC 数据库。我习惯用静默方式,因为响应文件可以复用。

4.1 安装 Database 软件:响应文件里的三个易错项

以 oracle 用户解压 LINUX.X64_193000_db_home.zip 到 dbhome_1,然后运行runInstaller。

mkdir -p /u01/app/oracle/product/19.3.0/dbhome_1 chown -R oracle:oinstall /u01/app/oracle cd /u01/app/oracle/product/19.3.0/dbhome_1 unzip -q LINUX.X64_193000_db_home.zip # 生成响应文件 ./runInstaller -record -destinationFile /tmp/db_install.rsp

编辑响应文件,三个易错项:oracle.install.option要选INSTALL_DB_SWONLY,oracle.install.db.InstallEdition选EE,oracle.install.db.CLUSTER_NODES填rac1,rac2。另外oracle.install.db.isRACOneInstall选 false。执行:

./runInstaller -silent -responseFile /tmp/db_install.rsp -waitforcompletion

装完同样在两个节点执行root.sh,这次是/u01/app/oracle/product/19.3.0/dbhome_1/root.sh。顺序还是先 rac1 后 rac2。跑完后用sqlplus / as sysdba能进空闲实例就说明软件层 OK。

4.2 dbca 静默建库:字符集、内存与 ASM 数据盘

建库前先在 ASM 里创建一个 DATA 磁盘组,用 asmca 或者直接 sqlplus 连 ASM 实例。我一般用 asmca 静默:

asmca -silent -createDiskGroup -diskGroupName DATA \ -diskList /dev/asm-data -redundancy EXTERNAL -au_size 4

然后生成 dbca 响应文件:

dbca -silent -createDatabase -templateName General_Purpose.dbc \ -gdbName racdb -sid racdb -responseFile /tmp/dbca.rsp

响应文件里关键参数:characterSet选AL32UTF8,totalMemory给 4096(虚拟机 12G 内存的话),storageType选ASM,diskGroupName填DATA,recoveryGroupName可以填DATA或单独建 FRA。建库过程会跑 20 分钟左右,期间可以用tail -f看/u01/app/oracle/cfgtoollogs/dbca/racdb/racdb.log。建完后srvctl status database -d racdb应该显示两个实例都 running。

5. 避坑与排查:RAC 安装里最耗时的五个“玄学”问题

这一章是我自己重装过十几次后总结的,每条都按“现象 → 原因 → 解决”写。你如果卡住了,先来这里对号入座。

5.1 root.sh 在 rac2 上报 CRS-2674

现象:rac1 的 root.sh 跑完正常,rac2 跑到一半报CRS-2674: Start of 'ora.cssd' on 'rac2' failed。原因:private 网卡不通,或者 rac2 的 hosts 文件里 rac1 的 private IP 解析不对。解决:先在 rac2 上ping 10.10.10.11,如果不通检查 VMware 的“仅主机”网卡是否连到同一虚拟交换机。如果通,检查/etc/hosts顺序,确保 private IP 在 public IP 之后但 SCAN 之前。还不行就crsctl stop crs -f然后重新跑 root.sh。

5.2 ASM 磁盘组挂载失败,报 ORA-15018

现象:GI 装完,asmcmd lsdg看不到 OCR 磁盘组,或者crsctl stat res -t里 ora.asm 是 INTERMEDIATE。原因:udev 规则没生效,或者磁盘权限是 root:root。解决:ls -l /dev/asm-ocr确认属主是 grid:asmadmin,权限 0660。如果不是,检查 udev 规则里的 WWID 是否两台一致,udevadm trigger后重新插拔磁盘。另外,如果用了多路径,要确保/etc/multipath.conf里 blacklist 了本地磁盘,否则 ASM 会看到重复设备。

5.3 dbca 建库卡在 45%,日志报 ORA-15041

现象:dbca 跑到 45% 不动,日志里ORA-15041: diskgroup space exhausted。原因:DATA 磁盘组太小,或者 AU 大小设成了 1M 但磁盘只有 20G。解决:虚拟机环境给 DATA 至少 40G,AU 用 4M。如果已经建了磁盘组,用asmcmd加盘或者重建。重建前先srvctl stop database -d racdb,然后asmca -silent -deleteDiskGroup -diskGroupName DATA,再加盘重建。

5.4 VIP 无法漂移,故障转移不生效

现象:手动crsctl stop res ora.rac1.vip后,VIP 没有漂到 rac2,应用连接超时。原因:VIP 和 public IP 不在同一网段,或者 SCAN 监听没配。解决:srvctl config vip -n rac1检查 VIP 地址,必须和 public 同网段。另外srvctl status scan_listener要确保 SCAN 监听在跑。如果用的是 LOCAL_SCAN,SCAN VIP 也要能漂。最后用srvctl relocate vip -n rac1测试漂移。

5.5 实例间心跳延迟高,CRS 频繁重启

现象:crsctl stat res -t里 ora.cssd 偶尔变成 OFFLINE,日志报CRS-1614: heartbeat delay。原因:private 网卡走了 NAT 或者被其他流量占用。解决:private 网卡必须独立,不要配网关,不要跑 NFS 或备份流量。如果是 VMware,把 private 网卡绑到独立虚拟交换机,并关闭“内存气球”和“TSO”。另外,net.core.rmem_max和wmem_max按 3.2 节调大。

6. 装完之后怎么验证:三个能让你睡好觉的检查动作

装完 RAC 只是开始,真正要确认它“能扛事”,得做几个破坏性验证。我一般按下面三步走,每步都有明确的通过标准。

第一步,资源状态全绿。crsctl stat res -t输出里,ora.asm、ora.cssd、ora.diskmon、ora.rac1.vip、ora.rac2.vip、ora.scan1.vip、ora.racdb.db 全部是 ONLINE,且 ora.racdb.db 的两个实例分别在不同节点。如果有一个是 INTERMEDIATE,等 30 秒再看,还不变就查对应日志。

第二步,故障转移实测。在 rac1 上crsctl stop res ora.rac1.vip -n rac1,然后立刻在 rac2 上crsctl stat res ora.rac1.vip -t,应该看到它漂到 rac2 并变成 ONLINE。再srvctl relocate database -d racdb -n rac2,把数据库实例从 rac1 挪到 rac2,用srvctl status database -d racdb确认。这一步能过,说明 VIP 和实例的漂移逻辑都正常。

第三步,ASM 和数据库连通性。用asmcmd lsdg看 DATA 和 OCR 的state是 MOUNTED,type是 EXTERN。然后sqlplus sys/password@racdb1 as sysdba和racdb2都能连,执行select instance_name, host_name from v$instance;应该分别返回 racdb1/rac1 和 racdb2/rac2。最后建个测试表create table t1(id number);在两个实例都能查到,说明缓存融合正常。

我自己的习惯是,每次装完 RAC,先不急着上业务,而是用 Swingbench 或者简单的oracle脚本跑 10 分钟并发,观察crsctl stat res -t有没有抖动。如果 10 分钟内资源状态稳定,VIP 不漂,ASM 不告警,这套环境才算真正可用。血泪经验是:虚拟机环境里,内存给够、private 网卡独立、udev 权限对,这三条做到了,RAC 安装就没什么玄学。希望帮到你。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/26 19:20:36

Mac自定义快捷键三层体系:系统层、应用层与脚本层实战指南

1. 为什么系统自带的快捷键设置根本不够用Mac 的键盘快捷键体系&#xff0c;表面看是苹果“开箱即用”的优雅代表——Mission Control、Spotlight、截图、音量调节&#xff0c;一按即达。但真正用上三个月后&#xff0c;几乎每个认真工作的人都会发现&#xff1a;系统设置里那几…

作者头像 李华
网站建设 2026/9/26 19:19:13

中科热备:鸿蒙升级邀测背后信创容灾备份底层适配技术剖析

中科热备&#xff1a;鸿蒙升级邀测背后信创容灾备份底层适配技术剖析 做DBA和运维的兄弟&#xff0c;最近大概率被同一个问题刷屏了&#xff1a;微信鸿蒙版8.0.22.33开始邀测升级。表面看是一次普通App迭代&#xff0c;往深了看&#xff0c;这是信创生态从「能用」往「好用」推…

作者头像 李华
网站建设 2026/9/26 19:18:58

BrowserSkill:基于WebSocket的会话级AI浏览器控制协议

1. 项目概述&#xff1a;这不是一个浏览器插件&#xff0c;而是一套“会话级”AI代理接入协议 你有没有遇到过这种场景&#xff1a;写了一个功能很完整的AI Agent&#xff0c;能规划、能调用工具、能反思&#xff0c;但一到需要操作真实网页——比如自动填写报销单、抓取竞品价…

作者头像 李华
网站建设 2026/9/26 19:17:16

AI自动化流程搭建实战:从需求拆解到落地优化

1. 先想清楚&#xff1a;你说的“AI自动化流程”到底指什么很多人一上来就问“怎么建AI自动化流程”&#xff0c;但这个问题本身太宽了。我做了几年AI应用落地&#xff0c;发现一个规律&#xff1a;问得越模糊&#xff0c;最后做出来的东西越没用。所以在动手之前&#xff0c;你…

作者头像 李华