这一切看起来惊人的所有演示和例子。我可以很容易想象一个人如何运行无国籍工作 – 这自然适合整个想法。
Bot如何处理有状态的长时间运行的作业?
说,我有一个由N台机器组成的集群(通过Marathon安排)。我想在那里运行一个postgresql服务器。
就是这样 – 首先我甚至不想让它高度可用,而只是一个承载postgresql服务器的单一作业(实际上是Dockerized)。
1-如何组织它?将服务器约束到特定的集群节点?使用一些分布式FS?
2- DRBD,MooseFS,GlusterFS,NFS,CephFS,其中哪一个与Mesos和服务像postgres很好? (我在这里认为Mesos /马拉松可能重定位服务,如果下来的可能性)
3-请告诉我的方法是否在哲学方面(数据服务器的DFS和服务器的某种类型的切换,如Mesos顶部的postgres)
问题在很大程度上从Persistent storage for Apache Mesos复制,在Programmers Stack Exchange zerkms询问。
> Persistent volumes(0.23):启动任务时,您可以创建一个存在于任务沙箱之外的卷,并且即使在任务结束/完成后也将保留在节点上。当任务退出时,其资源(包括持久性卷)可以提供回框架,以便框架可以再次启动相同的任务,启动恢复任务或启动使用前一任务的输出的新任务作为其输入。
>当前解决方法:将您的状态保留在沙箱外的某个已知位置,并让您的任务尝试手动恢复。也许将它持久化在分布式文件系统/数据库中,以便可以从任何节点访问它。
> Disk Isolation(0.22):在沙箱和持久卷上强制实施磁盘配额限制。这确保您的存储大框架将无法阻止磁盘并阻止其他任务运行。
>当前解决方法:超出带外监视磁盘使用情况,并运行定期清除作业。
> Dynamic Reservations(0.23):启动任务时,您可以预留任务使用的资源(包括持续卷),以确保在任务退出时将其提供给您,而不是转到最低于其公平共享的任何框架。
>当前解决方法:使用从属设备的–resources标志在从设备启动时为您的框架静态预留资源。
至于你的具体用例和问题:
1a)如何组织它?你可以用Marathon做这个,或许为有状态的服务创建一个单独的Marathon实例,这样你可以为“有状态”角色创建静态保留,这样只有有状态的马拉松才能保证这些资源。
1b)将服务器约束到特定的集群节点?您可以在Marathon中轻松完成此操作,将应用程序约束到特定主机名或具有特定属性值的任何节点(例如NFS_Access = true)。请参见Marathon Constraints.如果您只想在特定节点集上运行任务,则只需在这些节点上创建静态预留。如果您需要发现这些节点,您应该查看Mesos-DNS和/或Marathon’s HAProxy integration。
1c)使用一些分布式FS?许多分布式文件系统提供的数据复制将确保您的数据能够在任何单个节点发生故障时生存。持续到DFS还将在您可以安排任务的地方提供更多的灵活性,但是以网络和本地磁盘之间的延迟差异为代价。 Mesos内置支持从HDFS uris获取二进制文件,许多客户使用HDFS将执行器二进制文件,配置文件和输入数据传递到其任务将运行的从属。
2)DRBD,MooseFS,GlusterFS,NFS,CephFS?我听说过客户使用CephFS,HDFS和MapRFS与Mesos。 NFS似乎也很容易适应。只要你的任务知道如何从它放置的任何节点访问它,对Mesos什么都不重要。
希望有所帮助!