问得好.以下是Mesos中的一些即将推出的功能,以改进对有状态服务的支持,以及相应的当前解决方法.
- Persistent volumes(0.23):在启动任务时,您可以创建一个存在于任务Sandbox 之外的卷,即使在任务结束/完成后,该卷仍将保留在 node 上.当任务退出时,可以将其资源(包括持久卷)提供回框架,以便框架可以再次启动同一任务、启动恢复任务,或者启动一个新任务,该任务使用前一个任务的输出作为输入.
- Disk Isolation(0.22):对Sandbox 和持久卷实施磁盘配额限制.这将确保您的存储密集型框架不会阻塞磁盘并阻止其他任务运行.
- Dynamic Reservations(0.23):在启动任务时,您可以保留任务使用的资源(包括持久卷),以确保在任务退出时向您提供这些资源,而不是使用低于其公平份额最远的框架.
关于您的具体用例和问题:
1a)How would one organize it?您可以通过Marathon实现这一点,或许可以为您的有状态服务创建一个单独的Marathon实例,这样您就可以为"有状态"角色创建静态保留,这样只有有状态的Marathon才能保证这些资源.
1b)Constraint a server to a particular cluster node?您可以在Marathon中轻松实现这一点,将应用程序约束到特定的主机名或具有特定属性值的任何 node (例如,NFS_Access=true).见Marathon Constraints.如果只想在一组特定的 node 上运行任务,那么只需要在这些 node 上创建静态保留.如果您需要这些 node 的可发现性,您应该查看Mesos-DNS和/或Marathon's HAProxy integration.
1c)Use some distributed FS?许多分布式文件系统提供的数据复制将保证您的数据能够经受住任何单个 node 的故障.坚持使用DFS还可以为您安排任务提供更大的灵活性,尽管这是以网络和本地磁盘之间的延迟差异为代价的.Mesos内置了从HDFS URI获取二进制文件的支持,许多客户使用HDFS将执行器二进制文件、配置文件和输入数据传递给将运行任务的从机.
2) DRBD, MooseFS, GlusterFS, NFS, CephFS?我听说有客户在Mesos上使用CEPFS、HDFS和MapRFS.NFS似乎也很适合.只要你的任务知道如何从它所在的 node 访问它,你用什么对Mesos来说真的无关紧要.
希望有帮助!