博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何实现跨 Docker 主机存储?- 每天5分钟玩转 Docker 容器技术(73)
阅读量:6880 次
发布时间:2019-06-27

本文共 1243 字,大约阅读时间需要 4 分钟。

从业务数据的角度看,容器可以分为两类:无状态(stateless)容器和有状态(stateful)容器。

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

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

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

对于有状态的容器,如何保存数据呢?

前面在 Docker 存储章节我们学习到 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 是如何实现这个跨主机管理 data volume 方案的呢?

答案是 volume driver。

任何一个 data volume 都是由 driver 管理的,创建 volume 时如果不特别指定,将使用 local 类型的 driver,即从 Docker Host 的本地目录中分配存储空间。如果要支持跨主机的 volume,则需要使用第三方 driver。

目前已经有很多可用的 driver,比如使用 Azure File Storage 的 driver,使用 GlusterFS 的 driver,完整的列表可参考 

我们这里将选择 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 安装使用方法非常简单。

下一节我们开始实践 Rex-Ray。

二维码+指纹.png

转载地址:http://ohfbl.baihongyu.com/

你可能感兴趣的文章
Android自定义view之仿微信录制视频按钮
查看>>
CSDN-markdown编辑器语法——字体、字号与颜色
查看>>
mac版本idea使用(二)-如何安装PlantUML画时序图、类图
查看>>
windows 使用 xxfpm 解决 php-cgi 进程自动关闭
查看>>
Android Viewpager加Fragment做界面切换时数据消失的解决方式
查看>>
信息系统架构
查看>>
绿盟科技安全态势感知解决方案
查看>>
如何运营亿级QPS的Redis系统
查看>>
NetBeans使用Consolas中文乱码的解决
查看>>
a标签href不跳转 禁止跳转
查看>>
使用jQuery.form插件,实现完美的表单异步提交
查看>>
JS_工厂模式
查看>>
ECShop后台管理菜单修改
查看>>
asp.net 简单分页打印
查看>>
C#接口知识大全收藏
查看>>
faad解码aac
查看>>
微软的坑:Url重写竟然会引起IIS内核模式缓存不工作
查看>>
iOS 打包静态类库 lib.a
查看>>
数据字典生成工具之旅(5):DocX组件读取与写入Word
查看>>
linux下遍历目录
查看>>