Apache Mesos 的持久存储

Persistent storage for Apache Mesos

最近我发现了 Apache Mesos 这样的东西。

在所有这些演示和示例中,一切看起来都非常棒。我可以很容易地想象 运行 如何处理无状态工作 - 这很自然地符合整个想法。

Bot 如何处理有状态的长 运行ning 作业?

比如说,我有一个由 N 台机器组成的集群(并且是通过 Marathon 安排的)。我想 运行 那里有一个 postgresql 服务器。

就是这样 - 起初我什至不希望它具有高可用性,而只是一个托管 postgresql 服务器的简单作业(实际上是 Dockerized)。

1- 如何组织它?将服务器限制到特定的集群节点?使用一些分布式文件系统?

2- DRBD、MooseFS、GlusterFS、NFS、CephFS,其中哪一个与 Mesos 和 postgres 等服务配合得很好? (我在这里考虑如果出现故障 Mesos/marathon 可以重新定位服务的可能性)

3-请告诉我我的方法在哲学方面是否错误(数据服务器的 DFS 和 Mesos 顶部的 postgres 等服务器的某种切换)

问题大部分复制自 Persistent storage for Apache Mesos, asked by zerkms on Programmers Stack Exchange

问得好。以下是 Mesos 中一些即将推出的功能,用于改进对有状态服务的支持,以及相应的当前解决方法。

  1. Persistent volumes (0.23):启动任务时,您可以创建一个存在于任务沙箱之外的卷,即使在任务 dies/completes 之后也会保留在节点上。当任务退出时,它的资源——包括持久卷——可以被提供回框架,这样框架就可以再次启动相同的任务,启动恢复任务,或者启动一个新的任务来消耗前一个任务的输出作为它的输入。
    • 当前解决方法:将您的状态保存在沙箱外的某个已知位置,并让您的任务尝试手动恢复它。也许将其保存在分布式 filesystem/database 中,以便可以从任何节点访问它。
  2. Disk Isolation (0.22):对沙箱和持久卷实施磁盘配额限制。这可确保您的存储密集型框架不会阻塞磁盘并阻止其他任务 运行ning。
    • 当前的解决方法:带外监控磁盘使用情况,运行 定期清理作业。
  3. Dynamic Reservations (0.23):启动任务时,您可以保留任务使用的资源(包括持久卷)以保证在任务退出时将它们提供给您,而不是去任何一个框架远低于其公平份额。
    • 当前解决方法:使用从站的 --resources 标志在从站启动时为您的框架静态保留资源。

至于您的具体用例和问题:

1a) 如何组织它?您可以使用 Marathon 做到这一点,也许为您的有状态服务创建一个单独的 Marathon 实例,以便您可以为'stateful' 角色,这样只有有状态的马拉松才能保证这些资源。

1b) 将服务器限制到特定的集群节点?您可以在 Marathon 中轻松地执行此操作,将应用程序限制到特定的主机名或具有特定属性值的任何节点(例如 NFS_Access=true)。参见 Marathon Constraints. If you only wanted to run your tasks on a specific set of nodes, you would only need to create the static reservations on those nodes. And if you need discoverability of those nodes, you should check out Mesos-DNS and/or Marathon's HAProxy integration

1c) 使用一些分布式文件系统? 许多分布式文件系统提供的数据复制将保证您的数据可以在任何单个节点发生故障时幸存下来。坚持使用 DFS 还可以在您可以安排任务的地方提供更大的灵活性,尽管以网络和本地磁盘之间的延迟差异为代价。 Mesos 内置支持从 HDFS uris 获取二进制文件,许多客户使用 HDFS 将执行程序二进制文件、配置文件和输入数据传递给他们的任务将 运行.

2) DRBD、MooseFS、GlusterFS、NFS、CephFS?我听说客户在 Mesos 中使用 CephFS、HDFS 和 MapRFS。 NFS 似乎也很适合。只要您的任务知道如何从放置它的任何节点访问它,您使用什么对 Mesos 来说真的无关紧要。

希望对您有所帮助!