使用glusterfs在docker swarm中保存数据

Ant*_*tia 5 docker glusterfs docker-swarm

我有一个装有很多容器的码头群,但特别是:

  • MySQL的
  • MongoDB的
  • fluentd
  • elasticsearch

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

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

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

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

这个approch有性能问题吗?

小智 6

GlusterFS不是解决所有容器的正确方法,因为Gluster不支持"结构化数据",如GlusterFS安装指南中所述:

Gluster不支持所谓的"结构化数据",即实时SQL数据库.当然,使用Gluster来备份和恢复数据库会很好 - 当使用至少16KB的文件大小(大约128KB左右的最佳位置)时,Gluster传统上更好.

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

主从复制基本上是数据库的2个或更多副本的位置,一个将是主服务器,其余将是从服务器.所有写操作都发生在主站上,所有读操作都发生在从站上.写入主站的任何数据都将由主站复制到从站.如果发生这种情况,一些DBMS还提供了检查主服务器是否关闭并选择新主服务器的方法,但我不认为所有DBMS都这样做.

你也可以设置一个Galera集群,但据我所知,这只支持MySQL.

我本以为你可以将GlusterFS用于Fluentd和Elasticsearch,但我不熟悉其中任何一个,所以我不能肯定.我想这将取决于他们如何存储他们收集的任何数据(如果他们收集任何数据).


Gon*_*heu 1

您可能想看一下folcker(一种卷数据管理器),它集成了多个容器集群管理器,包括Docker Swarm

您必须按照教程中的指示,使用flcker驱动程序为每个应用程序创建一个卷:

...
volumes:
  mysql:
    driver: "flocker"
    driver_opts:
      size: "10GiB"
      profile: "bronze"
 ...
Run Code Online (Sandbox Code Playgroud)

  • 看来 flcker 背后的公司 (ClusterHQ) 于 2016 年倒闭了。flocker 代码仍然可以在 github 上找到(但此后一直没有修改过),并且教程中给出的链接已失效。 (2认同)