杰瑞科技汇

Oracle RAC教程,如何快速上手集群配置?

Oracle RAC 全方位教程

目录

  1. 第一部分:初识 Oracle RAC

    Oracle RAC教程,如何快速上手集群配置?-图1
    (图片来源网络,侵删)
    • 1 什么是 Oracle RAC?
    • 2 RAC 的核心价值与优势
    • 3 RAC 的基本架构
    • 4 RAC 的核心组件
    • 5 RAC 与单实例数据库的根本区别
  2. 第二部分:RAC 环境准备与架构

    • 1 硬件要求
    • 2 操作系统要求
    • 3 网络规划 (重中之重)
    • 4 存储规划 (重中之重)
    • 5 软件包要求
    • 6 架构图示例
  3. 第三部分:安装与配置 RAC (实战步骤)

    • 1 准备工作:配置主机名、IP、用户等
    • 2 配置共享存储 (使用 ASM)
    • 3 安装 Grid Infrastructure (集群ware)
    • 4 使用 DBCA 创建 RAC 数据库
    • 5 验证 RAC 安装
  4. 第四部分:RAC 日常管理与维护

    • 1 集群管理
    • 2 实例管理 (启动/关闭)
    • 3 数据库管理
    • 4 管理投票盘 和 OCR
    • 5 备份与恢复
  5. 第五部分:RAC 应用开发与连接

    Oracle RAC教程,如何快速上手集群配置?-图2
    (图片来源网络,侵删)
    • 1 如何连接 RAC 数据库?
    • 2 TAF (Transparent Application Failover)
    • 3 FCF (Fast Connection Failover)
    • 4 开发最佳实践
  6. 第六部分:常见问题与故障排查

    • 1 常见问题列表
    • 2 关键日志文件
    • 3 诊断思路
  7. 第七部分:学习资源与进阶

    • 1 官方文档
    • 2 书籍推荐
    • 3 实验环境搭建建议

第一部分:初识 Oracle RAC

1 什么是 Oracle RAC?

Oracle Real Application Clusters (RAC) 是 Oracle Database 的一项核心高可用性技术,它允许多个 Oracle 数据库实例(通常运行在不同的服务器上)同时访问同一个物理数据库,这些服务器通过高速网络连接,并共享存储。

RAC 就是一个“集群数据库”,你可以把它想象成一个由多个“大脑”(服务器/实例)组成的“身体”(数据库),所有大脑都能同时思考和处理关于这个身体的任何事情,并且共享同一个“记忆”(数据文件)。

Oracle RAC教程,如何快速上手集群配置?-图3
(图片来源网络,侵删)

2 RAC 的核心价值与优势

  • 高可用性:这是 RAC 最核心的优势,如果集群中的一台服务器(节点)发生故障,数据库服务不会中断,客户端的连接会自动切换到其他健康的节点上,实现“无缝”切换,业务几乎无感知。
  • 可扩展性:当业务增长,数据库负载过高时,可以通过向集群中添加新的节点来线性地提升数据库的处理能力,这种“Scale-Out”(横向扩展)方式比升级单台服务器的“Scale-Up”(纵向扩展)更灵活、成本效益更高。
  • 负载均衡:客户端的连接可以自动分配到集群中负载较低的节点上,避免了单点过载,优化了整体性能。
  • 灾难恢复:RAC 本身不是一个完整的 DR 解决方案,但它为构建强大的 DR 方案(如 RAC One Node + Data Guard)提供了坚实的基础。

3 RAC 的基本架构

RAC 架构主要由两部分组成:

  1. 集群ware:这是 RAC 的“骨架”和“神经系统”,它负责管理集群中的所有节点,确保它们之间的通信、协调和故障检测,Grid Infrastructure 是 Oracle 提供的集群ware 解决方案。
  2. Oracle Database:这是 RAC 的“血肉”,它被修改为可以在集群环境中运行,允许多个实例并发访问同一个数据库。

4 RAC 的核心组件

  • 节点:集群中的一台独立的服务器,一个 2 节点的 RAC 集群就有两台服务器。
  • 实例:运行在节点上的 Oracle 内存结构和后台进程集合,在 RAC 中,每个节点都有一个独立的实例。
  • 数据库:存储在共享磁盘上的物理数据文件(控制文件、数据文件、日志文件等),所有实例共同访问和修改这份数据。
  • Oracle Clusterware (Grid Infrastructure 的一部分)
    • OCR (Oracle Cluster Registry):集群的核心注册表,它存储了集群的配置信息,如节点名、实例名、数据库信息、网络配置等,OCR 对集群的运行至关重要。
    • Voting Disk (投票盘):用于“心跳”机制,集群中的所有节点会定期向投票盘写入信息(投票),如果一个节点在一定时间内没有成功写入,其他节点就会认为它已经“死亡”,并将其从集群中驱逐,从而避免“脑裂”(Split-Brain)问题。
  • ASM (Automatic Storage Management):Oracle 提供的智能卷管理器和文件系统。强烈推荐在 RAC 环境中使用 ASM,因为它能简化存储管理,提供高性能、高可用性和自动化的数据冗余(如镜像)。
  • 私有网络:节点之间的专用高速网络,用于 Clusterware 的心跳同步和实例间的缓存融合。
  • 公共网络:客户端访问数据库的网络。
  • SCAN (Single Client Access Name):一个为客户端配置的单一域名系统名称,它解析到集群中一个或多个虚拟 IP 地址,客户端通过 SCAN 连接,无需关心具体连接到哪个节点,由集群自动进行负载均衡和故障转移。

5 RAC 与单实例数据库的根本区别

特性 单实例数据库 RAC 数据库
架构 一个实例,一个数据库 多个实例,一个数据库
高可用 依赖硬件冗余或 Data Guard 节点级别的故障自动切换
可扩展性 Scale-Up(升级硬件) Scale-Out(增加节点)
内存 实例内存独立 实例内存通过私有网络共享(缓存融合)
管理 管理单个实例 管理整个集群和数据库

第二部分:RAC 环境准备与架构

搭建 RAC 环境是整个教程中最具挑战性的部分,规划至关重要。

1 硬件要求

  • 服务器:至少 2 台,推荐使用类似架构的服务器。
  • CPU:根据负载规划,每台服务器至少 2 个核心。
  • 内存:根据负载规划,每台服务器至少 8GB。
  • 网络:每台服务器至少需要 3 张物理网卡,强烈推荐使用 bonded NIC 以提高可靠性。
  • 存储:共享存储,如 SAN、NAS 或 iSCSI,所有节点必须能同时访问。

2 操作系统要求

  • 版本:选择 Oracle 官方支持且经过认证的 Linux 发行版,如 Oracle Linux (RHEL/CentOS 的下游版本,有 UEK 内核优化) 或 RHEL/CentOS。
  • 内核参数:需要根据 Oracle 的官方文档调整大量内核参数(如 shmmax, shmall, file-max 等)。
  • 用户和组:创建 oraclegrid 用户,以及相应的 dbaoinstall 组。

3 网络规划 (重中之重)

这是最容易出错的地方,每台服务器至少需要 3 个 IP 地址:

  1. 公共 IP:用于管理节点和客户端访问。168.1.11 (node1), 168.1.12 (node2)。
  2. 虚拟 IP:每个节点一个,当节点故障时,VIP 会自动漂移到其他节点上,客户端连接不变。168.1.21 (VIP for node1), 168.1.22 (VIP for node2)。
  3. SCAN IP:集群一个,DNS 中需要配置 SCAN,解析到 3 个 SCAN VIP(scan1, scan2, scan3)。168.1.100, 168.1.101, 168.1.102
  4. 私有 IP:节点间通信使用。10.10.11 (node1 private), 10.10.12 (node2 private)。

网络隔离:强烈建议将公共网络和私有网络在不同的物理网段上。

4 存储规划 (重中之重)

使用 ASM,你需要规划磁盘组。

  • OCR/Voting Disk:通常放在一个高可用的磁盘组中,建议使用外部冗余或 NORMAL 冗余。
  • Data/Flash Recovery Area:用于存放数据文件、控制文件、redo log 等,建议使用 NORMAL 或 HIGH 冗余(镜像)。
  • Fast Recovery Area:可选,用于存放备份。

5 软件包要求

根据你选择的 Oracle Database 版本(如 19c, 21c)和操作系统版本,从 MOS (My Oracle Support) 下载对应的安装包:

  • Grid Infrastructure:用于安装集群ware 和 ASM。
  • Oracle Database:用于创建数据库。

6 架构图示例

+---------------------+      +---------------------+
|      Node 1         |      |      Node 2         |
| (racnode1.example.com)|      | (racnode2.example.com)|
|---------------------|      |---------------------|
| Public IP: 192.168.1.11 |      | Public IP: 192.168.1.12 |
| VIP:      192.168.1.21 |      | VIP:      192.168.1.22 |
| Private IP: 10.10.10.11|      | Private IP: 10.10.10.12 |
|---------------------|      |---------------------|
|   Oracle Instance 1 |      |   Oracle Instance 2 |
+---------------------+      +---------------------+
          \                         /
           \      (Private Network) /
            \                     /
             \                   /
+-------------------------------------------------------+
|               Shared Storage (SAN/NAS)               |
|                                                       |
| +---------------------+ +---------------------------+ |
| |   OCR/Voting Disk   | |     Data/Redo Logs        | |
| | (e.g., +DATA/CRS)   | | (e.g., +DATA)             | |
| +---------------------+ +---------------------------+ |
|                                                       |
|  Managed by ASM (Automatic Storage Management)       |
+-------------------------------------------------------+

第三部分:安装与配置 RAC (实战步骤)

这部分将以 Oracle Linux 8 + Oracle Database 19c 为例,概述安装流程。

1 准备工作

  1. 安装操作系统:在两台节点上安装相同版本的 Oracle Linux。
  2. 配置网络:按照 2.3 节的规划,配置所有 IP 地址、主机名 /etc/hosts 文件(关键文件,必须包含所有节点、VIP、SCAN 的解析)。
  3. 创建用户和组
    # 创建 grid 用户和组
    /usr/sbin/groupadd -g 1000 oinstall
    /usr/sbin/groupadd -g 1001 dba
    /usr/sbin/groupadd -g 1002 oper
    /usr/sbin/groupadd -g 1003 asmadmin
    /usr/sbin/groupadd -g 1004 asmdba
    /usr/sbin/groupadd -g 1005 asmoper
    /usr/sbin/useradd -u 1100 -g oinstall -G dba,oper,asmadmin,asmdba,asmoper grid
    # 创建 oracle 用户和组
    /usr/sbin/useradd -u 1101 -g oinstall -G dba,asmdba oracle
    # 设置密码
    passwd grid
    passwd oracle
  4. 配置内核参数和资源限制:编辑 /etc/sysctl.conf/etc/security/limits.conf,并运行 sysctl -p 使其生效。
  5. 配置 NTP:确保所有节点的时间同步。
  6. 配置无密码 SSH 信任gridoracle 用户需要在所有节点间实现无密码 SSH 登录。
  7. 挂载共享存储:在所有节点上识别共享磁盘,并确保权限正确。

2 配置共享存储 (使用 ASM)

在安装 Grid Infrastructure 的过程中,会自动配置 ASM,你需要提前规划好哪些磁盘用于 OCR/Voting,哪些用于数据。

3 安装 Grid Infrastructure (集群ware)

这是安装的核心步骤。

  1. grid 用户身份登录到第一个节点。
  2. 运行安装程序
    $ cd /path/to/grid_home
    $ ./runInstaller
  3. 遵循图形界面
    • 选择安装选项:通常选择 "Install and Configure Oracle Grid Infrastructure for a Cluster"。
    • 配置集群:输入 SCAN 名称和 SCAN VIP。
    • 添加节点:将第二个节点添加到集群中。
    • 配置网络:选择公共网络、私有网络和 SCAN 网络。
    • 配置存储:选择用于 OCR/Voting 和 ASM 的磁盘。
    • 配置密码:为所有管理账户(如 sys, system, grid)设置统一的密码。
    • 执行配置脚本:安装程序会提示你以 root 身份在所有节点上执行脚本。务必按顺序执行

安装完成后,集群ware 就已经运行起来了,你可以使用 crsctl status resource -t 查看集群资源状态。

4 使用 DBCA 创建 RAC 数据库

Grid Infrastructure 安装好后,就可以创建数据库了。

  1. oracle 用户身份登录
  2. 运行 DBCA
    $ dbca
  3. 遵循图形界面
    • 选择操作:选择 "Create a Database"。
    • 选择数据库类型:选择 "Oracle Real Application Clusters database"。
    • 配置数据库:输入全局数据库名、SID(每个节点一个 SID,如 +ASM1, +ASM2 对应 ASM 实例,RAC1, RAC2 对应数据库实例)。
    • 配置存储:选择 ASM,并指定磁盘组。
    • 配置初始化参数:可以手动调整或使用默认模板。
    • 配置管理选项:如启用的 ADR、Fast Start Failover 等。
    • 创建选项:选择 "Create Database"。

DBCA 会自动在所有节点上创建实例、数据文件、控制文件和日志文件。

5 验证 RAC 安装

  1. 检查集群状态

    [grid@racnode1 ~]$ crsctl status resource -t

    你应该能看到 ora.rac.dbora.rac1.instora.rac2.inst 等资源都处于 ONLINE 状态。

  2. 检查实例状态

    [oracle@racnode1 ~]$ sqlplus / as sysdba
    SQL> select instance_name, status from v$instance;

    在两个节点上分别执行,应该能看到 RAC1RAC2 实例都是 OPEN 状态。

  3. 测试客户端连接: 在客户端机器上,使用 TNS 连接字符串连接到 SCAN 名称。

    sqlplus sys/your_password@SCAN_NAME:1521/SERVICE_NAME

第四部分:RAC 日常管理与维护

1 集群管理

  • 启动/停止集群
    # 启动整个集群 (所有节点)
    crsctl start cluster
    # 停止整个集群
    crsctl stop cluster
  • 管理集群资源
    # 查看资源状态
    crsctl status resource -t
    # 启动/停止单个资源
    crsctl start resource ora.rac.db
    crsctl stop resource ora.rac.db

2 实例管理

  • 启动/停止单个实例
    # 在节点1上启动实例1
    srvctl start instance -d RAC -i RAC1
    # 在节点1上停止实例1
    srvctl stop instance -d RAC -i RAC1
  • 滚动停止/启动集群:在不中断服务的情况下,对集群中的每个节点依次进行维护。
    # 滚动停止所有实例
    srvctl stop instance -d RAC -i RAC1,RAC2 -o immediate
    # 滚动启动所有实例
    srvctl start instance -d RAC -i RAC1,RAC2

3 数据库管理

  • 使用 SRVCTL:RAC 环境下的数据库管理主要通过 srvctl 命令行工具进行。
    # 查看数据库状态
    srvctl status database -d RAC
    # 添加/删除实例
    srvctl add instance -d RAC -i RAC3 -n racnode3
    srvctl remove instance -d RAC -i RAC3

4 管理投票盘 和 OCR

  • 备份:Grid Infrastructure 会自动备份 OCR 和 Voting Disk,但 DBA 也需要手动备份。
    # 备份 OCR
    ocrconfig -manualbackup
  • 恢复:OCR 损坏,可以从自动备份或手动备份中恢复。
    # 恢复 OCR
    ocrconfig -restore /path/to/backup_file.ocr

5 备份与恢复

  • RMAN:RMAN 是 RAC 备份的首选工具,它天然支持多实例备份,可以并行执行,提高效率。
  • 备份策略
    • 全库备份:定期对整个数据库进行备份。
    • 控制文件和 SPFILE 自动备份:确保 RMAN 配置了 CONFIGURE CONTROLFILE AUTOBACKUP ON;
    • 归档日志备份:至关重要,用于 Point-in-Time Recovery。
  • 恢复:恢复过程与单实例类似,但 RMAN 会自动协调所有实例,如果节点故障,可以在其他节点上执行恢复操作。

第五部分:RAC 应用开发与连接

1 如何连接 RAC 数据库?

客户端不需要知道集群中有多少个节点,它只需要连接到 SCAN 名称,SCAN 名称会解析到集群的 SCAN VIP,然后由集群的负载均衡器决定将连接路由到哪个节点的 VIP 上。

客户端的 tnsnames.ora 文件可以非常简单:

RAC_SCAN =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = your_scan_name)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = your_service_name)  // RAC
    )
  )

2 TAF (Transparent Application Failover)

TAF 是 RAC 最重要的客户端特性之一,它允许在数据库会话期间,如果当前连接的实例发生故障,客户端会话(包括正在进行的事务)会自动、透明地重新连接到集群中的另一个健康实例。

  • 配置方式:在 tnsnames.ora 中指定 FAILOVER_MODE
    RAC_TAF =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = your_scan_name)(PORT = 1521))
        (CONNECT_DATA =
          (SERVICE_NAME = your_service_name)
          (SERVER = DEDICATED)
          (FAILOVER_MODE =
            (TYPE = SELECT)  // 或 BASIC
            (METHOD = BASIC)
            (RETRIES = 180)
            (DELAY = 5)
          )
        )
      )
    • TYPE=SELECT:TAF 不仅会重连,还会尝试重新执行之前的查询,保持游标状态。
    • TYPE=BASIC:只重连,不重执行查询。

3 FCF (Fast Connection Failover)

FCF 是针对连接池(如 UCP, WebLogic)的高级故障转移机制,当检测到实例故障时,连接池会立即将所有到该实例的连接标记为无效,并在后台异步地重新建立新连接,对应用几乎无影响。

4 开发最佳实践

  • 不要硬编码节点名或 IP:始终使用 SCAN 名称和 Service Name。
  • 使用连接池:应用服务器应使用连接池,并启用 FCF。
  • 编写无状态应用:尽量避免在会话中存储大量状态信息,以便在故障转移后能更快地恢复。
  • 处理 TAF 事件:如果应用使用 TYPE=SELECT 的 TAF,需要准备好处理 ROWID 变化或游标失效的异常。

第六部分:常见问题与故障排查

1 常见问题列表

  • 节点无法加入集群:通常是网络配置(/etc/hosts)、防火墙、时间不同步或权限问题。
  • VIP 漂移失败:可能是网卡配置、udev 规则或网络问题导致 VIP 无法在备用节点上启动。
  • 实例启动失败:可能是 ASM 磁盘组未启动、参数文件问题或存储问题。
  • 性能问题:可能是私有网络带宽不足、缓存融合效率低、SQL 语句本身的问题。

2 关键日志文件

  • Grid Infrastructure 日志$GRID_HOME/log/
    • crsd/:CRS 守护进程日志。
    • evmd/:事件管理器日志。
    • agent/:管理代理日志。
    • racg/:RAC 守护进程日志。
  • 数据库日志$ORACLE_BASE/diag/rdbms/<DB_UNIQUE_NAME>/<INSTANCE_NAME>/trace/
    • alert_<instance_name>.log:实例的警报日志,最重要的诊断信息来源。
  • ASM 日志$GRID_HOME/log/asm/

3 诊断思路

  1. 观察现象:哪个节点/实例/服务出问题了?
  2. 检查集群状态crsctl status resource -t,看资源状态。
  3. 检查实例状态sqlplus 连接实例,看是否能正常操作。
  4. 检查日志:根据时间戳,查看相关的警报日志和 CRS 日志,寻找 ORA- 错误信息。
  5. 检查网络ping, ssh, nslookup 等。
  6. 检查存储asmcmd 查看 ASM 磁盘组状态。
  7. 逐步排除:从最可能的原因开始排查。

第七部分:学习资源与进阶

1 官方文档

  • Oracle Database Installation Guide:安装步骤的权威来源。
  • Oracle Real Application Clusters Administration and Deployment Guide:RAC 管理的“圣经”。
  • My Oracle Support (MOS):遇到问题时,首先搜索 MOS,里面有大量的文档、补丁和 Bug 说明。

2 书籍推荐

  • 《Oracle RAC Hands-On》 by Mike Ault and Rampant TechPress:非常经典的实战书籍。
  • 《Oracle Real Application Clusters 12c Administration Handbook》 by Oracle Press:官方出版的权威手册。

3 实验环境搭建建议

  • 使用虚拟机:Oracle VM VirtualBox 或 VMware Workstation 是搭建本地 RAC 实验环境的绝佳选择。
  • 使用共享磁盘:在虚拟机中配置共享磁盘(VirtualBox 的 VMDK 或 VMware 的 VMDK/RDM)来模拟共享存储。
  • 简化网络:在虚拟机中多创建几块虚拟网卡,模拟公共和私有网络。
  • 从 2 节点开始:2 节点 RAC 已经能让你掌握所有核心概念和操作。

学习 Oracle RAC 是一个系统工程,它不仅要求你懂 Oracle 数据库,还要求你懂操作系统、网络和存储,本教程为你提供了一个从入门到实践的路线图,最好的学习方法就是 动手实践,搭建一个自己的 RAC 环境,去安装、配置、管理,甚至人为地制造一些故障,然后去排查和解决,祝你学习顺利!

分享:
扫描分享到社交APP
上一篇
下一篇