1. 项目概述
Oracle RAC(Real Application Clusters)是Oracle数据库企业级高可用解决方案的核心组件,它允许在多台服务器上运行的Oracle实例同时访问同一个数据库。在本地环境部署双节点RAC集群,是DBA掌握企业级数据库架构的必修课。不同于单机部署,RAC集群需要处理节点间通信、共享存储、网络配置等复杂问题,这也是许多初学者容易踩坑的地方。
我在金融行业数据中心工作期间,曾主导过多次Oracle RAC集群的部署和运维。本文将基于Oracle 19c版本,详细演示如何在本地测试环境(VMware虚拟机)完成双节点RAC集群的完整部署。这个方案特别适合以下场景:
- 开发测试环境搭建
- 数据库高可用方案验证
- Oracle DBA技能实训
- 应用系统容灾演练
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备
2.1 硬件资源配置建议
对于本地测试环境,建议采用VMware Workstation Pro或VirtualBox创建虚拟机。以下是经过实际验证的配置方案:
| 资源类型 | 节点1配置 | 节点2配置 | 备注 |
|---|---|---|---|
| vCPU | 4核心 | 4核心 | 必须开启VT-x/AMD-v支持 |
| 内存 | 8GB | 8GB | 最低不少于6GB |
| 系统磁盘 | 50GB | 50GB | 用于安装操作系统 |
| 共享存储 | 20GB | 20GB | 需配置为共享磁盘 |
| 网络适配器 | 2块 | 2块 | 1块公网+1块私网 |
特别注意:虚拟机软件必须启用CPU的虚拟化支持(Intel VT-x/AMD-V),否则Oracle集群服务无法正常启动。
2.2 软件版本选择
经过多个项目的验证,推荐以下软件组合:
- 操作系统:Oracle Linux 7.9(与RHEL完全兼容)
- 数据库:Oracle 19.3.0 Grid Infrastructure + Database
- 集群管理:Oracle Clusterware 19c
- 存储方案:ASM(Automatic Storage Management)
选择这个组合的原因是:
- Oracle Linux针对数据库做了专门优化
- 19c是当前长期支持版本(支持到2027年)
- ASM简化了共享存储管理
2.3 网络规划
RAC集群对网络有严格要求,需要规划两个独立网络:
-
公共网络:
- 用途:客户端连接、管理访问
- 建议网段:192.168.1.0/24
- 节点1 IP:192.168.1.101
- 节点2 IP:192.168.1.102
- VIP:192.168.1.103/104
-
私有网络(心跳网络):
- 用途:节点间通信、缓存融合
- 建议网段:172.16.1.0/24
- 节点1 IP:172.16.1.1
- 节点2 IP:172.16.1.2
- 必须使用万兆网卡(虚拟环境下需配置相应参数)
3. 系统配置
3.1 操作系统安装与基础配置
在两台节点上执行以下操作:
- 安装Oracle Linux 7.9最小化安装
- 配置主机名:
bash复制# 节点1 hostnamectl set-hostname rac1 # 节点2 hostnamectl set-hostname rac2 - 配置/etc/hosts文件(两个节点保持一致):
code复制192.168.1.101 rac1 192.168.1.102 rac2 172.16.1.1 rac1-priv 172.16.1.2 rac2-priv 192.168.1.103 rac1-vip 192.168.1.104 rac2-vip
3.2 内核参数优化
编辑/etc/sysctl.conf,添加以下参数:
conf复制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
执行sysctl -p使配置生效。
3.3 用户与目录准备
创建Oracle用户和组:
bash复制groupadd -g 54321 oinstall
groupadd -g 54322 dba
groupadd -g 54323 oper
groupadd -g 54324 backupdba
groupadd -g 54325 dgdba
groupadd -g 54326 kmdba
useradd -u 54321 -g oinstall -G dba,oper,backupdba,dgdba,kmdba oracle
创建安装目录并设置权限:
bash复制mkdir -p /u01/app/19.0.0/grid
mkdir -p /u01/app/oracle/product/19.0.0/dbhome_1
chown -R oracle:oinstall /u01
chmod -R 775 /u01
4. 共享存储配置
4.1 虚拟共享磁盘创建
在VMware中创建共享磁盘的步骤:
- 为节点1创建新虚拟磁盘(SCSI,20GB)
- 选择"Allocate all disk space now"
- 选择"Store virtual disk as a single file"
- 创建完成后,编辑虚拟机设置:
- 将磁盘模式改为"Independent"和"Persistent"
- 将SCSI总线共享改为"Virtual"
- 为节点2添加现有磁盘,选择刚才创建的磁盘文件
4.2 磁盘权限配置
在两台节点上执行:
bash复制chown oracle:asmadmin /dev/sd*
chmod 660 /dev/sd*
4.3 ASM磁盘组准备
使用udev规则持久化磁盘权限,创建/etc/udev/rules.d/99-oracle-asmdevices.rules:
code复制KERNEL=="sd*", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d $devnode", RESULT=="<磁盘SCSI_ID>", SYMLINK+="asm-disk1", OWNER="oracle", GROUP="asmadmin", MODE="0660"
获取磁盘SCSI ID的方法:
bash复制/usr/lib/udev/scsi_id -g -u -d /dev/sdb
5. Grid Infrastructure安装
5.1 软件包安装
在两台节点上安装必需软件包:
bash复制yum install -y oracle-database-preinstall-19c \
kmod-oracleasm \
oracleasm-support \
elfutils-libelf-devel \
libaio-devel \
unixODBC
5.2 运行安装程序
以oracle用户执行:
bash复制cd /u01/app/19.0.0/grid
./gridSetup.sh
安装过程中关键配置项:
- 选择"Configure a Standard Cluster"
- 添加两个节点信息(rac1和rac2)
- 网络配置中选择正确的公共和私有网络接口
- 存储选择"Automatic Storage Management (ASM)"
- 创建新的ASM磁盘组(DATA),选择/dev/asm-disk1
- 设置ASMSNMP密码(需满足Oracle复杂度要求)
5.3 安装后验证
检查集群状态:
bash复制crsctl check cluster -all
预期输出应显示两个节点均为ONLINE状态。
6. Oracle数据库安装
6.1 运行数据库安装程序
以oracle用户执行:
bash复制cd /u01/app/oracle/product/19.0.0/dbhome_1
./runInstaller
关键配置步骤:
- 选择"Oracle Real Application Clusters database installation"
- 选择所有可用节点
- 选择"Enterprise Edition"
- 数据库配置选择"General Purpose / Transaction Processing"
- 存储选择之前创建的ASM磁盘组
- 启用自动内存管理(AMM)
- 设置SYS/SYSTEM密码
6.2 创建后检查
验证数据库服务状态:
bash复制srvctl status database -d orcl
检查监听器状态:
bash复制srvctl status listener
7. 常见问题与解决方案
7.1 安装过程中的典型错误
问题1: ORA-00845: MEMORY_TARGET not supported on this system
原因: /dev/shm空间不足
解决:
bash复制mount -t tmpfs shmfs -o size=7g /dev/shm
问题2: PRVF-0002: Could not retrieve local nodename
原因: /etc/hosts配置错误
解决: 确保主机名解析正确,特别是私有网络名称
7.2 集群管理技巧
-
手动启动/停止集群:
bash复制# 停止 crsctl stop cluster -all # 启动 crsctl start cluster -all -
查看资源状态:
bash复制
crsctl status resource -t -
修改SCAN监听端口:
bash复制
srvctl modify scan_listener -p 1522
7.3 性能优化建议
-
调整ASM磁盘组冗余策略:
sql复制ALTER DISKGROUP DATA SET ATTRIBUTE 'au_size'='4M'; -
优化缓存融合参数:
sql复制ALTER SYSTEM SET "_gc_lms_processes"=1 SCOPE=spfile; ALTER SYSTEM SET "_gc_policy_time"=0 SCOPE=spfile; -
配置服务负载均衡:
sql复制EXEC DBMS_SERVICE.MODIFY_SERVICE( service_name => 'orcl_srv', goal => DBMS_SERVICE.GOAL_THROUGHPUT, clb_goal => DBMS_SERVICE.CLB_GOAL_SHORT );
8. 维护与监控
8.1 日常检查清单
-
集群健康检查:
bash复制
crsctl check cluster -all -
ASM磁盘组空间监控:
sql复制SELECT name, total_mb, free_mb FROM v$asm_diskgroup; -
实例资源使用情况:
sql复制SELECT inst_id, resource_name, current_utilization, max_utilization FROM gv$resource_limit WHERE max_utilization > 0;
8.2 备份策略
-
RMAN全量备份脚本示例:
bash复制
rman target / RUN { ALLOCATE CHANNEL ch1 DEVICE TYPE DISK; BACKUP DATABASE PLUS ARCHIVELOG; BACKUP CURRENT CONTROLFILE; BACKUP SPFILE; } -
创建CRON定时任务:
bash复制0 2 * * * /u01/scripts/rman_backup.sh > /u01/logs/rman_$(date +\%Y\%m\%d).log 2>&1
8.3 补丁管理
-
检查当前补丁版本:
bash复制
opatch lsinventory -
应用最新补丁(如19.3.0.0.0):
bash复制
opatch apply -
回滚补丁:
bash复制opatch rollback -id <patch_id>
经过完整的部署和配置后,您的双节点Oracle RAC集群应该已经可以正常提供服务。在实际生产环境中,建议定期进行故障转移测试,确保高可用性功能正常工作。对于开发测试环境,这套配置已经可以提供接近生产环境的集群体验,是学习Oracle高可用技术的理想平台。
