【问题标题】:Mount rexray/ceph volume in multiple containers on Docker swarm在 Docker swarm 上的多个容器中挂载 rexray/ceph 卷
【发布时间】:2018-10-10 01:49:17
【问题描述】:

我做了什么

我已经构建了一个 Docker Swarm 集群,我在其中运行具有持久数据的容器。为了允许容器在发生故障时移动到另一个主机,我需要跨集群的弹性共享存储。在研究了各种选项后,我实现了以下内容:

  1. 在 Swarm 的所有节点上安装了 Ceph 存储集群并创建了 RADOS 块设备 (RBD)。 http://docs.ceph.com/docs/master/start/quick-ceph-deploy/

  2. 在每个节点上安装 Rexray 并将其配置为使用上面创建的 RBD。 https://rexray.readthedocs.io/en/latest/user-guide/storage-providers/ceph/

  3. 部署一个使用 rexray 驱动程序挂载卷的 Docker 堆栈,例如

    version: '3'
    services:
      test-volume:
        image: ubuntu
        volumes:
          - test-volume:/test
    volumes:
      test-volume:
        driver: rexray
    

这个解决方案的工作原理是我可以部署一个堆栈,在正在运行的节点上模拟故障,然后观察堆栈在另一个节点上重新启动,而不会丢失持久性数据。

但是,我不能在多个容器中安装 rexray 卷。我这样做的原因是使用一个短暂的“备份容器”,它只是在容器仍在运行时将卷压缩为快照备份。

我的问题

我可以将我的 rexray 卷安装到第二个容器中吗?

第二个容器只需要读取权限,因此它可以将卷压缩到快照备份,同时保持第一个容器运行。

【问题讨论】:

    标签: docker ceph docker-swarm-mode


    【解决方案1】:

    很遗憾,答案是否定的,在这种用例中,rexray 卷无法安装到第二个容器中。下面的一些信息有望帮助任何走上类似道路的人:

    1. Rexray 不支持多挂载:

      如今,REX-Ray 旨在切实确保可能访问同一主机的许多主机之间的安全。这意味着它强制限制单个卷一次只能用于一个主机。 (https://github.com/rexray/rexray/issues/343#issuecomment-198568291)

    2. 但 Rexray 确实支持名为 pre-emption 的功能,其中:

      ..如果第二个主机确实请求他能够先将其与原始主机强制分离,然后将其带到自己的卷。这将模拟连接到卷的主机的断电操作,其中原始主机上的内存中所有未刷新的位都将丢失。这将支持 Swarm 用例,其中主机出现故障,并且容器试图重新调度。 (https://github.com/rexray/rexray/issues/343#issuecomment-198568291)

    3. 但是,Ceph RBD支持抢占。 (https://rexray.readthedocs.io/en/stable/user-guide/servers/libstorage/#preemption)

    【讨论】:

      【解决方案2】:

      你当然可以有一个附加卷的容器,然后通过 nfs 将其导出到专用的 swarm 网络上,然后客户端容器可以通过 nfs 访问它

      【讨论】:

      • 这可行,但当我发布此内容时,我正在研究如何避免卷主机的瓶颈和单点故障。
      猜你喜欢
      • 1970-01-01
      • 2017-07-21
      • 2019-12-10
      • 2017-04-15
      • 1970-01-01
      • 1970-01-01
      • 2019-01-09
      • 1970-01-01
      • 2021-09-17
      相关资源
      最近更新 更多