当前位置:首页>Linux>Step-by-Step: 在 Linux 上使用 VMware 安装 Oracle 26ai RAC 数据库

Step-by-Step: 在 Linux 上使用 VMware 安装 Oracle 26ai RAC 数据库

  • 2026-09-10 17:16:43
Step-by-Step: 在 Linux 上使用 VMware 安装 Oracle 26ai RAC 数据库
关于号主,姚远:
  • Oracle ACE(Oracle和MySQL数据库方向)

  • 华为云最有价值专家

  • 《MySQL 8.0运维与优化》的作者

  • 拥有数十项数据库认证

  • 曾任IBM公司数据库部门经理

  • 20+年DBA经验,服务2万+客户

  • 精通C和Java,发明两项计算机专利

  • 两次获得国家部级奖

概念架构

Oracle RAC 的概念架构图如下:构建私有 RAC 测试环境最大的障碍是需要 Shared Storage。传统上,这需要昂贵的 SAN 硬件。然而,通过在 VMware ESXi 中配置具有 Multi-writer flag 的虚拟磁盘,我们可以模拟专业的存储环境。这种 Poor man's RAC 方案允许在不需要专用物理存储硬件的情况下构建全功能集群。

接下来的章节将逐步演示这一过程。

测试环境

我们将在 ESXi server (192.168.82.27) 上部署两个运行 Oracle Linux 9 的虚拟机。

IP Address 分配表

Hostname
Public IP
Private IP
Virtual IP (VIP)
SCAN IP
AI261
192.168.110.86
192.168.80.86
192.168.110.28
192.168.110.88
AI262
192.168.110.87
192.168.80.87
192.168.110.29
(Shared)

创建 4 个 20GB 的磁盘作为 RAC 的共享 ASM 磁盘。

在第一个节点安装 OL9

将 Oracle Linux 9 的 ISO 镜像上传到 ESXi 数据存储,然后使用该 ISO 文件启动并安装 Linux。

操作系统加固

安装操作系统后,设置 Time Zone 并禁用冲突的服务:

timedatectl set-timezone Asia/Shanghai# 禁用 Firewall 和 SELinuxsystemctl stop firewalldsystemctl disable firewalldsed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/configsetenforce 0# 禁用 Avahi daemon 以防止 Multicast 冲突systemctl stop avahi-daemon.socketsystemctl stop avahi-daemonsystemctl disable avahi-daemon.socketsystemctl disable avahi-daemon

网络配置

使用 nmcli 配置 Public Interface。请注意,Private Interconnect 将在后续步骤或通过第二个网卡处理。

nmcli connection modify ens192 ipv4.addresses 192.168.110.86/24nmcli connection modify ens192 ipv4.gateway 192.168.110.1nmcli connection modify ens192 ipv4.dns 192.168.88.10nmcli connection modify ens192 ipv4.method manualnmcli connection up ens192

在两个节点的 /etc/hosts 中配置 IP:

192.168.110.86  AI261192.168.110.87  AI262192.168.80.86   AI261-priv192.168.80.87   AI262-priv192.168.110.28  AI261-vip192.168.110.29  AI262-vip192.168.110.88  AI26-SCAN

Oracle Pre-installation 与用户创建

利用 Oracle Pre-installation RPM 自动配置 Kernel Parameters 并创建 oracle 用户。之后,手动创建 grid 用户及 ASM 相关的 Groups。

dnf -y install oracle-ai-database-preinstall-26ai# 创建 ASM groups 和 Grid 用户groupadd -g 54331 asmadmingroupadd -g 54332 asmdbagroupadd -g 54333 asmoperuseradd -u 54322 -g oinstall -G asmadmin,asmdba,asmoper,dba grid# 更新 Oracle 用户组usermod -a -G asmdba oracle# 为 grid 用户应用 limitscp /etc/security/limits.d/oracle-ai-database-preinstall-26ai.conf /etc/security/limits.d/grid.confsed -i 's/oracle/grid/g' /etc/security/limits.d/grid.conf

环境变量与目录结构

在 .bash_profile 文件中为 grid 用户配置环境变量:

export ORACLE_BASE=/u01/app/gridexport ORACLE_HOME=/u01/app/26ai/gridexport ORACLE_SID=+ASM1export PATH=$ORACLE_HOME/bin:$PATH

为 oracle 用户配置:

export ORACLE_BASE=/u01/app/oracleexport ORACLE_HOME=/u01/app/oracle/product/26ai/dbhome_1export ORACLE_SID=AI261export PATH=$ORACLE_HOME/bin:$PATH

创建目录:

mkdir -p /u01/app/26ai/gridmkdir -p /u01/app/gridmkdir -p /u01/app/oracle/product/26ai/dbhome_1chown grid:oinstall /u01 -Rchown oracle:oinstall /u01/app/oracle -R

创建第二个节点

克隆第一个节点 (AI261) 以创建 AI262。克隆后修改以下内容:

  1. 修改 IP 地址。

  2. 修改 Hostname。

  3. 添加与 Node 1 共享的磁盘。

  4. 修改 oracle 和 grid 用户的 .bash_profile,将 ORACLE_SID 环境变量从 AI261 修改为 AI262。

时间同步策略

在 RAC 环境中,Clock Drift 是导致 Cluster Eviction 的主要原因。我们采用两层同步方案。

Host-to-Guest 同步

确保第一个节点配置为从 Host 接收时间。

  1. vSphere Client:右键点击 VM -> Edit Settings -> VM Options -> VMware Tools。

  2. Time:勾选 Synchronize guest time with host。

Peer-to-Peer Chrony 配置

为了确保节点间的毫秒级精度,将 AI261 配置为 Local Time Master,AI262 作为其 Client。

在 AI261 的 /etc/chrony.conf 中:

local stratum 10allow 192.168.110.0/24

在 AI262 的 /etc/chrony.conf 中,注释掉以 pool 开头的行,并添加以下内容:

server AI261 iburst

验证同步状态:

[root@AI262 ~]# systemctl restart chronyd[root@AI262 ~]# chronyc makestep200 OK[root@AI262 ~]# chronyc sources -vMS Name/IP address         Stratum Poll Reach LastRx Last sample===============================================================================^* AI261                        10   6    17     22  +5654ns[  +32ms] +/-   75us

这证实了 AI262 不仅连接到了 Master Node,而且成功同步了时钟。Offset 降至仅 5654 纳秒(几乎为零)。

共享存储配置

Multi-Writer 方案

首先添加第二个 SCSI Controller。所有共享磁盘都将位于此控制器上。

我们将使用 Multi-writer flag 来共享磁盘(VMware 最佳实践),因此 SCSI Bus Sharing 应保持为 None。SCSI Controller 应设置为 VMware Paravirtual 以获得最佳性能。

添加 20GB 新硬盘。

将其添加到新创建的 SCSI Controller 上,将磁盘设置为 Thick provisioned, eagerly zeroed 和 Independent – persistent,并将 Sharing 设置为 Multi-writer。

在第一个节点上添加另外三个 20GB 磁盘,保持与第一个磁盘相同的设置。

接着,在其他节点上通过选择 Existing Hard Disk 添加这四个 VMDK,并将其添加到新创建的 SCSI Controller 中。

启动服务器并检查磁盘:

[root@AI261 ~]# ll /dev/sd*brw-rw---- 1 root disk 8,  0 Feb  3 15:01 /dev/sdabrw-rw---- 1 root disk 8,  1 Feb  3 15:01 /dev/sda1brw-rw---- 1 root disk 8,  2 Feb  3 15:01 /dev/sda2brw-rw---- 1 root disk 8, 16 Feb  3 15:01 /dev/sdbbrw-rw---- 1 root disk 8, 32 Feb  3 15:01 /dev/sdcbrw-rw---- 1 root disk 8, 48 Feb  3 15:01 /dev/sddbrw-rw---- 1 root disk 8, 64 Feb  3 15:01 /dev/sde[root@AI261 ~]# lsblkNAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTSsda           8:0    0  160G  0 disk├─sda1        8:1    0    1G  0 part /boot└─sda2        8:2    0  159G  0 part  ├─ol-root 252:0    0   70G  0 lvm  /  ├─ol-swap 252:1    0  7.9G  0 lvm  [SWAP]  └─ol-home 252:2    0 81.1G  0 lvm  /homesdb           8:16   0   20G  0 disksdc           8:32   0   20G  0 disksdd           8:48   0   20G  0 disksde           8:64   0   20G  0 disksr0          11:0    1 1024M  0 rom

磁盘分区

在第一个节点上对磁盘进行分区:

for disk in sdb sdc sdd sde; dofdisk /dev/${disk} <<EOFnp1wEOFdone

验证新建的分区

[root@AI261 ~]# ll /dev/sd*brw-rw---- 1 root disk 8,  0 Feb  3 15:01 /dev/sdabrw-rw---- 1 root disk 8,  1 Feb  3 15:01 /dev/sda1brw-rw---- 1 root disk 8,  2 Feb  3 15:01 /dev/sda2brw-rw---- 1 root disk 8, 16 Feb  3 15:03 /dev/sdbbrw-rw---- 1 root disk 8, 17 Feb  3 15:03 /dev/sdb1brw-rw---- 1 root disk 8, 32 Feb  3 15:03 /dev/sdcbrw-rw---- 1 root disk 8, 33 Feb  3 15:03 /dev/sdc1brw-rw---- 1 root disk 8, 48 Feb  3 15:03 /dev/sddbrw-rw---- 1 root disk 8, 49 Feb  3 15:03 /dev/sdd1brw-rw---- 1 root disk 8, 64 Feb  3 15:03 /dev/sdebrw-rw---- 1 root disk 8, 65 Feb  3 15:03 /dev/sde1

在 VM 的 .vmx 文件中,确保设置了 disk.enableuuid = "TRUE"。

ASM 设备的 Udev Rules

为了确保 grid 用户在重启后仍能访问磁盘,我们使用 scsi_id 识别磁盘并通过 udev 分配权限。在 Oracle 26ai 中,Group 已从 asmadmin 更改为 asmdba。

识别 UUID:

/usr/lib/udev/scsi_id -g -u -d /dev/sdb1

创建 /etc/udev/rules.d/99-oracle-asm.rules:

KERNEL=="sd?1", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/$parent", RESULT=="36000c2947fc68265290c9ff1a9c58777", OWNER="grid", GROUP="asmdba", MODE="0660"KERNEL=="sd?1", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/$parent", RESULT=="36000c29a2b5bdb6aa0df4285c524b83b", OWNER="grid", GROUP="asmdba", MODE="0660"KERNEL=="sd?1", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/$parent", RESULT=="36000c29a121dc5634ba13ecc45ce9691", OWNER="grid", GROUP="asmdba", MODE="0660"KERNEL=="sd?1", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/$parent", RESULT=="36000c2933fbeffeeae7b086679d59069", OWNER="grid", GROUP="asmdba", MODE="0660"

应用并验证 Rules:

# Reload the udev rulesudevadm control --reload-rules# Trigger the rules for all block devicesudevadm trigger --type=devices --action=add# Verify ownership and permissions# ls -al /dev/sd[b-e]1brw-rw---- 1 grid asmdba 8, 17 Feb  3 15:07 /dev/sdb1brw-rw---- 1 grid asmdba 8, 33 Feb  3 15:07 /dev/sdc1brw-rw---- 1 grid asmdba 8, 49 Feb  3 15:07 /dev/sdd1brw-rw---- 1 grid asmdba 8, 65 Feb  3 15:07 /dev/sde1

安装Grid Infrastructure

将 Grid 软件移动到 Grid Home 并解压,随后启动安装向导:

[root@AI261 ~]# mv LINUX.X64_2326100_grid_home.zip /u01/app/26ai/grid/[root@AI261 ~]# su - grid[grid@AI261 ~]$ cd$ORACLE_HOME[grid@AI261 grid]$ unzip -q LINUX.X64_2326100_grid_home.zip[grid@AI261 grid]$ ./gridSetup.shLaunching Oracle Grid Infrastructure Setup Wizard...

选择 Cluster Name 和 SCAN Name,确保 SCAN Name 是可解析的。

添加第二个节点到列表中

配置节点间的 Passwordless SSH connectivity

定义network configuration.

点击 "Fix & check Again"

注意:我们使用 /etc/hosts 并且已经验证过手动同步,那么 SCAN 和 NTP 的检查失败可以忽略。

安装数据库软件

以 oracle 用户登录安装数据库软件:

[oracle@AI261 ~]$ cd$ORACLE_HOME[oracle@AI261 dbhome_1]$ unzip -q ~/LINUX.X64_2326100_db_home.zip[oracle@AI261 dbhome_1]$ ./runInstaller

创建数据库

使用 DBCA 创建数据库。

在 Prerequisite Checks 页面,点击 Ignore All 并继续。

欢迎关注我的公众号

入群,或者需要我帮您免费解读Oracle AWR报告,请加我的微信

最新文章

随机文章