Apache Mesos的持久存储

Car*_*nos 34 postgresql distributed-computing mesos mesosphere

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

在所有演示和示例中,这一切看起来都令人惊讶.我可以很容易想象一个人如何竞选无国籍的工作 - 这自然适合整个想法.

Bot如何处理有状态的长期工作?

说,我有一个由N台机器组成的集群(通过Marathon安排).我想在那里运行一个postgresql服务器.

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

1-如何组织它?将服务器约束到特定的群集节点?使用一些分布式FS?

2- DRBD,MooseFS,GlusterFS,NFS,CephFS,其中一个与Mesos和postgres等服务配合良好?(我在这里想到Mesos /马拉松可能会重新定位服务,如果下降)

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

问题很大程度上是从Apache Mesos的持久存储中复制的,zerkmsProgrammers Stack Exchange上提出了这个问题.

Ada*_*dam 43

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

  1. 持久卷(0.23):启动任务时,您可以创建存在于任务沙箱之外的卷,并且即使在任务终止/完成后也将保留在节点上.当任务退出时,其资源(包括持久卷)可以提供回框架,以便框架可以再次启动相同的任务,启动恢复任务或启动消耗先前任务输出的新任务作为它的输入.
    • 当前的解决方法:将您的状态保留在沙箱外的某个已知位置,并让您的任务尝试手动恢复它.也许将它保存在分布式文件系统/数据库中,以便可以从任何节点访问它.
  2. 磁盘 隔离(0.22):对沙箱和持久卷实施磁盘配额限制.这可确保您的存储密集型框架无法阻塞磁盘并阻止其他任务运行.
    • 当前解决方法:监控带外磁盘使用情况,并运行定期清理作业.
  3. 动态预留(0.23):启动任务后,您可以保留任务使用的资源(包括持久性卷),以保证在任务退出时将它们提供给您,而不是使用最低于其公平份额的框架.
    • 当前解决方法:使用slave的--resources标志在从属启动时静态保留框架的资源.

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

1a)如何组织它?您可以使用Marathon执行此操作,也许可以为您的有状态服务创建单独的Marathon实例,以便您可以为"有状态"角色创建静态预留,这样只有有状态的Marathon才能保证这些资源.

1b)将服务器约束到特定的群集节点?您可以在Marathon中轻松完成此操作,将应用程序限制为特定主机名,或具有特定属性值的任何节点(例如NFS_Access = true).请参阅Marathon Constraints.如果您只想在特定的节点集上运行任务,则只需要在这些节点上创建静态预留.如果您需要这些节点的可发现性,您应该查看Mesos-DNS和/或Marathon的HAProxy集成.

1c)使用一些分布式FS?许多分布式文件系统提供的数据复制将保证您的数据能够承受任何单个节点的故障.尽管以网络和本地磁盘之间的延迟差异为代价,坚持使用DFS也可以在您可以安排任务的位置提供更大的灵活性.Mesos内置支持从HDFS uris获取二进制文件,许多客户使用HDFS将执行程序二进制文件,配置文件和输入数据传递给运行其任务的从属服务器.

2)DRBD,MooseFS,GlusterFS,NFS,CephFS?我听说客户使用CephFS,HDFS和MapRFS与Mesos.NFS看起来也很容易.只要您的任务知道如何从放置它的任何节点访问它,Mesos与您使用的内容无关紧要.

希望有所帮助!

  • 更新:持久性卷未达到0.22(完整),因此您必须等待0.23才能开始使用持久卷或动态预留. (2认同)