最近更新时间:2026-06-22 11:51:03
ESSD云硬盘的多重挂载(Multi-Attach)功能,是指允许将单个云硬盘同时挂载给同一可用区(Availability Zone)内支持NVMe协议的多台云服务器实例使用,实现多台云服务器实例间的数据共享与并发读写。
场景需求:在Oracle RAC、SAP HANA等核心数据库或关键应用中,需避免单点故障,要求主节点故障时业务能快速恢复。
解决方案:通过NVMe云盘的多重挂载能力,单块云盘可同时挂载到同一可用区的多台云服务器,数据实时共享。结合NVMe协议的Persistent Reservation (PR) 权限控制,可精确控制各节点的读写权限。
PR(PersistentReservation)属于NVMe协议的一部分,PR可精确地控制某个云盘的读写权限,从而确保计算端按照预期写入数据。更多信息,请参见Nvme PR锁命令说明及示例。
故障切换流程:
主库故障,业务中断
备库通过NVMe PR命令,立即剥夺主库写入权限
备库接管云盘,恢复业务(毫秒级切换)
场景需求:在容器化或微服务架构中,多个实例需共享同一份配置、模型或数据集,避免数据复制带来的成本和延迟。
解决方案:将包含公共数据的NVMe云盘同时挂载到多个计算节点,所有节点均可并发读取,实现一写多读或数据共享。
典型场景:
容器镜像共享:同一系统镜像供多个容器实例加载
机器学习训练:多GPU节点共享同一份训练数据集,加速模型训练
分布式缓存加速:为数据湖等系统提供高速缓存层
需要特别注意的是,多重挂载通常需要配合集群文件系统(如OCFS2、GFS2)使用,以确保多节点间数据一致性,常规的ext4/xfs等单机文件系统不适用于该场景。
多重挂载功能本身不收费,使用多重挂载功能过程中涉及云硬盘、云主机实例等相关资源会产生费用。
使用多重挂载功能存在如下限制条件:
资源 | 限制说明 |
|---|---|
云硬盘 |
|
区域与可用区 | 云盘与云服务器实例必须处于同一个地域(Region)和可用区(AvailabilityZone) 内测阶段仅支持华东1(上海)- 可用区 A |
云主机实例 | 实例类型需要支持NVMe。 您可以调用DescribeInstances接口,根据返回参数中的support_nvme参数判断实例类型是否支持NVMe。 内测阶段仅支持X9 |
镜像 | 镜像需要包含NVMe驱动。 仅部分标准镜像包含NVMe驱动,您可以调用DescribeImages接口,根据返回参数中的NVMeSupport参数判断镜像是否支持NVMe。 |
登录云硬盘控制台,点击“新建”。
在配置页面选择目标云盘,并勾选“开启”多重挂载。
完成创建和支付流程。
在云服务器控制台,找到需要挂载共享云盘的实例。
点击“更多”-“云盘与镜像”-“挂载云硬盘”。
在弹窗内的列表页中找到刚刚创建的共享云盘并选中。
点击确定后完成挂载。
重复步骤二的操作,将云盘挂载到其他云服务器。
挂载完成后,您可以在实例详情页或云硬盘列表页查看挂载信息。
在所有挂载共享云盘的云服务器上,必须部署集群文件系统(如 OCFS2, GFS2 等)或集群管理软件(如 Oracle ASM),并确保文件系统仅在其中一台服务器上进行格式化,以协同管理并发读写、防止数据冲突。
本文以两台主机节点为例进行阐述,前置条件已经将一块nvme云盘数据盘多挂载到两台台虚拟机
主机名称 | IP | 镜像 | 云盘挂载状态 |
|---|---|---|---|
多挂载机器1 | 120.92.149.123 | ubuntu22.04 | |
多挂载机器2 | 120.92.216.47 | ubuntu22.04 |
全新的盘建立集群文件系统
1.1 安装ocfs2-tools工具(所有节点)
sudo apt update sudo apt install ocfs2-tools1.2 设置hostname(所有节点)
登录主机1,设置hostname为server1
sudo hostnamectl set-hostname server1
登录主机2,设置hostname为server2
sudo hostnamectl set-hostname server21.3 创建集群配置文件(所有节点)
在所有实例上执行一下命令,打开集群文件系统配置文件
sudo vim /etc/ocfs2/cluster.conf在打开的配置文件输入以下内容:
node:
ip_port = 7777
ip_address = 172.31.7.133
number = 0
name = server1
cluster = ocfs2
node:
ip_port = 7777
ip_address = 172.31.4.135
number = 1
name = server2
cluster = ocfs2
cluster:
node_count = 2
name = ocfs2ip_address:实例的私有IP地址,请根据实际情况进行替换。
number:节点序号从0开始。
name:第i步设置的实例hostname,请根据实际情况进行替换。
node_count:云主机实例的个数,请根据实际情况进行替换。
如果您的实际环境不止两台云主机实例,请继续添加node部分,并修改node_count的值。
因此,以上示例表示,涉及2台云主机实例,第一台实例的hostname为server1,实例的私网IP为172.31.7.133;第二台实例的hostname为server2,实例的私网IP为172.31.4.135
1.4 注册集群,启动集群服务(所有节点)
在所有云主机实例上执行以下命令,注册集群
sudo o2cb register-cluster ocfs2查看注册结果、查看节点列表
ls -la /sys/kernel/config/cluster/ocfs2/node/
sudo o2cb list-nodes ocfs2在所有云主机实例上执行以下命令,启动集群文件系统相关服务
sudo systemctl start o2cb
sudo systemctl status o2cb1.5 格式化ocfs2文件系统(仅在任意一个节点执行)
mkfs.ocfs2 --cluster-stack=o2cb --cluster-name=ocfs2 /dev/nvme0n11.6 挂载ocfs2文件系统(所有节点)
mkdir /mnt/ocfs2
mount -t ocfs2 /dev/nvme0n1 /mnt/ocfs2主机1
主机2
1.7 验证ocfs2文件系统(所有节点)
进入挂载目录,在server1执行以下命令创建一个文件,例如test.txt
root@vm172-31-7-133:~# hostname
server1
root@vm172-31-7-133:~# cd /mnt/ocfs2/
root@vm172-31-7-133:/mnt/ocfs2# touch test.txt
root@vm172-31-7-133:/mnt/ocfs2# echo 111 > test.txt
root@vm172-31-7-133:/mnt/ocfs2# 登录另一台server2,执行以下命令,查看test.txt文件是否存在
root@vm172-31-4-135:/mnt/ocfs2# hostname
server2
root@vm172-31-4-135:/mnt/ocfs2# cd /mnt/ocfs2/
root@vm172-31-4-135:/mnt/ocfs2# ls
lost+found test.txt
root@vm172-31-4-135:/mnt/ocfs2# cat test.txt
111
root@vm172-31-4-135:/mnt/ocfs2# 如果test.txt文件存在,则表示集群文件系统服务正常。