zoukankan      html  css  js  c++  java
  • 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 创建的表和写入的数据完好无损。

  • 相关阅读:
    VC 常见问题百问
    python windows 环境变量
    Check server headers and verify HTTP Status Codes
    Where are the AES 256bit cipher suites? Please someone help
    outlook 如何预订会议和会议室
    安装Axis2的eclipse插件后,未出现界面
    windows 环境变量
    python 时间日期处理汇集
    openldap学习笔记(使用openldap2.3.32)
    set p4 environment in windows
  • 原文地址:https://www.cnblogs.com/mrwuzs/p/9797098.html
Copyright © 2011-2022 走看看