• docker-跨主机存储


    容器分类

    从业务数据的角度看,容器可以分为两类:无状态(stateless)容器和有状态(stateful)容器。

    无状态是指容器在运行过程中不需要保存数据,每次访问的结果不依赖上一次访问,比如提供静态页面的 web 服务器。

    有状态是指容器需要保存数据,而且数据会发生变化,访问的结果依赖之前请求的处理结果,最典型的就是数据库服务器

    volume driver

    volume driver可以实现跨主机管理 data volume 方案

    任何一个 data volume 都是由 driver 管理的,创建 volume 时如果不特别指定,将使用 local 类型的 driver,即从 Docker Host 的本地目录中分配存储空间。如果要支持跨主机的 volume,则需要使用第三方 driver

    Rex-Ray driver

    特点

    1. cep 是开源的,而且社区活跃。
    2. 支持多种 backend,VirtualBox 的 Virtual Media、Amazon EBS、Ceph RBD、OpenStack Cinder 等。
    3. 支持多种操作系统,Ubuntu、CentOS、RHEL 和 CoreOS。
    4. 支持多种容器编排引擎,Docker Swarm、Kubernetes 和 Mesos。
    5. Rex-Ray 安装使用方法非常简单。

    安装配置

    Rex-Ray 以 standalone 进程的方式运行在 Docker 主机上

    在使用 Rex-Ray driver 的主机 docker1 和 docker2 上运行如下命令

    curl -sSL https://rexray.io/install | sh

    然后创建并编辑 Rex-Ray 的配置文件 /etc/rexray/config.yml

    可以使用图形化的在线 Rex-Ray 配置生成器

    VirtualBox backend

    在 VirtualBox 宿主机,即笔记本上启动 vboxwebsrv 服务:
    vboxwebsrv -H 0.0.0.0

    执行如下命令关闭 VirtualBox 的登录认证:
    VBoxManage setproperty websrvauthlibrary null

    在关机状态下修改虚拟机 docker1 和 docker2 的 Storage 配置:

    1.删除 IDE controller。

    2.设置 SATA controller 的 port 数量为最大值 30

    重启 Rex-Ray 服务:
    systemctl restart rexray.service

    运行 rexray volume ls 测试 Rex-Ray 是否能够正常工作。

    列表中的 volume 是当前 VirtualBox 所有的虚拟磁盘。

    创建 Rex-Ray volume

    安装插件

    从Docker 1.13开始,Docker现在支持一种新的插件架构,其中插件可以作为容器安装。

    $ docker plugin install rexray / ebs EBS_ACCESSKEY = access_key EBS_SECRETKEY = secret_key
    

    创建 volume

    在 docker1 或 docker2 上执行如下命令创建 volume:

    rexray volume create mysql_data --size=2

    mark

    使用volume启动docker

    docker run -dit --name mydb_on_docker1 --volume-driver=rexray -v mysql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=passw0rd -d mysql

    未创建成功放弃,改用ceph作为后端存储

    验证volume

    ceph-做后端

    部署文档

    1.更改rex-ray的配置文件

    mark

    其中test-pool是ceph中建的pool

    mark

    2.重启rex-ray服务

    rexray restart

    3.创建卷

    docker volume create --driver rexray --name=mysqldata --opt=size=2

    4.使用卷创建容器

    docker run -dit --name mydb_on_docker1 --volume-driver=rexray -v mysql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=passw0rd -d mysq

    5.写数据测试

    mark

    6.验证数据一致性

    删除mydb_on_docker1

    重新创建一个容器

    docker run --name mydb_on_docker2 -v mysqldata:/var/lib/mysql -d mysql

    新容器也使用相同的卷 mysqldata,不过这次不需要指定环境变量 MYSQL_ROOT_PASSWORD,因为密码已经保存到 mysqldata 里面了。

    现在 Rex-Ray volume mysqldata 已经挂载到 docker2:

    mark

    ① 进入到容器 mydb_on_docker2

    ② 登录数据库,密码与 mydb_on_docker1 一致。

    ③ 切换到数据库 mysql

    ④ 确认之前由 mydb_on_docker1 创建的表和写入的数据完好无损。

  • 相关阅读:
    bzoj2959
    学习笔记::lct
    bzoj3203
    bzoj1319
    bzoj3625
    bzoj3992
    bzoj1565
    bzoj3513
    平常练习动归(1.胖男孩)———最长公共子序列
    2016 noip 复赛 day2
  • 原文地址:https://www.cnblogs.com/mrwuzs/p/9797098.html
Copyright © 2020-2023  润新知