开发者社区> 科技小能手> 正文

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

简介:
+关注继续查看

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 实验环境:

526.png

  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,即存放静态页面的目录。

527.png

 

访问 service:

528.png

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

529.png

service 已经可以访问了:

530.png

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

531.png

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

532.png

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

533.png

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

534.png

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

书籍:

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

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



本文转自CloudMan6 51CTO博客,原文链接:http://blog.51cto.com/cloudman/2048580

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
借助阿里云ECS实现传统.NET应用容器化(上)
我们都知道.NET Core应用可以跑在Docker上,那.NET Framework 4.x应用呢?借助阿里云ECS主机(Windows Server 2019 with Container版本),一切变得So Easy!
381 0
如何扩容单台服务器的存储容量?
最近收到监控系统的报警,一看是服务器的磁盘的存储超出了阈值。此时第一时间想到的就是要给服务器扩容了,说到服务器扩容,其实没有小伙伴们想的那么复杂。简单点来说,服务器扩容可以分为两种:一种是增加服务器的数量;另一种是增加单台服务器的存储。今天,我们就来说说如何增加单台服务器的存储容量。
51 0
Docker五分钟搭建Wordpress
一台linux服务器,新建并启动 MySQL 容器,新建并启动 WordPress 容器,修改WordPress配置文件。
36 0
容器服务K8S存储卷挂载常见问题
阿里容器服务K8S存储卷挂载问题排查
7366 0
阿里云弹性容器实例产品 ECI ——云原生时代的基础设施
本文介绍了弹性容器实例 ECI 的技术优势,特别介绍了 ECI 在弹性、Serverless、安全和易用性等方面技术上的方案和采取的优化措施。
5855 0
23705
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载