从业务数据的角度看,容器可以分为两类:

无状态(stateless)容器

无状态是指容器在运行过程中不需要保存数据,每次访问的结果不依赖上一次访问,比如提供静态页面的 web 服务器。

有状态(stateful)容器

有状态是指容器需要保存数据,而且数据会发生变化,访问的结果依赖之前请求的处理结果,最典型的就是数据库服务器。

简单来讲,状态(state)就是数据,如果容器需要处理并存储数据,它就是有状态的,反之则无状态。

保存数据

data volume 可以存储容器的状态,但是 volume 其本质是 Docker 主机本地的目录。

隐患:如果 Docker Host 宕机了,数据可能会丢失

解决方法:定期备份数据,但这种方案还是会丢失从上次备份到宕机这段时间的数据。

更好的方案:由专门的 storage provider 提供 volume,Docker 从 provider 那里获取 volume 并挂载到容器。即使 Host 挂了,也可以立刻在其他可用 Host 上启动相同镜像的容器,挂载之前使用的 volume,这样就不会有数据丢失。

实现跨 Docker 主机管理 data volume

假设有两个 Dokcer 主机,Host1 运行了一个 MySQL 容器,为了保护数据,data volume 由 storage provider 提供,如下图所示。

当 Host1 发生故障,我们会在 Host2 上启动相同的 MySQL 镜像,并挂载 data volume。

Docker 是通过 volume driver 实现这个跨主机管理 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、支持多种 backend,VirtualBox 的 Virtual Media、Amazon EBS、Ceph RBD、OpenStack Cinder 等。

3、支持多种操作系统,Ubuntu、CentOS、RHEL 和 CoreOS。

4、支持多种容器编排引擎,Docker Swarm、Kubernetes 和 Mesos。

5、Rex-Ray 安装使用方法非常简单。

-----------------------------------------引用来自------------------------------------

https://mp.weixin.qq.com/s?__biz=MzIwMTM5MjUwMg==&mid=2653587893&idx=1&sn=83466e93f3effa928353ac9804cc8995&chksm=8d3081acba4708ba8895c17c1dc438f999ffaa52c14f2fb00554379b2cbb74f9bbe53583d745&scene=21#wechat_redirect

最新文章

  1. Hadoop单机伪分布式
  2. sys
  3. Android学习笔记(三)——初探Intent
  4. Java多线程学习(转载)
  5. [ActionScript 3.0] AS3实现滤镜叠加效果
  6. Java Set接口
  7. Android ArrayAdpater 填充集合
  8. ajax请求或者页面需要缓存,代码如下
  9. SpringMVC传参
  10. ZOJ 3229 Shoot the Bullet [上下界最大流]
  11. 获取GRIDVIEW中的TemplateField显示的文本值
  12. PHP全栈学习笔记13
  13. 密码疑云 (2)——RSA加密机制需要的数学知识
  14. SpringBoot学习笔记1
  15. ASP.NET -- WebForm -- HttpResponse 类的方法和属性
  16. 【mysql】数据库中的DML DDL DCL TCL 及 Online DDL
  17. git下载指定的版本
  18. 使用Nginx做转发和匹配替换
  19. mybatis3.2初学感悟
  20. bzoj千题计划228:bzoj2095: [Poi2010]Bridges

热门文章

  1. MyEclipse破解步骤
  2. 关于element-ui表格table设置header-cell-class-name样式不起作用的原因分析
  3. Summary: Calculate average where sum exceed double limits
  4. hibernate连接数据库和使用
  5. C# 初识Redis
  6. SpringCloud入门之应用程序上下文服务(Spring Cloud Context)详解
  7. C#发送内置图片的html格式邮件的代码
  8. 介绍Kubernetes监控Heapster
  9. 运用java反射机制获取实体方法报错,java.lang.NoSuchMethodException: int.<init>(java.lang.String)
  10. 豆瓣上关于<<一万小时天才理论>>一书的一个评论