深入了解OracleRAC:架构、扩展与硬件需求
立即解锁
发布时间: 2025-08-23 01:44:09 阅读量: 1 订阅数: 5 

# 深入了解 Oracle RAC:架构、扩展与硬件需求
## 1. 数据库停机与可用性
Oracle 数据库的计划停机可能是为了系统升级或迁移。系统升级涵盖硬件(如服务器、网络、存储)和软件(如操作系统、数据库补丁和升级),停机时间会因升级性质而异。为避免升级导致的数据库停机,可采用冗余系统,在升级期间接管数据库工作负载,避免数据库中断。
迁移维护有时是必要的,例如将数据库迁移到新服务器、新存储或新操作系统。尽管这种迁移不太频繁,但潜在的停机时间可能更长,对业务应用的影响也更大。为减少数据库迁移停机时间,可使用一些工具和方法,如 Oracle 可传输表空间、Data Guard、Oracle GoldenGate、Quest SharePlex 等。
对于减少或最小化 Oracle 数据库的计划和非计划停机时间的其他解决方案,可参考 Oracle 最大可用性架构(MAA),详情请访问 [Oracle MAA 架构页面](www.oracle.com/technetwork/database/features/availability/maa-090890.html)。
## 2. 数据库可扩展性
在数据库领域,应首先进行应用数据库设计、SQL 查询调优和数据库实例调优,而不是单纯添加新硬件。因为糟糕的应用数据库设计和 SQL 查询,即使添加额外硬件也无法解决性能问题。然而,即使是经过良好调优的数据库,随着工作负载的增加,也可能会耗尽系统容量。
此时,数据库性能问题不仅是调优问题,还涉及可扩展性问题。数据库可扩展性是指在工作负载增加的情况下,通过添加更多计算、网络和存储资源,提高数据库吞吐量并减少响应时间。
数据库系统的三个关键系统资源是 CPU、内存和存储。不同类型的数据库工作负载对这些资源的使用方式可能不同,有些可能受 CPU 或内存限制,而另一些可能受 I/O 限制。为扩展数据库,数据库管理员(DBA)首先需要使用性能监控工具(如 Oracle Enterprise Manager 或 AWR 报告)识别主要性能瓶颈或资源争用。
如果数据库受 I/O 限制,需要扩展存储。可通过增加存储 I/O 容量(如每秒 I/O 操作数)和使用 ASM 条带化和磁盘驱动器上的 I/O 负载均衡来减少存储响应时间。
如果数据库受 CPU 或内存限制,需要扩展服务器容量。服务器可扩展性可通过以下两种方法实现:
- **纵向扩展(Scale-up)**:向现有服务器添加额外的 CPU 和内存。
- **横向扩展(Scale-out)**:向数据库系统添加额外的服务器。
### 2.1 纵向扩展
纵向扩展相对简单,只需向服务器添加更多 CPU 和内存。额外的 CPU 可被操作系统和数据库实例识别。为使用额外的内存,可能需要修改操作系统内核中的一些内存设置以及数据库实例初始化参数。这种方法在 x86 服务器上更有用,因为这些服务器的 CPU 核心和内存越来越多(撰写本文时,较新的服务器每台可达 80 个核心和 4TB 内存),如 HP DL580、DL980 和 Dell R820、R910 等强大的 X86 服务器。但对于某些基于 Intel Sandybridge 和 Northbridge 架构的服务器,使用旧 CPU 添加更多内存可能无法始终实现相同的内存性能。纵向扩展的最大问题是,当服务器达到最大 CPU 和内存容量时,会遇到限制。此时,可能需要更换为更强大的服务器或尝试横向扩展选项。
### 2.2 横向扩展
横向扩展是通过将多个服务器集群在一起,将工作负载分布在它们之间,从而为数据库添加更多服务器。这样,数据库的 CPU 和内存资源可以翻倍或三倍。与纵向扩展相比,横向扩展更具可扩展性,因为可以为不断增加的工作负载继续添加更多服务器。
选择纵向扩展还是横向扩展,需要考虑以下因素:
| 因素 | 纵向扩展 | 横向扩展 |
| ---- | ---- | ---- |
| 事务性能要求 | 如果目标是降低事务延迟,纵向扩展可能是更好的选择,因为从本地内存读取数据比通过网络从远程服务器读取数据快得多,即使是高速 InfiniBand 网络也是如此。 | 如果目标是提高数据库事务吞吐量,横向扩展是需要考虑的选项,因为它可以将事务负载分布到多个服务器,实现更高的事务吞吐量。 |
| 硬件和软件许可证成本 | 纵向扩展可能需要高成本的高端服务器以实现垂直可扩展性。 | 横向扩展允许使用低成本的商用服务器集群在一起,但通常需要特殊的许可软件(如 Oracle RAC)来集群多个节点上的应用程序。虽然可以节省一些硬件成本,但需要支付集群软件的许可费用。 |
| 技术复杂度 | 相对简单 | 实现起来需要更复杂的技术,例如如何让多个服务器在单个数据库上协同工作,同时保持节点之间的数据一致性,以及如何同步多个节点上的操作以实现最佳性能。 |
## 3. 数据库集群架构
为实现数据库的横向可扩展性或横向扩展,多个数据库服务器被组合在一起形成集群基础设施。这些服务器通过专用互连网络连接,作为一个单一的虚拟服务器协同工作,能够处理大型应用程序工作负载。该集群可以通过添加或删除服务器轻松扩展或收缩,以适应工作负载的动态变化。这种架构不受单个服务器最大容量的限制,不像纵向扩展方法那样。
有两种类型的集群架构:
- **无共享架构(Shared Nothing Architecture)**:基于一组独立的服务器,每个服务器都有自己的存储。每个服务器承载数据库的一部分,工作负载也由这组服务器划分,每个服务器承载预定义的工作负载。虽然这种架构可以在多个服务器之间分配工作负载,但工作负载和数据在服务器之间的分布是预定义的。添加或删除单个服务器需要对集群进行全面重新设计和重新部署。
- **共享一切架构(Shared Everything Architecture)**:集群中的每个服务器都连接到共享存储,数据库文件存储在其中。它可以是主动 - 被动或主动 - 主动架构。
### 3.1 无共享架构
对于每个节点只需要访问数据库一部分的应用程序,通过非常仔细的数据库和工作负载分区,无共享架构可能适用。但如果数据分区与服务器节点上的应用程序工作负载分布不完全同步,一些节点可能需要访问存储在其他节点中的数据,这将影响数据库性能。此外,无共享架构不适用于需要访问整个数据库的大型数据库应用程序(如 OLTP),因为它需要频繁在节点之间重新分配数据,并且不提供高可用性。由于每个分区专用于一块数据和工作负载,且没有其他服务器进行复制,每个服务器都可能成为单点故障。如果任何服务器发生故障,数据和工作负载无法故障转移到集群中的其他服务器。
### 3.2 共享一切架构
#### 3.2.1 主动 - 被动架构
在主动 - 被动集群架构中,在任何给定时间,只有一个服务器主动访问数据库文件并处理工作负载,另一个服务器处于被动备用状态。如果主动服务器发生故障,第二个服务器将接管对数据库文件的访问,成为主动服务器,用户对数据库的连接也会故障转移到第二个服务器。这种主动 - 被动集群仅提供可用性,不提供可扩展性,因为在任何给定时间只有一个服务器处理工作负载。
此类集群数据库的示例包括 Microsoft SQL Server 集群、Oracle Fail Safe 和 Oracle RAC One Node。Oracle RAC One Node 于 Oracle Database 11.2 引入,允许单实例数据库在节点故障时故障转移到另一个节点。由于 Oracle RAC One Node 基于与 Oracle RAC 数据库相同的网格基础设施,可使用几个 srvctl 命令将其从单节点转换为主动 - 主动的 Oracle RAC 数据库。
#### 3.2.2 主动 - 主动架构
在主动 - 主动集群架构中,集群中的所有服务器可以同时主动访问数据库文件并处理工作负载。所有数据库工作负载均匀分布到所有服务器。如果一个或多个服务器发生故障,故障服务器上的数据库连接和工作负载将故障转移到其余存活的服务器。这种主动 - 主动架构通过为用户提供虚拟数据库服务实现数据库服务器虚拟化。虚拟数据库服务背后有多少实际物理数据库服务器,以及工作负载如何分配到这些物理服务器,对用户来说是透明的。为使这种架构具有可扩展性,向集群中添加或删除物理服务器对用户也是透明的。Oracle RAC 是主动 - 主动共享一切数据库架构的典型示例。
下面是一个简单的 mermaid 流程图,展示了主动 - 主动架构的工作流程:
```mermaid
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
A(用户连接):::process --> B(虚拟数据库服务):::process
B --> C(Node 1):::process
B --> D(Node 2):::process
B --> E(Node 3):::process
C --> F(共享存储):::process
D --> F
E --> F
C -.-> G(故障转移):::process
D -.-> G
E -.-> G
G --> H(剩余节点接管):::process
```
## 4. Oracle RAC 架构
Oracle Real Application Cluster (RAC) 是基于共享一切架构的 Oracle 数据库选项。Oracle RAC 将多个服务器集群在一起,作为一个单一系统运行。在这个集群中,每个服务器都主动访问共享数据库,形成主动 - 主动集群配置。
Oracle 最早在 Oracle 6.2 的 VAX/VMS 上推出了这种主动 - 主动集群数据库解决方案,称为 Oracle 并行服务器(OPS),该名称一直使用到 2001 年,当时 Oracle 在 Oracle Database 9i 中发布了 Oracle Real Application Clusters (RAC)。Oracle RAC 取代了 OPS,并进行了许多重大改进,包括 Oracle Clusterware 和缓存融合技术。
在 Oracle RAC 配置中,数据库文件存储在共享存储中,集群中的每个服务器都可以访问。数据库通过在每个服务器上运行一个 RAC 数据库实例在这些服务器上运行。数据库实例由一组与 Oracle 相关的内存和在服务器上运行的一组数据库后台进程组成。与单节点数据库不同,每个数据库仅限于一个数据库实例,RAC 数据库每个数据库可以有一个或多个数据库实例,并且易于添加额外的数据库实例。可以从单个节点或少量节点开始作为初始配置,并在不中断应用程序的情况下扩展到更多节点。数据库的所有实例都可以并发访问数据库文件。
Oracle RAC 旨在通过允许所有 RAC 实例共享数据库工作负载来提供可扩展性。通过这种方式,Oracle RAC 数据库为用户提供了一个逻辑数据库服务器,将多个 RAC 节点的计算资源(如 CPU 和内存)组合在一起。大多数情况下,通过使用 RAC 功能(如服务、单客户端访问名称(SCAN)和数据库客户端故障转移功能)进行适当配置,对集群配置的更改(如添加或删除节点)可以尽可能对用户透明。
这种架构还在集群发生故障时提供高可用性。它可以容忍 N - 1 个节点故障,其中 N 是节点总数。如果一个或多个节点发生故障,连接到故障节点的用户将自动故障转移到存活的 RAC 节点。例如,如果节点 2 发生故障,实例 2 上的用户连接将故障转移到实例 1 和实例 3。当用户连接故障转移到存活节点时,RAC 确保集群节点之间的负载均衡。
Oracle RAC 12cR1 引入了一种新的架构选项,称为 Flex Clusters。在这个新选项中,有两种类型的集群节点:Hub 节点和 Leaf 节点。Hub 节点与 Oracle RAC 11gR2 中的传统集群节点相同。所有 Hub 节点通过高速互连网络互连,并直接访问共享存储。Leaf 节点是一种新型节点,具有较轻的堆栈。它们仅与相应的附加 Hub 节点连接,彼此之间不连接。这些 Leaf 节点不需要直接访问共享存储,而是通过它们连接的 Hub 节点执行存储 I/O。Flex 集群架构的引入是为了提高 RAC 的可扩展性。
## 5. Oracle RAC 硬件要求
典型的 Oracle RAC 数据库需要两个或更多服务器、服务器之间的网络连接以及服务器共享的存储。虽然服务器可以是 SMP Unix 服务器或低成本的商用 x86 服务器,但行业趋势是将数据库服务器从大型 SMP Unix 机器迁移到运行 Linux 操作系统(如 Red Hat Enterprise Linux 和 Oracle Linux)的低成本 x86 - 64 服务器。
建议任何 Oracle RAC 集群中的所有服务器具有相似的硬件架构。同一 Oracle RAC 中的服务器必须使用相同的操作系统,可能有不同的补丁。为确保 RAC 集群节点之间的负载均衡,在 11gR2 中,服务器池管理基于服务器池的重要性和与服务器池关联的服务器数量,无法区分服务器的容量。RAC 集群中的所有服务器假设具有相似(同质)的容量配置,如 CPU 数量、总内存和物理网络。如果服务器容量不同,将影响 RAC 上的资源分配和会话负载均衡。在 Oracle RAC 12c 中,基于策略的集群管理可以管理由具有不同功能(如 CPU 功率和内存大小)的异构服务器组成的集群。随着服务器分类的引入,服务器池管理得到了增强,能够理解集群中服务器之间的差异。
每个服务器还应具有适当的本地存储,用于操作系统、Oracle Grid Infrastructure 软件主目录,如果决定使用本地磁盘存储 RAC Oracle 数据库二进制文件,还可用于 Oracle RAC 软件主目录。潜在地,在 RAC 节点发生故障时,故障节点上的工作负载将故障转移到工作节点,因此每个 RAC 节点应预留一些计算资源空间,以处理从其他节点故障转移过来的额外数据库工作负载。
RAC 数据库文件所在的存储需要所有 RAC 节点都可以访问。Oracle Clusterware 还将两个重要的 Clusterware 组件(Oracle 集群注册表(OCR)和投票磁盘文件)存储在共享存储中。每个 RAC 节点对共享存储的访问对 Clusterware 和 RAC 数据库至关重要。为确保存储连接的容错性,强烈建议在服务器和共享存储之间建立冗余网络连接。
例如,连接到光纤通道(FC)存储时,需要确保集群中的每个服务器都有双 HBA(主机总线适配器)卡,通过冗余光纤链路连接到两个光纤通道交换机,每个交换机连接到两个 FC 存储控制器。在软件方面,需要配置多路径软件,将多个 I/O 路径组合在一起,以便在其中一个路径发生故障时,一个 I/O 路径可以将 I/O 流量故障转移到另一个存活路径。这确保了存储中的磁盘始终至少有一个 I/O 路径可用。
根据存储网络协议,存储可以使用 FC 或 iSCSI 网络与服务器连接。为实现存储连接的高 I/O 带宽,一些高速存储网络解决方案(如 16GbE FC 和 10gBe iSCSI)已应用于存储网络。
Oracle RAC 配置的网络配置包括用户或应用程序连接到数据库的公共网络,以及连接集群中 RAC 节点的专用互连网络。专用互连网络仅对集群中的节点可用,它承载着集群中 RAC 节点之间最重要的心跳通信,也用于 RAC 实例之间的数据块传输。
对于生产集群数据库环境,强烈建议采用冗余专用互连配置,应至少包括两个连接到两个专用物理交换机的网络接口卡(NIC),这两个交换机不应连接到任何其他网络,包括公共网络。可以使用操作系统网络绑定实用程序(如 Linux Bonding 或 Microsoft NIC Teaming)将物理网络卡绑定到单个逻辑网络,以实现高可用性和负载均衡。
下面是一个总结 Oracle RAC 硬件要求的表格:
| 硬件组件 | 要求 |
| ---- | ---- |
| 服务器 | 两个或更多服务器,建议具有相似硬件架构,必须使用相同操作系统。在 11gR2 中假设服务器容量同质,12c 可管理异构服务器。每个服务器应有适当本地存储,预留计算资源以处理故障转移的工作负载。 |
| 存储 | 共享存储,RAC 数据库文件和 Oracle Clusterware 组件(OCR 和投票磁盘文件)存储在此。需确保所有 RAC 节点可访问,建立冗余网络连接,配置多路径软件。可使用 FC 或 iSCSI 网络连接,采用高速存储网络解决方案。 |
| 网络 | 公共网络用于用户或应用程序连接数据库,专用互连网络连接 RAC 节点。建议采用冗余专用互连配置,使用网络绑定实用程序实现高可用性和负载均衡。 |
综上所述,Oracle RAC 提供了强大的数据库可扩展性和高可用性,但在实施时需要考虑架构选择、硬件要求等多方面因素,以确保数据库系统的高效运行。
## 6. 存储连接配置示例
为了更清晰地展示存储连接的配置,下面详细说明连接到光纤通道(FC)存储的具体步骤:
1. **硬件准备**:
- 确保集群中的每个服务器都配备双 HBA(主机总线适配器)卡。
- 准备两个光纤通道交换机,并将每个 HBA 卡通过冗余光纤链路连接到这两个交换机。
- 每个光纤通道交换机连接到两个 FC 存储控制器。
2. **软件配置**:
- 安装并配置多路径软件,将多个 I/O 路径组合在一起。以下是一些常见操作系统的多路径软件配置示例:
- **Linux 系统**:
- 安装 `device-mapper-multipath` 软件包。
- 编辑 `/etc/multipath.conf` 文件,配置多路径规则。例如:
```plaintext
defaults {
user_friendly_names yes
}
multipaths {
multipath {
wwid "your_wwid"
alias mpatha
}
}
```
- 启动并设置多路径服务开机自启:
```bash
systemctl start multipathd
systemctl enable multipathd
```
- **Windows 系统**:
- 使用 Windows 自带的多路径 I/O(MPIO)功能。
- 在服务器管理器中添加 MPIO 功能。
- 打开 MPIO 配置工具,选择“发现多路径”,然后选择相应的存储设备并添加多路径支持。
下面是一个 mermaid 流程图,展示了存储连接的配置流程:
```mermaid
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
A(硬件准备):::process --> B(安装双 HBA 卡):::process
A --> C(连接光纤通道交换机):::process
A --> D(连接 FC 存储控制器):::process
B --> E(软件配置):::process
C --> E
D --> E
E --> F(安装多路径软件):::process
F --> G(配置多路径规则):::process
G --> H(启动多路径服务):::process
```
## 7. 网络配置要点
### 7.1 公共网络
公共网络用于用户或应用程序连接到数据库。在配置公共网络时,需要确保网络的稳定性和安全性。可以采取以下措施:
- 配置防火墙规则,只允许特定的 IP 地址或网段访问数据库端口。
- 采用负载均衡器,将用户请求均匀分配到不同的 RAC 节点,提高系统的并发处理能力。
### 7.2 专用互连网络
专用互连网络是 RAC 节点之间进行通信的关键网络。为了保证其可靠性和性能,需要注意以下几点:
- **冗余配置**:如前文所述,建议采用至少两个网络接口卡(NIC)连接到两个专用物理交换机,避免单点故障。
- **网络隔离**:专用互连网络应与公共网络隔离,防止外部网络干扰。
- **网络绑定**:使用操作系统网络绑定实用程序(如 Linux Bonding 或 Microsoft NIC Teaming)将物理网络卡绑定到单个逻辑网络,实现高可用性和负载均衡。以下是 Linux 系统使用 Bonding 进行网络绑定的示例:
1. 创建 Bonding 设备:
```bash
modprobe bonding mode=active-backup miimon=100
```
2. 编辑网络配置文件,例如 `/etc/sysconfig/network-scripts/ifcfg-bond0`:
```plaintext
DEVICE=bond0
BOOTPROTO=static
ONBOOT=yes
IPADDR=your_ip_address
NETMASK=your_netmask
GATEWAY=your_gateway
BONDING_OPTS="mode=active-backup miimon=100"
```
3. 分别编辑两个物理网卡的配置文件,例如 `/etc/sysconfig/network-scripts/ifcfg-eth0` 和 `/etc/sysconfig/network-scripts/ifcfg-eth1`:
```plaintext
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
```
```plaintext
DEVICE=eth1
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
```
4. 重启网络服务:
```bash
systemctl restart network
```
### 7.3 网络配置对比
| 网络类型 | 作用 | 配置要点 |
| ---- | ---- | ---- |
| 公共网络 | 用户或应用程序连接数据库 | 配置防火墙规则,使用负载均衡器 |
| 专用互连网络 | RAC 节点之间通信 | 冗余配置,网络隔离,网络绑定 |
## 8. 总结与建议
### 8.1 总结
Oracle RAC 作为一种强大的数据库解决方案,通过共享一切的主动 - 主动架构,实现了数据库的高可用性和可扩展性。它允许多个服务器协同工作,共同处理数据库工作负载,并在节点故障时实现自动故障转移。在实施 Oracle RAC 时,需要考虑多个方面的因素,包括数据库停机与可用性、可扩展性方法(纵向扩展和横向扩展)、集群架构选择(无共享架构和共享一切架构)以及硬件和网络配置要求。
### 8.2 建议
- **架构选择**:根据业务需求和性能要求,谨慎选择纵向扩展或横向扩展。如果对事务延迟要求较高,可优先考虑纵向扩展;如果需要提高事务吞吐量,横向扩展是更好的选择。
- **硬件配置**:确保服务器具有相似的硬件架构和足够的计算资源,同时建立冗余的存储和网络连接,以提高系统的容错性。
- **网络配置**:合理配置公共网络和专用互连网络,采用冗余和绑定技术,保证网络的稳定性和性能。
- **软件许可**:在选择横向扩展时,要充分考虑集群软件的许可成本,并确保其符合业务预算。
通过综合考虑以上因素,并按照正确的配置步骤进行实施,可以充分发挥 Oracle RAC 的优势,为企业的数据库系统提供高效、可靠的支持。
0
0
复制全文
相关推荐









