本文推选自爱可生开源社区,原作者:赵黎明。本文约 1800 字,预计阅读需要 8 分钟。
正文如下:
背景
最近,某项目需要搭建一套 Oracle RAC 环境用于测试。以往常用 OpenNebula 平台申请虚拟机就可以了,但 Oracle RAC 涉及到共享磁盘的使用,配置起来会比较麻烦,因此考虑采用其他方式来实现。
本文分享将如何采用 VirtualBox + Vagrant 来实现快速部署 Oracle RAC 测试环境。
软件介绍
VirtualBox 是一个轻量级虚拟化引擎(类似 VMWare),可以在宿主机上创建隔离的虚拟机环境,模拟完整的计算机系统(CPU/内存/磁盘/网络)。 Vagarant 是一个自动化环境编排工具(类似 docker-compose),通过声明式配置文件(Vagrantfile)自动化管理虚拟机生命周期,实现快速创建、销毁虚拟机环境。
当前使用版本:VirtualBox:7.1.10[1],Vagarant:2.4.7[2]。
为何不用 Docker?
有以下几个层面的考虑:
物理存储层面
Oracle RAC 依赖 ASM(自动存储管理),要求直接访问裸磁盘设备(如/dev/sdb),而 Docker Volume 本质是目录挂载,无法模拟块设备,即便使用 --privileged
权限,也无法突破 cgroups 对设备管理的限制。
网络架构层面
首先,Oracle RAC 集群的网络需求包括:专用心跳网络(高速互联),虚拟IP(VIP)漂移和 SCAN(Single Client Access Name)解析。
其次,Docker 存在一些缺陷:Overlay 网络有性能损耗(影响 Cache Fusion),VIP 切换依赖第三方工具(如 Keepalived),且与 Docker 网络栈冲突。
内核与资源隔离层面
Oracle RAC 集群要求节点间需严格资源隔离(CPU/Memory 锁机制),而在 Docker 中,cgroups 虽可隔离资源,但共享内核导致无法安装 Oracle 内核模块(如 oracleasm),信号量等 IPC 资源也可能会存在冲突。
VirtualBox 方案的优势
真虚拟机级隔离:每个节点有独立内核 原生块设备支持:通过 VirtualBox 共享磁盘(VBoxManage 创建) 网络自由配置:Host-Only 网络实现零损耗通信
配置 Vagrant
1. 初始化 Vagrant 环境
以管理员身份运行 cmd,在 Vagrant 安装目录(C:\Program Files\Vagrant
)中执行初始化命令,生成 vagrantfile,如原来就有现成的 vagrantfile,也可直接替换新生成的文件。

2. 创建 Vagrant 配置文件
可直接编辑由初始化命令生成的 vagrantfile(默认在 Vagrant 的安装目录)。
以下内容已移除注释项,只列出生效的配置,并做相应说明。
Vagrant.configure("2") do |config| // 指定配置 2 台虚拟机
config.vm.box = "CentOS7u2" 指定使用的操作系统的 box 镜像名(需在 Vagrant 环境中进行添加)
config.disksize.size = "20GB" 指定虚拟机根目录磁盘的大小(需安装 vagrant-disksize 插件)
# RAC 节点 1 配置
config.vm.define :rac1 do |rac1| // 定义一个名为 rac1 的虚拟机,这个块内的所有配置都与其对应
rac1.vm.provider "virtualbox"do |v| // 指定为 VirtualBox 的专有配置
v.customize ["modifyvm", :id, "--name", "rac1", "--memory", "2048"] // 配置 rac1 为 2G 内存
end
rac1.vm.box = "CentOS7u2" 指定 rac1 使用的操作系统镜像名(与 config.vm.box 内容保持一致)
rac1.vm.hostname = "rac1" 指定虚拟机内部的主机名为 rac1 (集群节点必须通过主机名相互解析)
rac1.vm.network :public_network, ip: "192.168.56.11", :adapter => 2 // 配置第二块网卡为桥接/公共网络并指定 IP
rac1.vm.network :private_network, ip: "10.10.10.11", :adapter => 3 // 配置第三块网卡为私有网络并指定 IP
end
# RAC 节点 2 配置
config.vm.define :rac2 do |rac2|
rac2.vm.provider "virtualbox"do |v|
v.customize ["modifyvm", :id, "--name", "rac2", "--memory", "2048"]
end
rac2.vm.box = "CentOS7u2"
rac2.vm.hostname = "rac2"
rac2.vm.network :public_network, ip: "192.168.56.12", :adapter => 2
rac2.vm.network :private_network, ip: "10.10.10.12", :adapter => 3
end
end
3. 安装 vagrant-disksize 插件
使用 box 镜像创建的虚拟机,根目录默认只有 9.77G ,当安装到 GI 软件时,会提示磁盘空间不足,使用该插件后,可在 vagrantfile 文件中,通过增加参数:config.disksize.size
来指定 “/” 目录的默认大小,建议至少配置 20-30G。

4. 下载 box 镜像并添加到 Vagrant 环境中

可选择 bento/centos-7.2 的 box,可以看到,除了 VirtualBox 以外,该 box 也支持 VMWare。
也可用本地环境已有的 box 文件(同样地,需放在 Vagrant 的安装目录),注意在添加 box 时,要与之前在 vagrantfile 中配置的名称保持一致,此处名为 CentOS7u2。

5. 创建共享磁盘
使用 VBoxManage 命令即可,如果提示未找到可执行的命令,需要修改 Path 系统变量,添加 VirtualBox 的路径。

如果在命令中不加 --variant Fixed
参数,默认会采用动态分配磁盘,将无法设置“可共享”的属性。
VBoxManage createhd --filename "D:\VirtualBox VMs\ocr1.vdi" --size 1024 --format VDI --variant Fixed
VBoxManage modifyhd "D:\VirtualBox VMs\ocr1.vdi" --type shareable
VBoxManage createhd --filename "D:\VirtualBox VMs\ocr2.vdi" --size 1024 --format VDI --variant Fixed
VBoxManage modifyhd "D:\VirtualBox VMs\ocr2.vdi" --type shareable
VBoxManage createhd --filename "D:\VirtualBox VMs\ocr3.vdi" --size 1024 --format VDI --variant Fixed
VBoxManage modifyhd "D:\VirtualBox VMs\ocr3.vdi" --type shareable
VBoxManage createhd --filename "D:\VirtualBox VMs\data1.vdi" --size 2048 --format VDI --variant Fixed
VBoxManage modifyhd "D:\VirtualBox VMs\data1.vdi" --type shareable
VBoxManage createhd --filename "D:\VirtualBox VMs\data2.vdi" --size 2048 --format VDI --variant Fixed
VBoxManage modifyhd "D:\VirtualBox VMs\data2.vdi" --type shareable
VBoxManage createhd --filename "D:\VirtualBox VMs\data3.vdi" --size 2048 --format VDI --variant Fixed
VBoxManage modifyhd "D:\VirtualBox VMs\data3.vdi" --type shareable
命令执行完毕后,就可在 VirtualBox 的虚拟硬盘中看到刚才创建的共享盘。

6. 创建并启动虚拟机
在 vagrantfile 中配置好 2 个虚拟机后,就可以直接通过 vagrant up
命令来创建并启动虚拟机了。



创建完成后,会多出两个以太网适配器,分别对应第二、第三块网卡。

注意:如果无法访问虚拟机,可将第二块网卡从桥接模式修改为 Host-Only 模式。

调整后的网卡显示如下。

7. 登录虚拟机
可在 cmd 窗口中用 Vagrant 提供的命令直接登录虚拟机(默认用 vagrant 用户连接到虚拟机,密码同用户名)。

也可用其他 Shell 工具(如:Git Bash)连到虚拟机。

至此,可用于搭建 Oracle RAC 集群的基础环境已创建完毕,接下来就可以按 Oracle 的官方手册进行 GI/DB 软件以及 ASM/DB 实例的部署了,不再赘述。
总结
本篇文章主要介绍了如何用 VirtualBox + Vagrant 快速部署适用于 Oracle RAC 集群的虚拟机环境,与单机版虚拟机不同,RAC 环境要注意多块网卡的配置,以及共享磁盘的创建和绑定(使用 ASMLib 或 UDEV 进行绑定)
此外,还要注意虚拟机资源配置不可过低,否则在安装部署过程中可能会出现各种问题。由于本次单节点仅给了 2G 内存,在实际安装测试中,踩了不少坑,走了一些弯路。
VirtualBox 下载: https://www.virtualbox.org/wiki/Downloads
[2]Vagarant 安装: https://developer.hashicorp.com/vagrant/install
[3]box 镜像下载: https://portal.cloud.hashicorp.com/vagrant/discover
文章至此。




