使用 glusterfs 在 docker 群中持久化数据

Persisting data in a docker swarm with glusterfs

我有一个 docker 群,里面有很多容器,但特别是:

我的问题是,当一个节点发生故障时,管理器会丢弃当前容器并在另一个节点中创建一个新容器。所以每次我丢失了存储在那个特定容器中的持久数据,即使使用 docker 卷。

所以我会在我的集群上创建四个分布式 glusterfs 卷,并将它们作为 docker 卷安装到我的容器中。

这是解决我的问题的正确方法吗?

如果是,我应该为我的 glusterfs 卷使用什么类型的文件系统?

这个方法有性能问题吗?

GlusterFS 不是为所有容器解决此问题的正确方法,因为 Gluster 不支持 "structured data",如 GlusterFS Install Guide:

中所述

Gluster does not support so called “structured data”, meaning live, SQL databases. Of course, using Gluster to backup and restore the database would be fine - Gluster is traditionally better when using file sizes at of least 16KB (with a sweet spot around 128KB or so).

一个解决方案是对数据库中的数据进行主从复制。 MySQL 和 mongoDB 都支持这一点(如 here and here 所述),大多数常见的 DBMS 也是如此。

主从复制基本上是2个或多个数据库副本,一个为主,其余为从。所有写操作都发生在 master 上,所有读操作都发生在 slave 上。写入主服务器的任何数据都将由主服务器复制到从服务器。 一些 DBMS 还提供了一种方法来检查 master 是否宕机并在发生这种情况时选举一个新的 master,但我认为并不是所有的 DBMS 都这样做。

您也可以设置 Galera Cluster,但据我所知这仅支持 MySQL。

我原以为您可以将 GlusterFS 用于 Fluentd 和 Elasticsearch,但我对其中任何一个都不熟悉,所以我不能肯定地说。我想这将取决于他们如何存储他们收集的任何数据(如果他们收集任何数据的话)。

您可能想看看 flocker (a volume data manager) which has integration for several container cluster managers, including Docker Swarm

您必须使用 flocker 驱动程序为 tutorial:

指出的每个应用程序创建一个卷
...
volumes:
  mysql:
    driver: "flocker"
    driver_opts:
      size: "10GiB"
      profile: "bronze"
 ...