centos7下安装docker(24docker swarm 数据管理)

时间:2021-07-25 01:56:17

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

1.打包在容器中:

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

2.数据存放在dcoker host目录中,但是这样的话,无法同步到其他主机的容器上

3.利用docker 的volume driver,由外部storage provider管理和提供volume,所有docker 主机volume将挂载到各个副本

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

Rex-Ray

Rex-Ray是开源的容器存储管理解决方案。支持主流的容器编排引擎docker swarm,kubernetes和mesos,为容器集群提供自动化的存储编排能力

之前我们也在跨主机存储时学习过:

centos7下安装docker(24docker swarm  数据管理)

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

2.Rex-Ray使用VirtualBox backend

注:由于没有virtualbox backend,所以本实验就不做了,具体步骤如下:

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

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

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

创建service

docker service create --name web-data --pulish 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,即存放静态页面的目录

centos7下安装docker(24docker swarm  数据管理)

验证failover时,数据是不是会丢失?

scale up 增加一个副本

docker service update --replicas 2 web-data

我们先来猜测一下,理想的结果应该是:swarm在启动副本的时候,新的副本被同样的挂到volume web-data上了

但是结果是失败的!!1

原因是:以virtualbox为backend的rex-ray volume不支持同时attach到多个host

注:这个时virtualbox本身的问题,而不是rex-ray。如果backend选择Ceph RBD就没有这个问题

更新volume

更新volume的内容

centos7下安装docker(24docker swarm  数据管理)

Failover

模拟故障情况,shutdown节点swarm-worker1,过一会,所有副本都会迁移到swarm-worker2

访问service,所有的内容都保存了下来

centos7下安装docker(24docker swarm  数据管理)

Rex-Ray作为swarm的存储编排方案能够很好的支持跨主机volume管理,而且当容器在集群中迁移的时候volume能够自动迁移