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

无状态(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

第 9 章 数据管理 - 073 - 如何实现跨 Docker 主机存储?的更多相关文章

  1. 如何实现跨 Docker 主机存储?- 每天5分钟玩转 Docker 容器技术(73)

    从业务数据的角度看,容器可以分为两类:无状态(stateless)容器和有状态(stateful)容器. 无状态是指容器在运行过程中不需要保存数据,每次访问的结果不依赖上一次访问,比如提供静态页面的 ...

  2. Windows Azure 存储的冗余存储选项和只读访问跨地域冗余存储

    我们很高兴地宣布,现在我们使客户可以获得对数据更高的读取可用性.该预览功能称为"只读访问- 跨地域冗余存储(RA-GRS)",使客户可以在存储帐户主要区域无法读取数据时,通过跨 ...

  3. 跨 Docker 宿主机网络 overlay 类型

    跨 Docker 宿主机网络 overlay 类型 前言 a. 本文主要为 Docker的视频教程 笔记. b. 环境为 三台 CentOS 7.0 虚拟机 (Vmware Workstation 1 ...

  4. docker1.12在cento7里的跨多主机容器网络

    docker1.12在cento7里的跨多主机容器网络

  5. centos7下安装docker(16.docker跨主机存储)

    从业务数据的角度看,容器可以分为两类:无状态(stateless)容器和有状态(stateful)容器. 无状态:是指容器在运行的过程中不需要保存数据,每次访问的结果不依赖上一次的访问,比如提供静态页 ...

  6. docker应用-5(使用overlay 网络进行容器间跨物理主机通信)

    同一个主机上的Docker容器之间通信 docker 引擎会在主机上增加一个docker0网卡,该网卡具有双重身份: 1.从容器视角,网桥(交换机)身份docker0 对于运行在同一个主机上的各个容器 ...

  7. 跨 Docker 宿主机 macvlan 类型

    跨 Docker 宿主机 macvlan 类型 前言 a. 本文主要为 Docker的视频教程 笔记. b. 环境为 三台 CentOS 7.0 虚拟机 (Vmware Workstation 15 ...

  8. 第 9 章 数据管理 - 077 - 跨主机使用 Rex-Ray volume

    跨主机使用 Rex-Ray volume 在docker1上创建mysql容器,并挂载使用mysqldata数据卷 磁盘文件直接挂载在了docker1 上 验证数据 也是存在的 Rex-Ray 可以提 ...

  9. 第二章——Parcelable接口的使用(跨进程,Intent传输)

    一.Parcelable类(Android独有的) 简介:Parcelable是一个接口. 作用:是Android提供的序列化接口,实现序列化和反序列化的操作. 二.跨进程使用 步骤一:创建Book类 ...

随机推荐

  1. Python操作MongoDB看这一篇就够了

    MongoDB是由C++语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似JSON对象,它的字段值可以包含其他文档.数组及文档数组,非常灵活.在这一节中,我们就来看 ...

  2. 用php实现斐波那契数列,如: 1, 1, 2, 3, 5, 8, 13, 21, 34。用数组求出第20个数的值。

    <?php //用数组 function fib($n){ $array = array(); $array[0] = 1; $array[1] = 1; for($i=2;$i<$n;$ ...

  3. Redis.之.环境搭建(集群)

    Redis.之.环境搭建(集群) 现有环境: /u01/app/ |- redis # 单机版 |- redis-3.2.12    # redis源件 所需软件:redis-3.0.0.gem -- ...

  4. static 关键字的作用

    在C语言中,关键字static有三个明显的作用: 1)在函数体内,一个被声明为静态的变量在这一函数被调用过程中维持其值不变(该变量存放在静态变量区). 2) 在模块内(但在函数体外),一个被声明为静态 ...

  5. pymysql.err.InternalError: Packet sequence number wrong - got 45 expected 0

    原因: 使用了多线程,多线程共享了同一个数据库连接,但每个execute前没有加上互斥锁 方法: 方法一:每个execute前加上互斥锁 lock.acquire()         cursor.e ...

  6. P1772 [ZJOI2006]物流运输

    题目描述 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格的管理和跟踪. ...

  7. C# 求链表 list 中 属性的 最大值 最小值

    获取链表List中对象属性最大值最小值(Max,Min)的方法: 1.创建一个类,类中有一个属性A /// <summary> /// 用于测试属性的类 /// </summary& ...

  8. week1 - Python基础1 介绍、基本语法、流程控制

    知识内容: 1.python介绍 2.变量及输入输出 3.分支结构 4.循环结构 一.python介绍 Python主要应用领域: 云计算: 云计算最火的语言, 典型应用OpenStack WEB开发 ...

  9. 练手——用Python写的时间戳转换为北京时间的小工具

    #北京时间需加上8小时bj = 8*3600 def time_stamp(times):    #一天总秒数    nonDaySeconds = 24*3600    leapmonths = [ ...

  10. 画多边形form并填充背景色(可以实现圆角边框 有锯齿)

    public Form1() { InitializeComponent(); this.BackColor = ColorTranslator.FromHtml("#F7F1F1" ...