在 Docker 群上的多个容器中装载 rexray/ceph 卷
Mount rexray/ceph volume in multiple containers on Docker swarm
我做了什么
我已经构建了一个 Docker Swarm 集群,其中我是 运行 具有持久数据的容器。为了允许容器在发生故障时移动到另一台主机,我需要跨 swarm 的弹性共享存储。在研究了各种选项后,我实现了以下内容:
在 Swarm 的所有节点上安装了 Ceph 存储集群并创建了 RADOS 块设备 (RBD)。
http://docs.ceph.com/docs/master/start/quick-ceph-deploy/
在每个节点上安装了 Rexray 并将其配置为使用上面创建的 RBD。 https://rexray.readthedocs.io/en/latest/user-guide/storage-providers/ceph/
部署 Docker 堆栈,使用 rexray 驱动程序安装卷,例如
version: '3'
services:
test-volume:
image: ubuntu
volumes:
- test-volume:/test
volumes:
test-volume:
driver: rexray
此解决方案的工作原理是我可以部署一个堆栈,在 运行 节点上模拟故障,然后在另一个节点上观察堆栈恢复 tar,而不会丢失持久数据.
但是,我无法在多个容器中安装一个 rexray 卷。我这样做的原因是使用一个短暂的"backup container",它只是在容器仍然运行.
时将卷tar发送到快照备份
我的问题
我可以将我的 rexray 卷装载到第二个容器中吗?
第二个容器只需要读取访问权限,因此它可以 tar 将卷备份到快照,同时保留第一个容器 运行。
不幸的是,答案是否定的,在这个用例中,rexray 卷不能安装到第二个容器中。下面的一些信息有望帮助任何人走上类似的道路:
Rexray 不支持多重挂载:
Today REX-Ray was designed to actually ensure safety among many hosts that could potentially have access to the same host. This means that it forcefully restricts a single volume to only be available to one host at a time. (https://github.com/rexray/rexray/issues/343#issuecomment-198568291)
但 Rexray 确实支持称为 pre-emption
的功能,其中:
..if a second host does request the volume that he is able to forcefully detach it from the original host first, and then bring it to himself. This would simulate a power-off operation of a host attached to a volume where all bits in memory on original host that have not been flushed down is lost. This would support the Swarm use case with a host that fails, and a container trying to be re-scheduled.
(https://github.com/rexray/rexray/issues/343#issuecomment-198568291)
但是,Ceph RBD 不 支持抢占。
(https://rexray.readthedocs.io/en/stable/user-guide/servers/libstorage/#preemption)
你当然可以有一个附加卷的容器,然后通过 nfs 在专用的群网络上导出它,然后客户端容器可以通过 nfs 访问它
我做了什么
我已经构建了一个 Docker Swarm 集群,其中我是 运行 具有持久数据的容器。为了允许容器在发生故障时移动到另一台主机,我需要跨 swarm 的弹性共享存储。在研究了各种选项后,我实现了以下内容:
在 Swarm 的所有节点上安装了 Ceph 存储集群并创建了 RADOS 块设备 (RBD)。 http://docs.ceph.com/docs/master/start/quick-ceph-deploy/
在每个节点上安装了 Rexray 并将其配置为使用上面创建的 RBD。 https://rexray.readthedocs.io/en/latest/user-guide/storage-providers/ceph/
部署 Docker 堆栈,使用 rexray 驱动程序安装卷,例如
version: '3' services: test-volume: image: ubuntu volumes: - test-volume:/test volumes: test-volume: driver: rexray
此解决方案的工作原理是我可以部署一个堆栈,在 运行 节点上模拟故障,然后在另一个节点上观察堆栈恢复 tar,而不会丢失持久数据.
但是,我无法在多个容器中安装一个 rexray 卷。我这样做的原因是使用一个短暂的"backup container",它只是在容器仍然运行.
时将卷tar发送到快照备份我的问题
我可以将我的 rexray 卷装载到第二个容器中吗?
第二个容器只需要读取访问权限,因此它可以 tar 将卷备份到快照,同时保留第一个容器 运行。
不幸的是,答案是否定的,在这个用例中,rexray 卷不能安装到第二个容器中。下面的一些信息有望帮助任何人走上类似的道路:
Rexray 不支持多重挂载:
Today REX-Ray was designed to actually ensure safety among many hosts that could potentially have access to the same host. This means that it forcefully restricts a single volume to only be available to one host at a time. (https://github.com/rexray/rexray/issues/343#issuecomment-198568291)
但 Rexray 确实支持称为
pre-emption
的功能,其中:..if a second host does request the volume that he is able to forcefully detach it from the original host first, and then bring it to himself. This would simulate a power-off operation of a host attached to a volume where all bits in memory on original host that have not been flushed down is lost. This would support the Swarm use case with a host that fails, and a container trying to be re-scheduled. (https://github.com/rexray/rexray/issues/343#issuecomment-198568291)
但是,Ceph RBD 不 支持抢占。 (https://rexray.readthedocs.io/en/stable/user-guide/servers/libstorage/#preemption)
你当然可以有一个附加卷的容器,然后通过 nfs 在专用的群网络上导出它,然后客户端容器可以通过 nfs 访问它