原标题:企业云端共享存储新路径
(本文阅读时间:6分钟)
云原生是一个美好的希望,但对于传统企业大量的传统应用,Lift & Shift(直接迁移)才是初期上云的最快、业务影响最小的方式,然后再逐步做面对云架构的优化。
Lift & Shift需要云端和企业本地类似的IT架构,而在传统架构广泛使用的共享磁盘一直很难在云端实现。虽然云端有SMB、NFS等共享空间的方式,但很多块级应用例如Oracle RAC等无法用共享空间。尽管也有一些第三方的虚拟存储控制器解决方案,但性能和稳定性都很难满足要求,而且有额外的成本。
近期微软推出的Azure共享磁盘预览版,解决了云端共享磁盘的问题。今天我们一起聊聊企业如何在云端实现磁盘共享,满足常见应用场景。

企业共享存储方式
传统IT人员一般都了解,共享存储有两种方式:NAS和共享磁盘(通常很多人把SAN等同共享磁盘,其实并不一样,SAN只是一个存储拓扑,而非底层机制)。但很多人并不清楚两者间的区别。
NAS底层协议是NFS(Linux &Unix)或CIFS(Windows)(其实以前还有Apple Talk),对于服务器,体现为一个网络共享目录,形式为ipfolder,通常用作文件共享。如果多个人要访问同一个文件时,由NAS控制器(可以理解为一个服务器)来决定谁拥有删改的权利以及处理顺序,但是缺点是只能存放非结构化数据,对于数据库等应用无法满足。
共享磁盘的底层协议是SCSI,在操作系统层体现为一块磁盘(Windows磁盘管理器或Linux fdisk)。使用前需要分区并创建文件系统。共享磁盘可以用作存放结构化数据,例如数据库等,所以在Cluster级应用通常需要共享磁盘,NAS没法支持。
但是共享磁盘在使用上有很大的限制,由于展现给服务器是磁盘,没有一个控制器管理,这时候多台服务器对共享磁盘操作时就会出现冲突,此时就需要一个仲裁机制,这就是Cluster出现的原因,并不简单的把磁盘连接到多台服务器就可以。
传统IT环境里,一般会使用心跳盘、串口、网络等作为仲裁机制,在公有云上,没有物理串口、组播等,很难去满足仲裁条件,这就造成公有云上迟迟无法实现共享磁盘。但随着云仲裁等技术的成熟,公有云终于迈出了这一步。
微软推出Azure共享磁盘预览版
Azure CTO Mark Russinovich在2018 Tech Ready介绍Ultra SSD时,提到Shared Disk(共享磁盘)是Ultra SSD的一个重要功能,可以挂载到多台VM,支持一写多读。
经过漫长的等待,微软终于在今年发布了Azure共享磁盘预览版。预览版支持Premium SSD,且支持多读多写(使用 SCSI PR 建立仲裁并读取/写入磁盘)磁盘参数多了一项maxShares,指定同一块磁盘可以最多挂载到几台VM。对不同容量磁盘,maxShares最大值不一样:

当一块磁盘属于多台VM时,IOPS和带宽之和不超过该磁盘的上限。当然在预览阶段,共享磁盘会有如下限制:
- 目前暂适用于高级SSD
- 目前暂在美国中西部地区得到支持
- 共享磁盘的所有虚拟机都必须部署在同一接近放置组中
- 只能在数据磁盘上启用,不能在OS磁盘上启用
- 只有基本磁盘可用于某些版本的Windows服务器故障转移群集
- 只读主机缓存不适用于具有maxShares>1的高级SSD
- 可用性集和虚拟机规模集只能与设置为1FaultDomainCount一起使用
- Azure备份和Azure站点恢复支持暂不可用
Azure 共享磁盘应用场
景
Azure共享磁盘作为Azure 托管磁盘服务的一项新功能,支持将托管磁盘附加到多个虚拟机(Vm),可将现有的群集应用程序部署或迁移到Azure,为当今在群集环境中运行的应用程序提供了一致的体验。这意味着当前利用SCSI持久保留(PR)的任何应用程序都可以使用这组大家熟知的命令将群集中的节点注册到磁盘。同时应用程序可以从一系列可支持的访问模式中选择一个或多个节点读取或写入磁盘。这些应用程序可以部署在高可用的配置中,并且拥有Azure磁盘服务的持久性保证。
故障转移场景
Azure共享磁盘的“一写多读”可应用于应用程序的故障转移,下图示意了双节点群集数据库应用示例。

如上图,流程为:
1.Azure VM 1和Azure VM 2上运行的群集应用程序可以进行磁盘读取或写入。
2.Azure VM 1上的应用程序实例在磁盘的独占的预留空间写入数据。
3.空间预留在Azure磁盘上强制执行,数据库现在可以写入专门的磁盘。此时,Azure VM 2上的应用程序实例无法写入任何数据。
4.如果Azure VM 1上的应用程序实例出现故障,Azure VM 2上的实例现在可以启动数据库故障转移并接管磁盘。
5.原预留空间不再接受来自Azure VM 1上的应用程序的写入,仅接受来自 Azure VM 2上的应用程序的数据写入。
6.群集应用程序完成数据库故障转移并支持Azure VM 2的服务请求。
机器学习的模型训练场景
下图示意了另一个常见的场景:包含多节点的工作负载,这些节点从磁盘读取数据以运行并行作业,例如机器学习模型训练。

如上图,流程为:
1.应用程序将所有虚拟机注册到磁盘。
2.Azure VM 1上的应用程序实例在磁盘独占空间写入数据,同时打开来自其他虚拟机的读取。
3.磁盘空间预留在Azure磁盘上强制执行。
4.群集中所有节点都可以从磁盘读取数据。但是只有一个节点可以代表群集将结果写回数据。
总结
Azure共享磁盘提供基于多个Azure虚机以及容器的高性能块存储的共享访问。共享块存储通常可用于群集数据库、并行文件系统、持久性容器和机器学习等应用程序。该服务使用起来和本地数据中心的共享盘阵等方式基本没区别,同时简化了用户上云迁移系统架构更改的难度。实际上手教程,感兴趣的小伙伴,请大家扫描下方Azure共享磁盘上手教程二维码查看微软官方文档,或留言与我们交流探讨。
责任编辑: