073、如何实现跨Docker Host 存储? (2019-04-18 周四)

 
从业务数据的角度看,容器可以分为两类:无状态(stateless)容器和有状态(stateful)容器。
 
    无状态是指容器在运行过程中不需要保存数据,每次访问的结果不依赖上一次访问,比如提供静态页面的web服务器。
 
    有状态是指容器需要保存数据,而且数据会发生变化,访问的结果依赖之前请求的处理结果,最典型的就是数据库服务器。
 
简单来讲,状态(state)就是数据,如果容器需要处理并存储数据,他就是有状态的,反之就是无状态的。对于有状态的容器,如何保存数据呢?
 
    在前面章节中,我们学过 data volume 可以存储容器的状态,不过当时讨论的volume起本质是Docker主机本地的目录。
 
    不过本地目录存在一个隐患,:如果Docker host 宕机了,如何恢复容器?
 
    一个办法就是定期备份数据,但这种方式还是会丢失最近一次备份到宕机这段时间的数据。更好的方案是有专门的storage provider 提供volume ,Docker 从 provider 那里获取volume并挂载到容器。这样即使Host挂了,也可以立即在其他可用Host上启动相同的镜像容器,挂载之前使用的volume,这样就不会有数据丢失。
 
本章将详细学习如何实现跨Docker 主机管理 data volume
 
现在举一个例子
 
 
 
    假设有两个Docker Host ,host1上运行了一个mysql容器,为了保护数据,data volume 由storage provider提供。
 
    当 host1 发生故障,我们会在host2上启动相同的mysql镜像,并挂载 data volume
 
任何一个data volume 都是由driver管理的,创建volume时如果不特别指定,将使用local类型的driver,即从 Docker host 的本地目录中分配存储空间。如果要支持主机的volume,则需要使用第三方driver。
 
目前已经有很多可用的driver,比如使用Azure File storage 的driver,使用 GlusterFS 的driver,完整的列表可参考https://docs.docker.com/engine/extend/legacy_plugins/#volume-plugins
 
我们这里将选择 Rex-Ray driver , 其原因是:
 
    1、Rex-Ray 是开源的,而且社区活跃
    2、支持多种backed,VirtualBox 的Virtual Media 、Amazon EBS、Ceph RBD、OpenStack Cinder 等
    3、支持多种操作系统,Ubuntu、CentOS、RHEL和CoreOS
    4、支持多种容器编排引擎,Docker Swarm、Kubernetes 和 Mesos
    5、Rex-Ray安装使用方法非常简单
 
posted @ 2019-04-18 10:01  三角形  阅读(158)  评论(0编辑  收藏  举报