直到最近,Mesos都仅仅能够运行无须向磁盘存储数据的服务。这是因为没有方法预留所需的磁盘块。从Mesos 0.23版本开始,可以预留磁盘了。
我们可以将Mesos当作一个部署系统。如果MySQL数据库能够自动将自身备份,并且按需创建新的副本,是不是很好呢?或者如果拥有一个简单的,自服务的REST API,能够创建新的Riak和Cassandra集群,又会怎么样呢?为Mesos构建数据库框架的工作从2014年就开始了。这些框架的问题是每个主机都必须创建特别的数据分区,并且在Mesos之外加以管理。使用持久化卷,类似Apache Cotton(MySQL所用)以及Cassandra和Riak Mesos框架的项目就都能够独立启动和维护了。
在Mesos的设计里,磁盘空间是短暂的,并且是按任务隔离的。这通常是一件好事,除非用户想要持久地保存数据。要解决这个问题,Mesos引入了一个新的磁盘资源的子类型,称为volume。volume是分配给一个任务的磁盘块,并且挂载在特定位置。完成这一功能的API和挂载主机卷的Marathon API(详见“挂载主机卷”部分),几乎完全一致。用户甚至可以创建不持久的卷,这在想将多个独立磁盘暴露给Mesos时会很有用。
下面研究一下如何创建并且使用持久化卷。
有两个acceptOffers Operation用来创建以及销毁持久化卷。不出意外地,它们称为Create和Destroy。仅仅能够在已经被预留的磁盘资源上创建持久化卷。通常,用户会预留资源,创建卷,并且在单个acceptOffers里启动任务,如下面示例所示。
持久化卷资源和常规磁盘资源一样,但是它带有字段disk,设置为合适的DiskInfo。DiskInfo给该持久化卷命名,这样它能够挂载上,名字为嵌套的字符串子字段persistence.id的名称。DiskInfo的Volume必须使用RW模式(因为Mesos 0.24只支持RW)。Volume的container_path字段会指定容器在任务沙箱里的挂载位置。