zoukankan      html  css  js  c++  java
  • centos7下安装docker(24docker swarm 数据管理)

    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,为容器集群提供自动化的存储编排能力

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

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

    验证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的内容

    Failover

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

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

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

  • 相关阅读:
    java-date和Calendar运用
    java-date类使用练习(1)
    java-正则表达式
    JAVA-String类的应用
    java-重写equals
    java-抽象类、接口等实际应用 (酒店小案例)
    fuzz系列之libfuzzer
    ZAB协议(转)
    Paxos(转自wiki)
    Zookeeper简介和安装使用
  • 原文地址:https://www.cnblogs.com/lkun/p/8043015.html
Copyright © 2011-2022 走看看