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.??.??) 上部署两个运行 Oracle Linux 9 的虚拟机。

IP Address 分配表

Hostname Public IP Private IP Virtual IP (VIP) SCAN IP
AI261 192.168.999.86 192.168.888.86 192.168.999.28 192.168.999.88
AI262 192.168.999.87 192.168.888.87 192.168.999.29 (Shared)

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

在第一个节点安装 OL9

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

操作系统加固

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

复制代码
timedatectl set-timezone Asia/Shanghai

# 禁用 Firewall 和 SELinux
systemctl stop firewalld
systemctl disable firewalld
sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
setenforce 0

# 禁用 Avahi daemon 以防止 Multicast 冲突
systemctl stop avahi-daemon.socket
systemctl stop avahi-daemon
systemctl disable avahi-daemon.socket
systemctl disable avahi-daemon

网络配置

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

复制代码
nmcli connection modify ens192 ipv4.addresses 192.168.999.86/24
nmcli connection modify ens192 ipv4.gateway 192.168.999.1
nmcli connection modify ens192 ipv4.dns 192.168.888.10
nmcli connection modify ens192 ipv4.method manual
nmcli connection up ens192

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

复制代码
192.168.999.86  AI261
192.168.999.87  AI262
192.168.888.86   AI261-priv
192.168.888.87   AI262-priv
192.168.999.28  AI261-vip
192.168.999.29  AI262-vip
192.168.999.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 asmadmin
groupadd -g 54332 asmdba
groupadd -g 54333 asmoper
useradd -u 54322 -g oinstall -G asmadmin,asmdba,asmoper,dba grid

# 更新 Oracle 用户组
usermod -a -G asmdba oracle

# 为 grid 用户应用 limits
cp /etc/security/limits.d/oracle-ai-database-preinstall-26ai.conf /etc/security/limits.d/grid.conf
sed -i 's/oracle/grid/g' /etc/security/limits.d/grid.conf

环境变量与目录结构

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

复制代码
export ORACLE_BASE=/u01/app/grid
export ORACLE_HOME=/u01/app/26ai/grid
export ORACLE_SID=+ASM1
export PATH=$ORACLE_HOME/bin:$PATH

为 oracle 用户配置:

复制代码
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/26ai/dbhome_1
export ORACLE_SID=AI261
export PATH=$ORACLE_HOME/bin:$PATH

创建目录:

复制代码
mkdir -p /u01/app/26ai/grid
mkdir -p /u01/app/grid
mkdir -p /u01/app/oracle/product/26ai/dbhome_1
chown grid:oinstall /u01 -R
chown 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 10
allow 192.168.999.0/24

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

复制代码
server AI261 iburst

验证同步状态:

复制代码
[root@AI262 ~]# systemctl restart chronyd
[root@AI262 ~]# chronyc makestep
200 OK
[root@AI262 ~]# chronyc sources -v

MS 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/sda
brw-rw---- 1 root disk 8,  1 Feb  3 15:01 /dev/sda1
brw-rw---- 1 root disk 8,  2 Feb  3 15:01 /dev/sda2
brw-rw---- 1 root disk 8, 16 Feb  3 15:01 /dev/sdb
brw-rw---- 1 root disk 8, 32 Feb  3 15:01 /dev/sdc
brw-rw---- 1 root disk 8, 48 Feb  3 15:01 /dev/sdd
brw-rw---- 1 root disk 8, 64 Feb  3 15:01 /dev/sde
[root@AI261 ~]# lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda           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  /home
sdb           8:16   0   20G  0 disk
sdc           8:32   0   20G  0 disk
sdd           8:48   0   20G  0 disk
sde           8:64   0   20G  0 disk
sr0          11:0    1 1024M  0 rom

磁盘分区

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

复制代码
for disk in sdb sdc sdd sde; do
fdisk /dev/${disk} <<EOF
n
p
1


w
EOF
done

验证新建的分区

复制代码
[root@AI261 ~]# ll /dev/sd*
brw-rw---- 1 root disk 8,  0 Feb  3 15:01 /dev/sda
brw-rw---- 1 root disk 8,  1 Feb  3 15:01 /dev/sda1
brw-rw---- 1 root disk 8,  2 Feb  3 15:01 /dev/sda2
brw-rw---- 1 root disk 8, 16 Feb  3 15:03 /dev/sdb
brw-rw---- 1 root disk 8, 17 Feb  3 15:03 /dev/sdb1
brw-rw---- 1 root disk 8, 32 Feb  3 15:03 /dev/sdc
brw-rw---- 1 root disk 8, 33 Feb  3 15:03 /dev/sdc1
brw-rw---- 1 root disk 8, 48 Feb  3 15:03 /dev/sdd
brw-rw---- 1 root disk 8, 49 Feb  3 15:03 /dev/sdd1
brw-rw---- 1 root disk 8, 64 Feb  3 15:03 /dev/sde
brw-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 rules
udevadm control --reload-rules

# Trigger the rules for all block devices
udevadm trigger --type=devices --action=add

# Verify ownership and permissions
# ls -al /dev/sd[b-e]1
brw-rw---- 1 grid asmdba 8, 17 Feb  3 15:07 /dev/sdb1
brw-rw---- 1 grid asmdba 8, 33 Feb  3 15:07 /dev/sdc1
brw-rw---- 1 grid asmdba 8, 49 Feb  3 15:07 /dev/sdd1
brw-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.sh
Launching 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 并继续。

相关推荐
进击切图仔2 小时前
基于 linux 20.04 构建 ros1 noetic 开发环境 -离线版本
linux·运维·服务器
starcat20022 小时前
ESXi安装直连显卡的KDE-NEON
linux
EmbedLinX2 小时前
Linux 之设备驱动
linux·服务器·c语言
naruto_lnq2 小时前
如何为开源Python项目做贡献?
jvm·数据库·python
vortex52 小时前
Alpine Linux syslinux 启动加固(密码保护)
linux·服务器·网络
晚风吹长发2 小时前
初步了解Linux中的线程同步问题及线程安全和死锁与生产消费者模型
linux·运维·服务器·开发语言·数据结构·安全
一只专注api接口开发的技术猿2 小时前
淘宝商品详情API的流量控制与熔断机制:保障系统稳定性的后端设计
大数据·数据结构·数据库·架构·node.js
学嵌入式的小杨同学2 小时前
【Linux 封神之路】进程进阶实战:fork/vfork/exec 函数族 + 作业实现(含僵尸进程解决方案)
linux·开发语言·vscode·嵌入式硬件·vim·软件工程·ux
少云清2 小时前
【金融项目实战】4_接口测试 _数据准备和清理
数据库·金融项目实战