DC/OS的存储功能

2020-06-01 00:00:00 路径 数据 服务 容器 机器上

DC/OS的存储的管理主要分三种方式:本地临时存储(Local ephemeral storage),本地持久化存储(Local persistent volumes),外部持久化存储(External persistent volumes)。

种是存储方式,任务往往是无状态的,当一个任务在某台机器挂掉的时候,随时可以从另外一台机器上启动起来,当然原来机器上的数据也不会拷贝到新的机器上,启动的任务是全新的。

然而对于数据库之类的应用,使用种方式显然不合适,被调度到另外节点的数据库进程无法访问原来的数据,变成了空的数据库。

 

第二种方式可以部分解决有状态的服务的问题。

在创建服务的时候,指定持久化的存储路径

  1. {

  2.   "containerPath": "data",

  3.   "mode": "RW",

  4.   "persistent": {

  5.     "size": 500

  6.   }

  7. }

这个data路径会创建在容器里面/mnt/mesos/sandbox下面,这个路径会对应于物理机器上的一个路径。在创建服务的时候,所有的服务的资源,包含CPU,内存,硬盘都被预留reserved,从而当这个服务挂掉的时候,还是会从同样的机器上启动起来,容器内部的/mnt/mesos/sandbox路径还是会被mount为相同的主机路径,所以在容器里面还是能够看到data这个目录,数据原封不动的放在那里。哪怕某个服务scale为0,资源还是被预留,从而再scale为1的时候,还是可以使用原来的路径,直到服务被terminate才不再预留。

然而当一台服务器挂掉的时候,服务会永远部署不成功,数据也就永远丢掉了。

 

第三种方式称为外部持久化存储,也就是说容器mount的路径不再是本地的路径,而是外部的统一存储,例如Ceph,GlusterFS,Amazon EBS,OpenStack Cinder等,这些外部存储都有自己的高可用机制,而且当容器在一台机器上挂了之后,可以将对于的存储数据的路径从这台机器上umount,然后在新的机器上mount,从而数据永远丢不了,即便服务器挂了,数据也是在的。

对于Docker,可以通过Docker Volume Plugin来做这件事情。

 

对于Mesos容器,则需要通过Docker Volume Isolator来实现,因而需要加载docker/volume。它通过执行dvdcli调用Docker Volume Plugin的API来创建volume。

  1. "container": {

  2.     "type": "MESOS",

  3.     "volumes": [

  4.       {

  5.         "containerPath": "test-rexray-volume",

  6.         "external": {

  7.           "size": 100,

  8.           "name": "my-test-vol",

  9.           "provider": "dvdi",

  10.           "options": { "dvdi/driver": "rexray" }

  11.           },

  12.         "mode": "RW"

  13.       }

  14.     ]

  15.   }

可以通过上面的json使用rexray来创建AWS EBS的volume作为外部存储。


相关文章