RHEL 6.10 + Oracle 11.2.0.4 RAC 高可用集群部署指南

25 阅读11分钟

RHEL 6.10 + Oracle 11.2.0.4 RAC 高可用集群部署指南

这是一套可完整复现的Oracle 11g RAC双节点集群部署笔记,基于VirtualBox虚拟机环境,所有步骤均亲测有效。无需丰富的Linux或Oracle经验,跟着步骤操作即可成功搭建。如有错误,欢迎批评指正。


一、环境准备

1.1 VirtualBox 配置

打开 VirtualBox,进入「管理 → 主机网络管理器」,创建 Host-Only 网卡,默认网段为 192.168.56.1/24,关闭DHCP服务器,用于集群公网通信。

1.2 软件清单

提前下载以下文件,放在宿主机易访问目录(如 D:\software\):

文件名说明
rhel-server-6.10-x86_64-dvd.isoRHEL 6.10 操作系统镜像
p13390677_112040_Linux-x86-64_1of7.zipOracle 11g 数据库安装包分卷1
p13390677_112040_Linux-x86-64_2of7.zipOracle 11g 数据库安装包分卷2
p13390677_112040_Linux-x86-64_3of7.zipOracle Grid Infrastructure 安装包
rlwrap-0.42-1.el6.x86_64.rpmsqlplus/rman 命令行增强工具(可选)

1.3 网络规划

节点主机名公网IP(Public)虚拟IP(VIP)私有IP(Private)
节点1rac1192.168.56.71192.168.56.8110.10.10.71
节点2rac2192.168.56.72192.168.56.8210.10.10.72
SCANrac-scan192.168.56.83--

规划说明:

  • Public IP:用于客户端连接和管理
  • Private IP:用于集群内部心跳和Cache Fusion,使用独立网段
  • VIP:浮动IP,用于实现故障转移
  • SCAN IP:客户端统一访问入口,集群自动分配后端实例

1.4 磁盘空间规划

磁盘类型大小用途VirtualBox配置
系统盘(rac1)100 GBRHEL操作系统 + Oracle软件SATA控制器,固定大小VMDK
系统盘(rac2)100 GBRHEL操作系统 + Oracle软件SATA控制器,固定大小VMDK
共享磁盘12 GBOCR和Voting DiskSCSI控制器,共享模式VMDK
共享磁盘22 GBOCR和Voting DiskSCSI控制器,共享模式VMDK
共享磁盘32 GBOCR和Voting DiskSCSI控制器,共享模式VMDK
共享磁盘4(DATA)20 GB数据库数据文件SCSI控制器,共享模式VMDK
共享磁盘5(ARCH)10 GB归档日志和闪回区SCSI控制器,共享模式VMDK

二、创建第一台虚拟机并安装操作系统(rac1)

2.1 创建虚拟机 rac1

  1. 打开 VirtualBox,点击「新建」,名称设为rac1,选择相应的操作系统镜像文件
  2. 内存分配4096MB,创建100GB固定大小VMDK虚拟磁盘
  3. 启动顺序:硬盘优先,移除软驱

2.2 创建并添加共享磁盘

  1. 创建磁盘并设置为共享模式
  2. 将共享磁盘附加到rac1:
    • 选中rac1 → 设置 → 存储 → 添加SCSI控制器
    • 选中SCSI控制器 → 添加虚拟硬盘 → 使用现有的虚拟硬盘,依次添加上述5个VMDK文件

2.3 配置 rac1 的网络

  • 网卡1:启用,连接方式「仅主机(Host-Only)网络」(公网)
  • 网卡2:启用,连接方式「内部网络」,名称rac-private(私网)
  • 网卡3:启用,连接方式「NAT」(上网)

2.4 安装 RHEL 6.10

  1. 启动rac1,加载RHEL 6.10 ISO镜像
  2. 语言选择English,时区Asia/Shanghai
  3. 软件选择:带GUI的服务器
  4. 手动分区(100GB系统盘):
    挂载点大小文件系统核心用途
    /boot1GBext4系统引导文件、内核镜像
    swap6GBswap虚拟内存换页空间
    /tmp10GBext4Oracle安装/运行临时文件
    /var15GBext4系统日志、集群日志
    /u0150GBext4Oracle软件安装目录
    /剩余空间ext4系统根目录
  5. 网络配置:
    • eth0(公网):静态IP 192.168.56.71/24
    • eth1(私网):静态IP 10.10.10.71/24
    • eth2(NAT):DHCP自动获取
    • 主机名:rac1
  6. 设置root密码为oracle,关闭Kdump,完成安装并重启

2.5 节点1系统基础配置(root用户执行)

2.5.1 网络配置优化
# 停止并禁用NetworkManager
service NetworkManager stop
chkconfig NetworkManager off

# 配置DNS
cat > /etc/resolv.conf <<EOF
nameserver 223.5.5.5
nameserver 223.6.6.6
domain localdomain
search localdomain
EOF

# 统一配置三块网卡
sed -i '/IPADDR=/d;/PREFIX=/d;/BOOTPROTO=/d;/DEFROUTE=/d;/PEERDNS=/d;/PEERROUTES=/d;/IPV4_FAILURE_FATAL=/d' /etc/sysconfig/network-scripts/ifcfg-eth*
sed -i 's/NM_CONTROLLED=yes/NM_CONTROLLED=no/g' /etc/sysconfig/network-scripts/ifcfg-eth*

# eth2(NAT上网)
cat >> /etc/sysconfig/network-scripts/ifcfg-eth2 <<EOF
BOOTPROTO=dhcp
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
EOF

# eth0(公网)
cat >> /etc/sysconfig/network-scripts/ifcfg-eth0 <<EOF
BOOTPROTO=none
IPADDR=192.168.56.71
PREFIX=24
IPV4_FAILURE_FATAL=no
EOF

# eth1(私网)
cat >> /etc/sysconfig/network-scripts/ifcfg-eth1 <<EOF
BOOTPROTO=none
IPADDR=10.10.10.71
PREFIX=24
IPV4_FAILURE_FATAL=no
EOF

# 重启网络
service network restart
2.5.2 配置hosts解析
cat >> /etc/hosts <<EOF
# public
192.168.56.71 rac1
192.168.56.72 rac2
# private
10.10.10.71 rac1-priv
10.10.10.72 rac2-priv
# virtual IP
192.168.56.81 rac1-vip
192.168.56.82 rac2-vip
# scan IP
192.168.56.83 rac-scan
EOF
2.5.3 关闭防火墙与SELinux
# 关闭防火墙
service iptables stop
chkconfig iptables off
service ip6tables stop
chkconfig ip6tables off

# 关闭SELinux
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

# 验证
getenforce  # 应输出Disabled
2.5.4 配置本地YUM源
mkdir /mnt/cdrom
mount /dev/cdrom /mnt/cdrom

cat > /etc/yum.repos.d/local.repo <<EOF
[local]
name=Local RHEL 6.10 DVD
baseurl=file:///mnt/cdrom
enabled=1
gpgcheck=0
EOF

yum clean all && yum makecache
yum install -y net-tools vim wget unzip bc
2.5.5 创建Oracle用户与组
groupadd -g 1000 oinstall
groupadd -g 1020 asmadmin
groupadd -g 1021 asmdba
groupadd -g 1022 asmoper
groupadd -g 1031 dba
groupadd -g 1032 oper

useradd -u 1100 -g oinstall -G asmadmin,asmdba,asmoper,dba grid
useradd -u 1101 -g oinstall -G dba,asmdba,oper oracle

echo "oracle" | passwd --stdin grid
echo "oracle" | passwd --stdin oracle
2.5.6 创建软件安装目录
mkdir -p /u01/app/11.2.0/grid
mkdir -p /u01/app/grid
mkdir -p /u01/app/oracle/product/11.2.0/dbhome_1
mkdir -p /u01/app/oraInventory
mkdir -p /soft

chown -R grid:oinstall /u01
chown -R oracle:oinstall /u01/app/oracle
chown -R grid:oinstall /u01/app/oraInventory
chmod -R 775 /u01
2.5.7 配置内核参数(4GB内存优化)
cat >> /etc/sysctl.conf <<EOF
# Oracle 11g RAC 核心内核参数
kernel.shmmax = 2147483648
kernel.shmall = 2097152
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 6815744
fs.aio-max-nr = 1048576
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
kernel.panic_on_oops = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_syncookies = 1
EOF

# 注释掉原有重复的内核参数
vi /etc/sysctl.conf

# 使配置生效
sysctl -p
2.5.8 调整/dev/shm大小
sed -i 's/^tmpfs.*/tmpfs                   /dev/shm                tmpfs   defaults,size=2048M        0 0/' /etc/fstab
mount -o remount /dev/shm
df -h /dev/shm  # 验证大小为2GB
2.5.9 配置用户资源限制
sed -i 's/^* soft nproc 1024/*          soft    nproc     16384/' /etc/security/limits.d/90-nproc.conf

cat >> /etc/security/limits.conf <<EOF
# grid用户资源限制
grid soft nproc 2047
grid hard nproc 16384
grid soft nofile 1024
grid hard nofile 65536
grid soft stack 10240
grid hard stack 32768

# oracle用户资源限制
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240
oracle hard stack 32768
EOF
2.5.10 安装依赖包
yum install -y binutils compat-libcap1 compat-libstdc++-33 \
elfutils-libelf-devel gcc gcc-c++ glibc glibc-devel ksh libaio \
libaio-devel libgcc libstdc++ libstdc++-devel libXext libXtst \
libX11 libXau libXi make sysstat unixODBC unixODBC-devel libaio.i686 libaio-devel.i686
2.5.11 配置用户环境变量

grid用户

su - grid
cat >> ~/.bash_profile <<EOF
export ORACLE_BASE=/u01/app/grid
export ORACLE_HOME=/u01/app/11.2.0/grid
export ORACLE_SID=+ASM1
export PATH=\$ORACLE_HOME/bin:\$PATH
export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/lib:/usr/lib
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
umask 022
EOF
source ~/.bash_profile

oracle用户

su - oracle
cat >> ~/.bash_profile <<EOF
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=\$ORACLE_BASE/product/11.2.0/dbhome_1
export ORACLE_SID=orcl1
export PATH=\$ORACLE_HOME/bin:\$PATH
export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/lib:/usr/lib
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
umask 022
EOF
source ~/.bash_profile
2.5.12 配置共享磁盘UDEV规则
# 使用LsiLogic SAS控制器,直接按设备名绑定
cat > /etc/udev/rules.d/99-oracle-asmdevices.rules <<EOF
SUBSYSTEM=="block", KERNEL=="sdb", SYMLINK+="asm-ocr1", OWNER="grid", GROUP="asmadmin", MODE="0660"
SUBSYSTEM=="block", KERNEL=="sdc", SYMLINK+="asm-ocr2", OWNER="grid", GROUP="asmadmin", MODE="0660"
SUBSYSTEM=="block", KERNEL=="sdd", SYMLINK+="asm-ocr3", OWNER="grid", GROUP="asmadmin", MODE="0660"
SUBSYSTEM=="block", KERNEL=="sde", SYMLINK+="asm-data", OWNER="grid", GROUP="asmadmin", MODE="0660"
SUBSYSTEM=="block", KERNEL=="sdf", SYMLINK+="asm-arch", OWNER="grid", GROUP="asmadmin", MODE="0660"
EOF

# 重新加载UDEV规则
start_udev

# 验证权限
ls -l /dev/asm*
ls -l /dev/sd*
2.5.13 关闭透明大页
# 临时关闭
echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled
echo never > /sys/kernel/mm/redhat_transparent_hugepage/defrag

# 永久关闭
sed -i 's/^kernel.*/& transparent_hugepage=never/' /etc/grub.conf

# 开机自动执行
chmod +x /etc/rc.d/rc.local
echo "echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled" >> /etc/rc.local
echo "echo never > /sys/kernel/mm/redhat_transparent_hugepage/defrag" >> /etc/rc.local

reboot
2.5.14 配置CTSS集群时间同步

Oracle RAC集群CTSS服务会在系统无NTP服务时自动接管时间同步,彻底解决虚拟机时间漂移问题。

# 设置系统时区
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

# 彻底卸载NTP服务
yum remove -y ntp ntpdate

# 清理NTP残留
rm -f /etc/ntp.conf /etc/sysconfig/ntpd /var/lib/ntp/drift
sed -i '/ntpdate/d;/hwclock/d;/service ntpd/d' /etc/rc.local

三、克隆虚拟机并配置节点2(rac2)

3.1 克隆 rac1

  1. 在rac1上执行清理操作:
rm -f /etc/udev/rules.d/70-persistent-net.rules
sed -i '/^HWADDR=/d' /etc/sysconfig/network-scripts/ifcfg-eth[0-2]
shutdown -h now
  1. VirtualBox中右键rac1 → 复制,新名称rac2,勾选「为所有网卡重新生成MAC地址」,选择「完整克隆」

3.2 配置 rac2 差异化参数

  1. 启动rac2,以root用户登录
  2. 修改主机名和IP:
hostname rac2
sed -i 's/HOSTNAME=rac1/HOSTNAME=rac2/g' /etc/sysconfig/network
sed -i 's/192.168.56.71/192.168.56.72/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/10.10.10.71/10.10.10.72/g' /etc/sysconfig/network-scripts/ifcfg-eth1

service network restart
  1. 修改用户环境变量:
su - grid
sed -i 's/ORACLE_SID=+ASM1/ORACLE_SID=+ASM2/' ~/.bash_profile
source ~/.bash_profile

su - oracle
sed -i 's/ORACLE_SID=orcl1/ORACLE_SID=orcl2/' ~/.bash_profile
source ~/.bash_profile
  1. 验证磁盘权限:
ls -l /dev/sd*
ls -l /dev/asm*
  1. 双节点时间对齐:
# 在rac2上执行,以rac1为基准对齐时间
date -s "$(ssh root@rac1 date)" && hwclock -w

# 验证双节点时间一致
date ; ssh rac1 date
  1. 重启rac2使所有配置生效:
reboot

3.3 配置双节点SSH互信

在rac1上执行

grid用户互信
su - grid
ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa
ssh-copy-id rac1
ssh-copy-id rac2
ssh-copy-id rac1-priv
ssh-copy-id rac2-priv
scp -r ~/.ssh rac2:~/

# 测试
ssh rac1 date; ssh rac2 date; ssh rac1-priv date; ssh rac2-priv date
oracle用户互信
su - oracle
ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa
ssh-copy-id rac1
ssh-copy-id rac2
ssh-copy-id rac1-priv
ssh-copy-id rac2-priv
scp -r ~/.ssh rac2:~/

# 测试
ssh rac1 date; ssh rac2 date; ssh rac1-priv date; ssh rac2-priv date
root用户互信
ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa
ssh-copy-id rac1
ssh-copy-id rac2
ssh-copy-id rac1-priv
ssh-copy-id rac2-priv
scp -r ~/.ssh rac2:~/

# 测试
ssh rac1 date; ssh rac2 date; ssh rac1-priv date; ssh rac2-priv date

四、上传和解压Oracle软件(仅在rac1执行)

mkdir -p /soft/database /soft/grid
chown -R oracle:oinstall /soft/database
chown -R grid:oinstall /soft/grid
chmod 775 /soft/database /soft/grid

4.1 解压Database软件

su - oracle
cd /soft
unzip -q p13390677_112040_Linux-x86-64_1of7.zip -d database
unzip -q p13390677_112040_Linux-x86-64_2of7.zip -d database

4.2 解压Grid Infrastructure

su - grid
cd /soft
unzip -q p13390677_112040_Linux-x86-64_3of7.zip -d grid

# 安装cvuqdisk包
su root
cd /soft/grid/grid/rpm
rpm -ivh cvuqdisk-1.0.9-1.rpm

# 同步到rac2
scp cvuqdisk-1.0.9-1.rpm rac2:/tmp/
ssh rac2 "rpm -ivh /tmp/cvuqdisk-1.0.9-1.rpm"

五、安装Oracle Grid Infrastructure

5.1 启动安装程序

本地开启X Server(如VcXsrv),在rac1以grid用户执行:

su - grid
export DISPLAY=192.168.56.1:0.0
cd /soft/grid/grid
./runInstaller

5.2 图形安装关键步骤

  1. 软件更新:选择「Skip software updates」
  2. 配置选项:选择「Install and Configure Grid Infrastructure for a Cluster」
  3. 安装选项:选择「Advanced Installation」
  4. 集群配置:集群名称rac-cluster,SCAN名称rac-scan,端口1521,取消GNS
  5. 节点信息:添加rac1(VIP:rac1-vip)和rac2(VIP:rac2-vip),测试SSH连通性
  6. 网络接口:eth0为Public,eth1为Private
  7. 存储选项:选择「Oracle ASM」
  8. 创建ASM磁盘组:名称OCR_VOTE,冗余External,发现路径/dev/asm*,选择asm-ocr1、asm-ocr2、asm-ocr3
  9. ASM口令:统一设为oracle
  10. 操作系统组:保持默认
  11. 安装位置:确认/u01/app/grid/u01/app/11.2.0/grid
  12. 安装前检查:忽略DNS相关警告,运行fixup脚本修复问题
  13. 执行root脚本:先在rac1执行两个脚本,再在rac2执行两个脚本
  14. 完成安装,点击Close

5.3 验证Grid安装

# 查看集群资源状态
crsctl stat res -t

# 验证OCR状态
ocrcheck

# 验证Voting Disk状态
crsctl query css votedisk

# 验证CTSS时间同步(必须为Active模式)
crsctl check ctss

# 验证ASM磁盘组
su - grid -c "asmcmd lsdg"

5.4 创建其他ASM磁盘组

su - grid
export DISPLAY=192.168.56.1:0.0
asmca
  • 创建DATA磁盘组:名称DATA,冗余External,选择/dev/asm-data
  • 创建ARCH磁盘组:名称ARCH,冗余External,选择/dev/asm-arch
  • 验证三个磁盘组均为Mounted状态,退出asmca

六、安装Oracle Database软件

6.1 启动安装程序

在rac1以oracle用户执行:

su - oracle
export DISPLAY=192.168.56.1:0.0
cd /soft/database/database
./runInstaller

6.2 图形安装关键步骤

  1. 配置安全更新:取消勾选
  2. 下载软件更新:选择「Skip software updates」
  3. 配置选项:选择「Install database software only」
  4. 系统类:选择「Oracle Real Application Clusters database installation」
  5. 节点选择:全选rac1和rac2,测试SSH连通性
  6. 数据库版本:选择「Enterprise Edition」
  7. 安装位置:确认/u01/app/oracle/u01/app/oracle/product/11.2.0/dbhome_1
  8. 操作系统组:保持默认
  9. 安装前检查:通过所有检查
  10. 执行root脚本:在rac1和rac2分别执行/u01/app/oracle/product/11.2.0/dbhome_1/root.sh
  11. 完成安装,点击Close

6.3 设置Oracle二进制文件权限

# 以root用户在两个节点执行
/u01/app/11.2.0/grid/bin/setasmgidwrap -o /u01/app/oracle/product/11.2.0/dbhome_1/bin/oracle

# 验证权限
ls -l /u01/app/oracle/product/11.2.0/dbhome_1/bin/oracle
# 预期输出:-rwxr-s--x. 1 oracle asmadmin ... oracle

七、使用DBCA创建RAC数据库

7.1 启动DBCA

在rac1以oracle用户执行:

su - oracle
export DISPLAY=192.168.56.1:0.0
dbca

7.2 图形创建关键步骤

  1. 欢迎页:勾选「Oracle Real Application Clusters (RAC) database」
  2. 操作选择:选择「Create a Database」
  3. 数据库模板:选择「General Purpose or Transaction Processing」
  4. 数据库标识:
    • 配置类型:Admin-Managed
    • 节点选择:全选rac1、rac2
    • 全局数据库名:orcl
    • SID前缀:orcl
  5. 管理选项:取消勾选所有EM和自动维护任务
  6. 数据库凭证:所有账户统一密码oracle
  7. 存储位置:
    • 存储类型:Automatic Storage Management (ASM)
    • 勾选「Use Oracle-Managed Files」
    • 数据库区域:+DATA
  8. 恢复配置:
    • 勾选「Specify Fast Recovery Area」,位置+ARCH
    • 勾选「Enable Archiving」
  9. 数据库内容:仅保留Oracle Text和Sample Schemas
  10. 初始化参数:
    • 内存:勾选Typical,启用AMM自动内存管理
    • 字符集:选择「Use Unicode (AL32UTF8)」
    • 连接模式:Dedicated Server Mode
  11. 创建选项:仅勾选「Create Database」
  12. 确认配置无误,点击Finish开始建库

7.3 验证数据库

sqlplus / as sysdba

-- 查看数据库状态
select name, open_mode from v$database;

-- 查看所有实例状态
select instance_name, status from gv$instance;
exit

7.4 安装rlwrap工具(可选)

# 在rac1执行
cd /soft
yum localinstall -y rlwrap-0.42-1.el6.x86_64.rpm

# 配置别名
su - oracle
echo "alias sqlplus='rlwrap sqlplus'" >> ~/.bashrc
echo "alias rman='rlwrap rman'" >> ~/.bashrc
source ~/.bashrc

su - grid
echo "alias sqlplus='rlwrap sqlplus'" >> ~/.bashrc
source ~/.bashrc

# 同步到rac2
scp rlwrap-0.42-1.el6.x86_64.rpm rac2:/tmp/
ssh rac2 "yum localinstall -y /tmp/rlwrap-0.42-1.el6.x86_64.rpm"
ssh oracle@rac2 "echo 'alias sqlplus=\"rlwrap sqlplus\"' >> ~/.bashrc; echo 'alias rman=\"rlwrap rman\"' >> ~/.bashrc; source ~/.bashrc"
ssh grid@rac2 "echo 'alias sqlplus=\"rlwrap sqlplus\"' >> ~/.bashrc; source ~/.bashrc"

八、集群管理与维护命令

8.1 核心管理命令

操作命令执行用户
查看集群资源状态crsctl stat res -tgrid
启动整个集群crsctl start crsroot
停止整个集群crsctl stop crsroot
启动数据库srvctl start database -d orcloracle
停止数据库srvctl stop database -d orcloracle
查看数据库状态srvctl status database -d orcloracle
查看ASM磁盘组asmcmd lsdggrid
查看监听状态lsnrctl statusgrid
查看节点列表olsnodes -ngrid
查看组件版本select comp_name, version from dba_registry;oracle
编译无效对象@?/rdbms/admin/utlrp.sqloracle

8.2 常用维护技巧

  • 关闭顺序:先停止数据库 → 再停止集群:srvctl stop database -d orclcrsctl stop crs
  • 启动顺序:先启动集群 → 集群自动启动ASM和数据库:crsctl start crs
  • 核心日志路径:
    • Grid日志:$ORACLE_HOME/log/<hostname>/
    • 数据库告警日志:$ORACLE_BASE/diag/rdbms/orcl/<instance_name>/trace/alert_<instance_name>.log
  • RAC参数修改:使用alter system set parameter=value sid='*' scope=both;在所有实例生效