外观
Oracle RAC 安装
Oracle Real Application Clusters (RAC) 是 Oracle 数据库的高可用性解决方案,它允许多个数据库实例运行在不同的服务器上,同时访问共享存储。本文档详细介绍了 Oracle RAC 的安装步骤,包括系统准备、Grid Infrastructure 安装、RAC 数据库安装和安装后配置。
系统准备
支持的 Linux 发行版
Oracle RAC 支持以下 Linux 发行版:
- Red Hat Enterprise Linux (RHEL) 7.x, 8.x, 9.x
- Oracle Linux (OEL) 7.x, 8.x, 9.x
- CentOS 7.x, 8.x, 9.x
- SUSE Linux Enterprise Server (SLES) 12.x, 15.x
硬件要求
| 配置项 | 最小值 | 推荐值 |
|---|---|---|
| 节点数 | 2 | 2-16 |
| 每个节点 CPU 核心数 | 2 | 4+ |
| 每个节点内存 | 4GB | 16GB+ |
| 每个节点交换空间 | 8GB | 32GB+ |
| 共享存储 | 100GB | 500GB+ |
| 网络带宽 | 1Gbps | 10Gbps+ |
软件要求
- 操作系统版本:符合 Oracle 官方支持的版本(64-bit)
- Grid Infrastructure:与 Oracle 数据库版本匹配
- Oracle 数据库软件:企业版
- 依赖包:安装所需的依赖包
- 图形界面:需要图形界面进行安装
安装前配置
1. 网络配置
网络要求
- 公共网络:用于客户端连接和节点间通信
- 私有网络:用于节点间的高速通信(建议 10Gbps+)
- 虚拟 IP (VIP):每个节点的虚拟 IP 地址
- SCAN IP:Single Client Access Name,用于客户端连接(需要 3 个 IP 地址)
配置网络
配置公共网络:
bash# 在所有节点上配置公共网络 nmcli con mod eth0 ipv4.addresses 192.168.1.100/24 ipv4.gateway 192.168.1.1 ipv4.method manual nmcli con up eth0配置私有网络:
bash# 在所有节点上配置私有网络 nmcli con mod eth1 ipv4.addresses 192.168.2.100/24 ipv4.method manual nmcli con up eth1配置 /etc/hosts:
bash# 在所有节点上配置 /etc/hosts cat >> /etc/hosts << EOF # 公共 IP 192.168.1.100 rac1 192.168.1.101 rac2 # VIP 192.168.1.200 rac1-vip 192.168.1.201 rac2-vip # 私有 IP 192.168.2.100 rac1-priv 192.168.2.101 rac2-priv # SCAN IP 192.168.1.300 rac-scan 192.168.1.301 rac-scan 192.168.1.302 rac-scan EOF
2. 系统配置
配置内核参数
bash
# 在所有节点上配置内核参数
cat >> /etc/sysctl.conf << EOF
# Oracle RAC 内核参数
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 1073741824
kernel.shmmax = 4398046511104
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配置用户资源限制
bash
# 在所有节点上配置用户资源限制
cat >> /etc/security/limits.conf << EOF
# Oracle RAC 用户限制
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft nproc 16384
oracle hard nproc 16384
oracle soft stack 10240
oracle hard stack 32768
oracle hard memlock 134217728
oracle soft memlock 134217728
grid soft nofile 1024
grid hard nofile 65536
grid soft nproc 16384
grid hard nproc 16384
grid soft stack 10240
grid hard stack 32768
grid hard memlock 134217728
grid soft memlock 134217728
EOF禁用防火墙和 SELinux
bash
# 在所有节点上禁用防火墙
systemctl stop firewalld
systemctl disable firewalld
# 在所有节点上禁用 SELinux
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config3. 创建用户和组
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
groupadd -g 54327 asmdba
groupadd -g 54328 asmoper
groupadd -g 54329 asmadmin
groupadd -g 54330 racdba
# 在所有节点上创建用户
useradd -u 54321 -g oinstall -G dba,oper,backupdba,dgdba,kmdba,asmdba,racdba oracle
useradd -u 54322 -g oinstall -G asmadmin,asmdba,asmoper,dba,racdba grid
# 设置密码
passwd oracle
passwd grid4. 创建安装目录
bash
# 在所有节点上创建目录
mkdir -p /u01/app/19.0.0/grid
mkdir -p /u01/app/grid
mkdir -p /u01/app/oracle/product/19.0.0/dbhome_1
mkdir -p /u02/oradata
mkdir -p /u03/fast_recovery_area
mkdir -p /u01/app/oraInventory
# 设置权限
chown -R grid:oinstall /u01/app/19.0.0/grid
chown -R grid:oinstall /u01/app/grid
chown -R oracle:oinstall /u01/app/oracle
chown -R grid:oinstall /u01/app/oraInventory
chmod -R 775 /u01 /u02 /u035. 配置共享存储
选项 1: 使用 ASM
- 配置 ASM 磁盘:bash
# 在所有节点上安装 ASM 依赖包
yum install -y kmod-oracleasm oracleasm-support
配置 ASM
oracleasm configure -i
输入 grid 用户,asmadmin 组
启动 ASM
systemctl enable oracleasm systemctl start oracleasm
创建 ASM 磁盘组
oracleasm createdisk ASMDISK1 /dev/sdb1 oracleasm createdisk ASMDISK2 /dev/sdc1 oracleasm createdisk ASMDISK3 /dev/sdd1
列出 ASM 磁盘
oracleasm listdisks
#### 选项 2: 使用 NFS
1. **配置 NFS 服务器**:
```bash
# 在 NFS 服务器上安装 NFS 服务
yum install -y nfs-utils
# 配置共享目录
cat >> /etc/exports << EOF
/nfs_share/oradata *(rw,sync,no_root_squash)
/nfs_share/fast_recovery_area *(rw,sync,no_root_squash)
EOF
# 启动 NFS 服务
systemctl enable nfs-server
systemctl start nfs-server- 在所有节点上挂载 NFS 共享:bash
# 创建挂载点 mkdir -p /u02/oradata mkdir -p /u03/fast_recovery_area # 挂载 NFS 共享 echo "nfs-server:/nfs_share/oradata /u02/oradata nfs defaults 0 0" >> /etc/fstab echo "nfs-server:/nfs_share/fast_recovery_area /u03/fast_recovery_area nfs defaults 0 0" >> /etc/fstab mount -a
6. 配置环境变量
bash
# 在所有节点上配置 grid 用户环境变量
cat >> /home/grid/.bash_profile << EOF
# Grid Infrastructure 环境变量
export ORACLE_BASE=/u01/app/grid
export ORACLE_HOME=/u01/app/19.0.0/grid
export ORACLE_SID=+ASM1 # 节点 1 使用 +ASM1,节点 2 使用 +ASM2
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
export DISPLAY=:0.0
EOF
# 在所有节点上配置 oracle 用户环境变量
cat >> /home/oracle/.bash_profile << EOF
# Oracle 数据库环境变量
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
export ORACLE_SID=ORCL1 # 节点 1 使用 ORCL1,节点 2 使用 ORCL2
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
export DISPLAY=:0.0
EOF
# 应用环境变量
source /home/grid/.bash_profile
source /home/oracle/.bash_profile7. 安装依赖包
bash
# 在所有节点上安装依赖包
# RHEL 7.x / CentOS 7.x
yum install -y binutils compat-libcap1 compat-libstdc++-33 gcc gcc-c++ glibc glibc-devel ksh libaio libaio-devel libgcc libstdc++ libstdc++-devel libxcb libX11 libXau libXi libXrender libXrender-devel libXtst make sysstat xorg-x11-xauth xorg-x11-utils xorg-x11-apps
# RHEL 8.x / CentOS 8.x / Oracle Linux 8.x
dnf install -y bc binutils compat-libcap1 compat-libstdc++-33 gcc gcc-c++ glibc glibc-devel ksh libaio libaio-devel libgcc libnsl libstdc++ libstdc++-devel libxcb libX11 libXau libXi libXrender libXrender-devel libXtst make nfs-utils net-tools python3 python3-configshell python3-rtslib python3-six smartmontools sysstat targetcli xorg-x11-xauth xorg-x11-utils xorg-x11-appsGrid Infrastructure 安装
1. 下载并解压安装介质
bash
# 在主节点上下载并解压 Grid Infrastructure 安装介质
mkdir -p /tmp/grid
unzip LINUX.X64_193000_grid_home.zip -d /tmp/grid
# 将安装介质复制到其他节点
scp -r /tmp/grid rac2:/tmp/2. 启动 Grid Infrastructure 安装向导
bash
# 在主节点上以 grid 用户启动安装向导
su - grid
cd /tmp/grid
./gridSetup.sh3. 安装向导步骤
- 选择配置选项:选择 "配置 Oracle Grid Infrastructure for a New Cluster",点击 "Next"
- 选择集群类型:选择 "Standalone Cluster",点击 "Next"
- 集群命名:输入集群名称和 SCAN 名称,点击 "Next"
- 添加集群节点:点击 "Add" 添加所有节点,点击 "Next"
- 网络配置:配置公共网络和私有网络,点击 "Next"
- 存储选项:选择 "Use Oracle ASM",点击 "Next"
- ASM 磁盘组:创建 DATA 和 FRA 磁盘组,点击 "Next"
- ASM 密码:设置 ASM SYS 用户密码,点击 "Next"
- 配置软件更新:取消勾选,点击 "Next"
- 选择安装选项:选择 "Install and configure Oracle Grid Infrastructure software",点击 "Next"
- 安装位置:验证安装位置,点击 "Next"
- 操作系统组:验证操作系统组,点击 "Next"
- 配置工具:根据需要配置,点击 "Next"
- 概要:查看安装概要,点击 "Install"
- 安装过程:等待安装完成,根据提示在所有节点上执行配置脚本
- 完成:点击 "Close" 完成安装
Oracle RAC 数据库安装
1. 下载并解压安装介质
bash
# 在主节点上下载并解压 Oracle 数据库安装介质
mkdir -p /tmp/database
unzip LINUX.X64_193000_db_home.zip -d /tmp/database
# 将安装介质复制到其他节点
scp -r /tmp/database rac2:/tmp/2. 启动数据库安装向导
bash
# 在主节点上以 oracle 用户启动安装向导
su - oracle
cd /tmp/database
./runInstaller3. 安装向导步骤
- 配置安全更新:取消勾选,点击 "Next"
- 安装选项:选择 "Install database software only",点击 "Next"
- 数据库安装选项:选择 "Oracle Real Application Clusters database installation",点击 "Next"
- 集群节点:选择所有节点,点击 "Next"
- 数据库版本:选择 "Enterprise Edition",点击 "Next"
- 安装位置:验证安装位置,点击 "Next"
- 操作系统组:验证操作系统组,点击 "Next"
- 概要:查看安装概要,点击 "Install"
- 安装过程:等待安装完成,根据提示在所有节点上执行配置脚本
- 完成:点击 "Close" 完成安装
创建 RAC 数据库
1. 启动 DBCA
bash
# 在主节点上以 oracle 用户启动 DBCA
su - oracle
dbca2. DBCA 步骤
- 欢迎:点击 "Next"
- 创建数据库:选择 "Create Database",点击 "Next"
- 数据库模板:选择 "General Purpose or Transaction Processing",点击 "Next"
- 数据库标识符:
- 全局数据库名:
ORCL - SID 前缀:
ORCL - 勾选 "Create as Container Database"
- 点击 "Next"
- 全局数据库名:
- 管理选项:配置 Enterprise Manager Database Express,点击 "Next"
- 数据库凭据:设置 SYS 和 SYSTEM 用户密码,点击 "Next"
- 存储选项:
- 选择 "Use Oracle-Managed Files"
- 存储位置:
+DATA - 快速恢复区位置:
+FRA - 点击 "Next"
- 数据库选项:根据需要配置,点击 "Next"
- 初始化参数:
- 内存:根据服务器内存调整
- 字符集:选择 "AL32UTF8"
- 点击 "Next"
- 创建选项:选择 "Create Database",点击 "Next"
- 概要:查看概要,点击 "Finish"
- 创建过程:等待数据库创建完成
- 完成:点击 "Close" 完成创建
安装后配置
1. 验证 RAC 状态
bash
# 验证 Grid Infrastructure 状态
crsctl status cluster -all
# 验证 ASM 状态
asmcmd lsdg
# 验证数据库实例状态
sqlplus / as sysdba
SELECT instance_name, status FROM gv$instance;
# 验证服务状态
srvctl status database -d ORCL2. 配置 RAC 服务
bash
# 创建服务
srvctl add service -d ORCL -s ORCL_SERVICE -r ORCL1,ORCL2 -a ORCL1,ORCL2 -P BASIC
# 启动服务
srvctl start service -d ORCL -s ORCL_SERVICE
# 查看服务状态
srvctl status service -d ORCL3. 配置客户端连接
bash
# 编辑 tnsnames.ora 文件
cat >> $ORACLE_HOME/network/admin/tnsnames.ora << EOF
ORCL_SERVICE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac-scan)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORCL_SERVICE)
)
)
EOF4. 配置自动备份
bash
# 创建备份脚本
cat > /home/oracle/backup_rac.sh << EOF
#!/bin/bash
# Oracle RAC 自动备份脚本
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
ORACLE_SID=ORCL1
PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_BASE ORACLE_HOME ORACLE_SID PATH
# 全量备份
rman target / << EOF
BACKUP DATABASE PLUS ARCHIVELOG;
DELETE OBSOLETE;
EXIT;
EOF
EOF
# 设置权限
chmod +x /home/oracle/backup_rac.sh
# 添加到定时任务
crontab -e
# 添加以下内容(每天凌晨 2 点执行备份)
0 2 * * * /home/oracle/backup_rac.sh > /home/oracle/backup.log 2>&15. 安装补丁
bash
# 下载最新补丁
# 从 Oracle 官方网站下载最新的 PSU 或 RU 补丁
# 解压补丁到 /tmp 目录
unzip p34133642_190000_Linux-x86-64.zip -d /tmp
# 安装 Grid Infrastructure 补丁
su - grid
cd /tmp/34133642
$ORACLE_HOME/OPatch/opatch apply
# 安装数据库补丁
su - oracle
cd /tmp/34133642
$ORACLE_HOME/OPatch/opatch apply常见问题与解决方案
1. Grid Infrastructure 安装失败
问题:Grid Infrastructure 安装过程中失败
解决方案:
- 查看日志文件:
/u01/app/oraInventory/logs/installActions*.log - 常见错误包括:网络配置错误、共享存储配置错误、权限问题等
2. ASM 磁盘组创建失败
问题:ASM 磁盘组创建过程中失败
解决方案:
- 检查 ASM 磁盘是否正确配置:
oracleasm listdisks - 检查 ASM 日志:
$ORACLE_BASE/diag/asm/+asm/+ASM1/trace/alert_+ASM1.log - 确保所有节点都能访问 ASM 磁盘
3. 数据库实例无法启动
问题:RAC 数据库实例无法启动
解决方案:
- 查看告警日志:
$ORACLE_BASE/diag/rdbms/orcl/ORCL1/trace/alert_ORCL1.log - 检查集群资源状态:
crsctl status resource -t - 检查 ASM 磁盘组状态:
asmcmd lsdg
4. SCAN IP 无法解析
问题:客户端无法通过 SCAN IP 连接数据库
解决方案:
- 检查 SCAN IP 配置:
cat /etc/hosts - 检查 SCAN 监听器状态:
srvctl status scan_listener - 检查 DNS 配置(如果使用 DNS)
5. 节点无法加入集群
问题:新节点无法加入 RAC 集群
解决方案:
- 检查网络配置:确保公共网络和私有网络配置正确
- 检查防火墙:确保防火墙已关闭
- 检查用户和组:确保用户和组配置一致
- 检查安装目录权限:确保权限配置正确
最佳实践
1. 网络配置最佳实践
- 使用 10Gbps 或更高带宽的私有网络
- 配置多个私有网络以提高可用性
- 使用冗余网络适配器
- 确保公共网络和私有网络隔离
2. 存储配置最佳实践
- 使用 ASM 管理共享存储
- 为 DATA 和 FRA 创建独立的磁盘组
- 使用冗余存储(RAID 1+0 或类似配置)
- 确保足够的存储容量和性能
3. 安装最佳实践
- 使用图形化安装进行首次安装
- 确保所有节点的配置一致
- 安装最新的补丁
- 配置自动备份和监控
4. 安全最佳实践
- 为所有用户设置强密码
- 定期更改密码
- 启用审计功能
- 配置防火墙,只开放必要的端口
5. 性能最佳实践
- 合理配置内存和进程数
- 使用自动内存管理
- 为数据库创建合适的服务
- 定期监控和调优
版本差异
| 版本 | 特性 |
|---|---|
| Oracle 11g RAC | 传统安装方式,支持最多 100 个节点 |
| Oracle 12c RAC | 引入多租户架构,支持最多 64 个节点 |
| Oracle 18c RAC | 简化安装过程,支持自动安装 |
| Oracle 19c RAC | 长期支持版本,增强了自动化和可用性 |
| Oracle 23c RAC | 引入新的安装方式,支持更多节点和更高性能 |
相关命令速查
| 命令 | 用途 |
|---|---|
crsctl status cluster -all | 查看集群状态 |
crsctl status resource -t | 查看集群资源状态 |
srvctl status database -d ORCL | 查看数据库状态 |
srvctl status service -d ORCL | 查看服务状态 |
srvctl status scan_listener | 查看 SCAN 监听器状态 |
asmcmd lsdg | 查看 ASM 磁盘组状态 |
sqlplus / as sysdba | 以 SYS 用户连接数据库 |
SELECT * FROM gv$instance; | 查看所有实例状态 |
$ORACLE_HOME/OPatch/opatch lsinventory | 查看已安装的补丁 |
总结
Oracle RAC 是一个复杂的高可用性解决方案,需要进行详细的系统准备和配置。DBA 应该根据 Oracle 官方文档和最佳实践进行安装,确保 RAC 集群的稳定和安全。安装完成后,还需要进行一系列的配置和优化,如服务配置、自动备份、安装补丁等,以确保 RAC 集群的长期稳定运行。通过遵循本文档的步骤和最佳实践,DBA 可以顺利完成 Oracle RAC 的安装和配置。
