如何在 Azure 中的多个虚拟机 运行 Linux 之间共享数据磁盘?
How to share Data disk among many virtual machines running Linux in Azure?
我有我的虚拟机 运行 Linux。我是通过 new "Resource manager" 创建的。然后我给它加了数据盘。
然后我创建了新的虚拟机。我希望它使用连接到第一个的相同数据磁盘(至少在只读模式下)。
当我尝试 "attach existing disk" 到这台新机器时,我得到这个错误:
Failed to attach existing disk 'DISK-NAME.vhd' to the virtual machine 'MACHINE-NAME'. Error: Failed to acquire lease while creating disk 'DISK-NAME.vhd' using blob with URI https://BLOB-URI-disk1.vhd. Blob is already in use.
如何将另一台机器正在使用的现有数据磁盘附加到我当前的机器?
很简单,你不能。
Azure 中的一个磁盘一次只能连接到一个 VM。为了将它附加到另一个 VM,您需要断开它与第一个 VM 的连接。
如果您需要在多台机器之间共享数据,您可以使用提供 SMB 2.1 和 SMB 3.0 的 Azure 文件共享。大多数现代 Linux 版本都可以非常无缝地连接到它。
如果您需要块存储,即共享一个实际磁盘,您需要启动一个单独的 VM 并使用像 iSCSI(或 NFS)这样的协议在多台机器之间共享该磁盘。
也许 Microsoft Azure 的 "StorSimple" 解决方案是一个可行的方法?我将其描述为 Azure 上的 SAN。
今天没测试,不过应该可以连接几个虚拟机,共享文件。
您可以在文档中找到更多信息:
Azure StorSimple
根据您在迈克尔回答下的评论,稍微扩展迈克尔的回答:
如果目标是在 VM 由于某种原因宕机时提供数据访问,并且数据位于附加的磁盘上,那么您可以 将磁盘与宕机的磁盘分离VM 并将其重新附加到另一个 VM(分离中断租约,重新附加创建新租约)。但请注意:这是一个耗时的过程 - 每个操作可能需要一两分钟。但是你当然可以做到,而且你可以通过编程来做到。
关于磁盘复制:是的,Azure 磁盘是三次复制的(如果启用地理复制,则复制 6 次)。但从逻辑上讲,它是一个磁盘;它被复制是为了 耐用性 ,而不是为了让您附加到不同的副本。
Michael 提到了 Azure 文件服务。也许不清楚那是什么,但是......文件服务没有涉及虚拟机 - 它是一个持久存储 SMB 服务,具有与您的 VM 无关的自己的 SLA。您可以从多个 VM 和 read/write 文件连接到它,就像连接本地连接的磁盘一样(这似乎是您要解决的问题)。
关于跨 VM 的数据复制:如果您选择走这条路,并自己制作物理副本,则完全取决于您的操作方式 - 没有 "best way." 但这是数据库引擎的构建目的(你可以想象它们有多么复杂,处理复制、日志记录、错误等)。
我有我的虚拟机 运行 Linux。我是通过 new "Resource manager" 创建的。然后我给它加了数据盘。
然后我创建了新的虚拟机。我希望它使用连接到第一个的相同数据磁盘(至少在只读模式下)。
当我尝试 "attach existing disk" 到这台新机器时,我得到这个错误:
Failed to attach existing disk 'DISK-NAME.vhd' to the virtual machine 'MACHINE-NAME'. Error: Failed to acquire lease while creating disk 'DISK-NAME.vhd' using blob with URI https://BLOB-URI-disk1.vhd. Blob is already in use.
如何将另一台机器正在使用的现有数据磁盘附加到我当前的机器?
很简单,你不能。
Azure 中的一个磁盘一次只能连接到一个 VM。为了将它附加到另一个 VM,您需要断开它与第一个 VM 的连接。
如果您需要在多台机器之间共享数据,您可以使用提供 SMB 2.1 和 SMB 3.0 的 Azure 文件共享。大多数现代 Linux 版本都可以非常无缝地连接到它。
如果您需要块存储,即共享一个实际磁盘,您需要启动一个单独的 VM 并使用像 iSCSI(或 NFS)这样的协议在多台机器之间共享该磁盘。
也许 Microsoft Azure 的 "StorSimple" 解决方案是一个可行的方法?我将其描述为 Azure 上的 SAN。
今天没测试,不过应该可以连接几个虚拟机,共享文件。
您可以在文档中找到更多信息: Azure StorSimple
根据您在迈克尔回答下的评论,稍微扩展迈克尔的回答:
如果目标是在 VM 由于某种原因宕机时提供数据访问,并且数据位于附加的磁盘上,那么您可以 将磁盘与宕机的磁盘分离VM 并将其重新附加到另一个 VM(分离中断租约,重新附加创建新租约)。但请注意:这是一个耗时的过程 - 每个操作可能需要一两分钟。但是你当然可以做到,而且你可以通过编程来做到。
关于磁盘复制:是的,Azure 磁盘是三次复制的(如果启用地理复制,则复制 6 次)。但从逻辑上讲,它是一个磁盘;它被复制是为了 耐用性 ,而不是为了让您附加到不同的副本。
Michael 提到了 Azure 文件服务。也许不清楚那是什么,但是......文件服务没有涉及虚拟机 - 它是一个持久存储 SMB 服务,具有与您的 VM 无关的自己的 SLA。您可以从多个 VM 和 read/write 文件连接到它,就像连接本地连接的磁盘一样(这似乎是您要解决的问题)。
关于跨 VM 的数据复制:如果您选择走这条路,并自己制作物理副本,则完全取决于您的操作方式 - 没有 "best way." 但这是数据库引擎的构建目的(你可以想象它们有多么复杂,处理复制、日志记录、错误等)。