在 Google Compute Engine 虚拟机之间共享永久性磁盘

2024-04-20

来自谷歌的文档:

可以将永久磁盘附加到多个实例。但是,如果您将永久磁盘附加到多个实例,则所有实例都必须以只读模式附加永久磁盘。无法以读写模式将永久磁盘附加到多个实例。

如果您以读写模式附加永久磁盘,然后尝试将该磁盘附加到后续实例,Google Compute Engine 将返回错误。

所以,我需要有一个共享持久磁盘作为我所有计算引擎的前端,好,你如何在这个共享磁盘上写入?

我的猜测(我希望)是读/写永久磁盘只能附加 1 个计算引擎但同一个磁盘可以只读方式分享给其他人虚拟机,是吗?

假设我有 2 个计算引擎虚拟机和 2 个永久性磁盘, 这个流程可能吗?

  • 计算1读/写磁盘1和只读磁盘2
  • 计算2读/写磁盘2和只读磁盘1

Answer recommended by Google Cloud /collectives/google-cloud Collective

更新:截至 2020 年 6 月 16 日可用

As per 另一个答案 https://stackoverflow.com/a/58890617/3618671作者:Matthew Lenz,其功能为创建多写入器永久磁盘 https://cloud.google.com/sdk/gcloud/reference/beta/compute/disks/create#--multi-writer可用,但仍处于 alpha 状态(尽管它被记录为处于 beta 轨道)并且需要特殊的每个项目启用。

Note: 这个 GitHub 问题 https://github.com/GoogleCloudPlatform/magic-modules/pull/3911指出该功能仍处于 alpha 阶段,尽管它被标记为 beta 版。如果您想尽早使用此功能,您可以通过 Cloud Console 提交反馈,为您的项目请求该功能,但不保证一定会启用。


假设您的项目有权使用此功能(或者该功能变为公共访问),请注意它有一些警告:

--multi-writer

以多写入器模式创建磁盘,以便可以将其附加到多个虚拟机的读写访问权限。只能与区域 SSD 永久磁盘一起使用。多写入模式下的磁盘不支持调整大小和快照操作。

您可以通过以下方式使用它:

$ gcloud beta compute disks create DISK_NAME --multi-writer [...]

请注意注意事项:

  • 仅限区域 SSD 永久性磁盘
  • 没有调整磁盘大小
  • 没有快照

如果您不接受这些权衡,请参阅原始答案(如下),其中有一长串建议的存储替代方案,用于在多个 GCE VM 之间共享数据。


原始答案(2020-06-16之前有效)

不,这是不可能的,因为您引用的文档 https://cloud.google.com/compute/docs/disks/#flexibility在撰写本文时说(自更新后):

但是,如果您将永久磁盘附加到多个实例,则所有实例都必须以只读模式附加永久磁盘。

此后,文档已重新整理;新文档位于不同的网址 https://cloud.google.com/compute/docs/disks/add-persistent-disk#use_multi_instances但内容相同:

您可以将非根永久磁盘以只读模式附加到多个虚拟机实例,这样您就可以在多个实例之间共享静态数据。从一个永久磁盘在多个实例之间共享静态数据比将数据复制到单个实例的唯一磁盘更便宜。

如果将永久磁盘附加到多个实例,则所有这些实例都必须以只读模式附加永久磁盘。无法以读写模式将永久磁盘附加到多个实例。如果您需要在多个实例之间共享动态存储空间,请将您的实例连接到云储存 https://cloud.google.com/compute/docs/disks/gcs-buckets or 创建网络文件服务器 https://cloud.google.com/solutions/filers-on-compute-engine.

如果您有一个永久磁盘,其中包含要在多个实例之间共享的数据,请将其与任何读写实例分离,然后以只读模式将其附加到一个或多个实例。

这意味着您不能让一个实例具有写访问权限,而另一个实例具有只读访问权限。

如果您想在它们之间共享数据,则需要使用永久磁盘以外的其他工具。以下是一些可能的解决方案。

您可以使用以下任意一项托管/托管服务:

  • Google Cloud Filestore https://cloud.google.com/filestore/ — perhaps closest to what you're looking for, as it provides an NFSv3 file system
    • 您还可以使用GCP 上的 Elastifile https://www.elastifile.com/google-cloud/ as a 全面管理的服务 https://www.elastifile.com/early-access-gcp/;注意GCP 于 2019 年 7 月收购了 Elastifile https://cloud.google.com/blog/topics/inside-google-cloud/expanding-our-enterprise-file-storage-offerings-to-simplify-the-management-and-scaling-of-data
  • 谷歌云数据存储 https://cloud.google.com/datastore/
  • 谷歌云存储 https://cloud.google.com/storage/,您可以通过 GCS API(JSON 或 XML)使用它,也可以使用gcsfuse https://github.com/googlecloudplatform/gcsfuse作为块设备
  • 谷歌云大表 https://cloud.google.com/bigtable/
  • 谷歌云SQL https://cloud.google.com/sql/

或者,您可以运行你自己的:

  • 自行管理或第三方管理文件服务器 https://cloud.google.com/solutions/filers-on-compute-engine解决方案,包括 NetApp 和 Panzura
  • 自我管理Elastifile存储部署 https://console.cloud.google.com/marketplace/details/elastifile/elastifile-storage(对于完全托管,请参阅上一节的链接)
  • 数据库(无论是 SQL 还是 NoSQL)
  • 分布式文件系统,例如Ceph https://en.wikipedia.org/wiki/Ceph_(software), GlusterFS https://en.wikipedia.org/wiki/GlusterFS, OrangeFS https://en.wikipedia.org/wiki/OrangeFS, ZFS https://en.wikipedia.org/wiki/ZFS, etc.
  • 文件服务器,例如NFS https://help.ubuntu.com/14.04/serverguide/network-file-system.html or SAMBA https://help.ubuntu.com/community/How%20to%20Create%20a%20Network%20Share%20Via%20Samba%20Via%20CLI%20%28Command-line%20interface/Linux%20Terminal%29%20-%20Uncomplicated,%20Simple%20and%20Brief%20Way!
  • 单个VM作为数据存储节点,并使用sshfs http://fuse.sourceforge.net/sshfs.html从想要访问该数据的其他虚拟机创建 FUSE 安装
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Google Compute Engine 虚拟机之间共享永久性磁盘 的相关文章

随机推荐

  • 如何收到 SalesForce 中新潜在客户的通知? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我希望在 Salesforce 中创建新潜在客户时收到通知 Salesforce 中是否有类似 web
  • 自动将 Google 表格中单元格内容大写的脚本?

    我有一个电子表格 可以输入股票代码 我希望它们始终全部大写 无论它们如何输入 这似乎需要一些脚本 因为除非存在该列的第二个副本 否则无法使用函数来执行此操作 这是不可接受的 我有一个有效的解决方案 但有一个关键问题 代码如下 functio
  • ASP.NET (MVC) 提供图像

    我正在创建一个 MVC 3 应用程序 尽管同样适用于其他技术 例如 ASP NET Forms 并且只是想知道从代码提供图像而不是使用直接虚拟路径 像往常一样 是否可行 性能方面 我的想法是改进提供文件的通用方法 应用安全检查 基于路由值的
  • 将特定位置的安全号码更改为 X

    我是新来的 将数字替换为特定位置的某些字符 我有这组号码 123 45 6789 但我只需要显示这样的 XXX XX 6789 但我只需要更改不包括 破折号 的数字 下面是我的示例代码 var mainStr view ssn text v
  • 如何获取计算样式以及该规则的来源? [复制]

    这个问题在这里已经有答案了 我想获取元素计算样式和应用该规则的 css 文件和行 类似于 Chrome 开发工具在使用 计算 选项卡并单击值旁边的箭头时所做的操作 简而言之 我希望能够使用 javascript 找出这两件事 实际应用于该元
  • 为什么网络开发人员仍然使用元关键字和元描述标签?

    谷歌根本不使用元关键字标签因为关键字主要用于垃圾邮件搜索引擎 Google 不使用元描述标签进行排名 有时 如果部分内容不适合 元描述标签会用于搜索结果中的网站片段 但大多数元描述是根据页面内容自动生成的 并且元描述与页面内容的开头相同 谷
  • 为什么这个函数被应用于一个没有作为参数调用的变量?

    我尝试编写的一些代码遇到了问题 我正在尝试获取坐标列表列表 表示 3D 中形状的可能位置 并形成一个列表 其中包含原始列表中的所有元素以及原始列表中旋转的元素 以便 x y z 坐标也被移动以包括 z x y 和 y z x 我认为用一个例
  • 有没有撤消 git flow init 的命令?

    After git flow init 如何去掉git flow模型 如何从中删除所有相关配置 git config file git flow init force reset git flow init f 如何从以下内容中删除 git
  • PHP使用RSA私钥解密数据

    我有一个程序 使用 C rsa 公钥加密密码 输出字节数组 为了让我轻松传输它并维护数据 我将字节直接转换为十六进制字符串 现在这就是我遇到问题的地方 我将发布数据发送到我的脚本 现在不确定将其转换为什么以及如何解密它 我正在尝试使用htt
  • 在 CKEditor 4.x 中,有没有办法在初始化后获取允许的标签列表?

    有没有办法获取 CKEditor 4 x 准确地说是 4 4 7 中所有允许标签的列表after编辑器已使用所有插件进行初始化 并且所有allowedContentRules and disallowedContentRules或已应用任何
  • 模拟 Windows 8 开始菜单平铺布局引擎

    那么有人知道完美模拟 Windows 8 开始菜单平铺布局引擎的示例代码或控件吗 它应该支持混合的方形和矩形瓷砖 并正确地将方形瓷砖重新包装在矩形瓷砖上方或下方 注意 如果所有瓷砖都是正方形 WrapPanel 就可以工作 但是 一旦您混合
  • AirGoogleMaps 目录必须添加到您的 xCode 项目中才能支持 iOS RN48 上的 GoogleMaps

    我在Android项目中安装了react native maps 效果很好 但我总是出现错误 编译良好 但在ios中执行时出现错误 console error react native maps 必须将 AirGoogleMaps 目录添加
  • 如何在docker镜像中运行signalr blazor客户端的StartAsync连接?

    我创建了默认的 blazor 服务器端应用程序 然后添加Microsoft AspNetCore SignalR Client and ChatHub班级 然后编辑startup cs文件 添加services AddSignalR and
  • 在 MongoDB 中执行搜索/投影时如何重命名字段?

    是否可以重命名查找查询中返回的字段名称 我想用类似的东西 rename 但是我不想更改我正在访问的文档 我只想以不同的方式检索它们 其工作原理如下SELECT COORINATES AS COORDS in SQL 我现在应该做什么 db
  • 在 Inno Setup 中添加 4 个许可证页面

    我遵循了马丁的回答here https stackoverflow com questions 34592002 how to create two licensefile pages in inno setup在我的 Inno Setup
  • 递归函数:检查 Java 中的回文数

    我有一个类检查字符串是否是回文 我有两个问题 1 这是检查回文的最有效方法吗 2 这可以递归实现吗 public class Words public static boolean isPalindrome String word Stri
  • 在 Python 中继承方法的文档字符串

    我有一个带有文档字符串的面向对象层次结构 需要与代码本身一样多的维护 例如 class Swallow object def airspeed self Returns the airspeed unladen raise NotImple
  • Swift Firebase 访问子快照数据

    我目前正在尝试从 Swift 中的子快照访问数据 这是我的代码 在 Swift 3 Firebase 更新之前有效 if let achievements snapshot1 childSnapshotForPath Achievement
  • 如何动态地将 OR 运算符添加到 LINQ 中的 WHERE 子句

    我有一个可变大小的字符串数组 我试图以编程方式循环遍历该数组并匹配表中的所有行 其中 Tags 列至少包含数组中的一个字符串 这是一些伪代码 IQueryable
  • 在 Google Compute Engine 虚拟机之间共享永久性磁盘

    来自谷歌的文档 可以将永久磁盘附加到多个实例 但是 如果您将永久磁盘附加到多个实例 则所有实例都必须以只读模式附加永久磁盘 无法以读写模式将永久磁盘附加到多个实例 如果您以读写模式附加永久磁盘 然后尝试将该磁盘附加到后续实例 Google