我有一个装有很多容器的码头群,但特别是:
我的问题是,当节点发生故障时,管理器会丢弃当前容器并在另一个节点中创建一个新容器。因此,即使使用docker卷,每次我丢失了存储在该特定容器中的持久数据。
所以我会在我的集群上创建四个分布式glusterfs卷,并将它们作为docker卷挂载到我的容器中。
这是解决问题的正确方法吗?
如果是,我应该为glusterfs卷使用什么类型的文件系统?
这种方法存在性能问题吗?
您可能需要查看flocker(卷数据管理器),它集成了多个容器集群管理器,包括Docker Swarm。
您必须使用flocker驱动程序为每个应用程序创建一个卷,如tutorial所指示:
...
volumes:
mysql:
driver: "flocker"
driver_opts:
size: "10GiB"
profile: "bronze"
...
GlusterFS不是解决所有容器的正确方法,因为Gluster不支持“结构化数据”,如GlusterFS Install Guide所述:
Gluster不支持所谓的“结构化数据”,即实时SQL数据库。当然,使用Gluster来备份和恢复数据库会很好 - 当使用至少16KB的文件大小(大约128KB左右的最佳位置)时,Gluster传统上更好。
对此的一个解决方案是对数据库中的数据进行主从复制。 MySQL和mongoDB都支持这一点(如here和here所述),大多数常见的DBMS也是如此。
主从复制基本上是数据库的2个或更多副本的位置,一个将是主服务器,其余将是从服务器。所有写操作都发生在主站上,所有读操作都发生在从站上。写入主站的任何数据都将由主站复制到从站。如果发生这种情况,一些DBMS还提供了检查主服务器是否关闭并选择新主服务器的方法,但我不认为所有DBMS都这样做。
你也可以设置一个Galera Cluster,但据我所知,这只支持MySQL。
我本以为你可以将GlusterFS用于Fluentd和Elasticsearch,但我不熟悉其中任何一个,所以我不能肯定。我想这将取决于他们如何存储他们收集的任何数据(如果他们收集任何数据)。