service 的容器副本会 scale up/down,会 failover,会在不同的主机上创建和销毁,这就引出一个问题,如果 service 有要管理的数据,那么这些数据应该如何存放呢?

选项一:打包在容器里。

显然不行。除非数据不会发生变化,否则,如何在多个副本直接保持同步呢?

选项二:数据放在 Docker 主机的本地目录中,通过 volume 映射到容器里。

位于同一个主机的副本倒是能够共享这个 volume,但不同主机中的副本如何同步呢?

选项三:利用 Docker 的 volume driver,由外部 storage provider 管理和提供 volume,所有 Docker 主机 volume 将挂载到各个副本。

这是目前最佳的方案。volume 不依赖 Docker 主机和容器,生命周期由 storage provider 管理,volume 的高可用和数据有效性也全权由 provider 负责,Docker 只管使用。

我们将以 Rex-Ray 为例来实践第三种方案。

Rex-Ray

Rex-Ray 是开源的容器存储管理解决方案。支持主流的容器编排引擎 Docker Swarm、 Kubernetes 和 Mesos,为容器集群提供自动化的存储编排功能。

在《每天5分钟玩转Docker容器技术》的数据管理章节中已经详细讨论了 Rex-Ray 如何跨 Docker 主机管理 data volume,本节内容也是建立在这些基础知识之上。为节省篇幅,建议大家先阅读这些内容,然后回到这里继续实践。

我们将在部署如下的 Rex-Ray 实验环境:

  1. swarm 中的所有 node 都安装部署 Rex-Ray。

  2. Rex-Ray 使用 VirtualBox backend。

  3. 具体的安装部署方法请参考前面 Docker 数据管理章节,这里不再赘述。

实践

接下来,我们将:

  1. 创建 httpd 服务,并使用 Rex-Ray data volume。

  2. 修改 volume 中的数据,并验证更新同步到所有副本。

  3. 验证 failover 发生时,更新的数据不会丢失。

创建 service

执行如下命令:

docker service create --name my_web \       --publish 8080:80 \       --mount "type=volume,volume-driver=rexray,source=web_data,target=/usr/local/apache2/htdocs" \       httpd
  1. --mount 指定数据卷的 volume-driver 为 rexray

  2. source 指定数据卷的名字为 web_data,如果不存在,则会新建。

  3. target 指定将数据卷 mount 到每个副本容器的 /usr/local/apache2/htdocs,即存放静态页面的目录。

访问 service:

权限有些问题,需要进容器修改 /usr/local/apache2/htdocs 的权限。

service 已经可以访问了:

当前 Rex-Ray volume web_data 被挂载到 node swarm-worker1

mount 到 /var/lib/libstorage/volumes/web_data/data 目录。

通过 docker inspect my_web.1.2j7dgzuyk9hodseej707t97su 可以确认 /var/lib/libstorage/volumes/web_data/data 已经映射到容器目录 /usr/local/apache2/htdocs

当前的实验环境如图所示:

下一节我们验证在故障情况 Volume 的持久性。

书籍:

1.《每天5分钟玩转Docker容器技术》
https://item.jd.com/16936307278.html

2.《每天5分钟玩转OpenStack》
https://item.jd.com/12086376.html

Swarm 如何存储数据?- 每天5分钟玩转 Docker 容器技术(103)相关推荐

  1. Docker 的两类存储资源 - 每天5分钟玩转 Docker 容器技术(38)

    2019独角兽企业重金招聘Python工程师标准>>> 我们从本章开始讨论 Docker 存储. Docker 为容器提供了两种存放数据的资源: 由 storage driver 管 ...

  2. 验证 Swarm 数据持久性 - 每天5分钟玩转 Docker 容器技术(104)

    上一节我们成功将 Rex-Ray Volume 挂载到了 Service.本节验证 Failover 时,数据不会丢失. Scale Up 增加一个副本: docker service update ...

  3. Swarm 如何实现 Failover?- 每天5分钟玩转 Docker 容器技术(98)

    故障是在所难免的,容器可能崩溃,Docker Host 可能宕机,不过幸运的是,Swarm 已经内置了 failover 策略. 创建 service 的时候,我们没有告诉 swarm 发生故障时该如 ...

  4. 万能日志数据收集器 Fluentd - 每天5分钟玩转 Docker 容器技术(91)

    前面的 ELK 中我们是用 Filebeat 收集 Docker 容器的日志,利用的是 Docker 默认的 logging driver json-file,本节我们将使用 fluentd 来收集容 ...

  5. k8s 重要概念 - 每天5分钟玩转 Docker 容器技术(117)

    在实践之前,必须先学习 Kubernetes 的几个重要概念,它们是组成 Kubernetes 集群的基石. Cluster  Cluster 是计算.存储和网络资源的集合,Kubernetes 利用 ...

  6. 回收 PV - 每天5分钟玩转 Docker 容器技术(152)

    当 PV 不再需要时,可通过删除 PVC 回收. 当 PVC mypvc1 被删除后,我们发现 Kubernetes 启动了一个新 Pod recycler-for-mypv1,这个 Pod 的作用就 ...

  7. Service 之间如何通信?- 每天5分钟玩转 Docker 容器技术(101)

    微服务架构的应用由若干 service 组成.比如有运行 httpd 的 web 前端,有提供缓存的 memcached,有存放数据的 mysql,每一层都是 swarm 的一个 service,每个 ...

  8. 跨主机使用 Rex-Ray volume - 每天5分钟玩转 Docker 容器技术(77)

    上一节我们在 docker1 上的 MySQL 容器中使用了 Rex-Ray volume mysqldata,更新了数据库.现在容器已经删除,今天将演示在 docker2 中重新使用这个卷. 在 d ...

  9. NFS PersistentVolume - 每天5分钟玩转 Docker 容器技术(151)

    上一节我们介绍了 PV 和 PVC,本节通过 NFS 实践. 作为准备工作,我们已经在 k8s-master 节点上搭建了一个 NFS 服务器,目录为 /nfsdata: 下面创建一个 PV mypv ...

最新文章

  1. vs 2012自带打包工具进行部署安装
  2. Linux驱动调试中的Debugfs的使用简介
  3. 【摄像头与成像】长文详解RAW图的来龙去脉
  4. python迭代列表_迭代建立列表的最python方法?
  5. 计蒜客 百度地图的实时路况
  6. vuex的命名空间有哪些_Vue 3 带来的 Vuex 的替代方案
  7. 为什么说容器的崛起预示着云原生时代到来?
  8. c语言malloc返回值,malloc(0)的返回值
  9. 【全面完美方案】iPhone 4S WiFi变灰 DIY修复方式
  10. 机器学习基础(二十八) —— 数据规格化
  11. 小程序商城源码,小程序源码带前端+后台+数据库 ,免费分享
  12. 服务器文件夹加密码怎么设置,服务器文件夹设置密码
  13. Launcher中动态加载APK出现java.lang.SecurityException异常的解决方法(二)
  14. 如何根据公司名称来筛选快递
  15. 已经提交到gitlab上的代码如何撤回
  16. json格式数据的传值与取值
  17. kf 和 ekf 和 ukf 入门
  18. 【Git】Git修改 commit 的信息
  19. wireshark ARP抓包
  20. 让你提前认识软件开发(46):首先是为人编写程序,其次才是计算机

热门文章

  1. Razor视图出现重复的解决方法
  2. 得到当前日期前一天的零时零分零秒及当前日的零时零分零秒
  3. VMware View 5.0从菜鸟到高手系列 10 –远程图形工作站配置篇
  4. 谈 JavaScript 浮点数计算精度问题(如0.1+0.2!==0.3)
  5. 优秀代码的必知必会(一)?
  6. Intellij IDEA 2018.2 搭建Spring Boot 应用
  7. 死机、蓝屏、系统运行过慢
  8. 当我们在谈大前端的时候,我们谈的是什么
  9. web项目数据存入mysql数据库中文乱码问题
  10. Conventions and patterns for multi-platform development