docker-跨主机存储
容器分类
从业务数据的角度看,容器可以分为两类:无状态(stateless)容器和有状态(stateful)容器。
无状态是指容器在运行过程中不需要保存数据,每次访问的结果不依赖上一次访问,比如提供静态页面的 web 服务器。
有状态是指容器需要保存数据,而且数据会发生变化,访问的结果依赖之前请求的处理结果,最典型的就是数据库服务器
volume driver
volume driver可以实现跨主机管理 data volume 方案
任何一个 data volume 都是由 driver 管理的,创建 volume 时如果不特别指定,将使用 local 类型的 driver,即从 Docker Host 的本地目录中分配存储空间。如果要支持跨主机的 volume,则需要使用第三方 driver
Rex-Ray driver
特点
- cep 是开源的,而且社区活跃。
- 支持多种 backend,VirtualBox 的 Virtual Media、Amazon EBS、Ceph RBD、OpenStack Cinder 等。
- 支持多种操作系统,Ubuntu、CentOS、RHEL 和 CoreOS。
- 支持多种容器编排引擎,Docker Swarm、Kubernetes 和 Mesos。
- 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

使用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的配置文件

其中test-pool是ceph中建的pool

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.写数据测试

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:

① 进入到容器 mydb_on_docker2。
② 登录数据库,密码与 mydb_on_docker1 一致。
③ 切换到数据库 mysql。
④ 确认之前由 mydb_on_docker1 创建的表和写入的数据完好无损。
docker-跨主机存储的更多相关文章
- centos7下安装docker(16.docker跨主机存储)
从业务数据的角度看,容器可以分为两类:无状态(stateless)容器和有状态(stateful)容器. 无状态:是指容器在运行的过程中不需要保存数据,每次访问的结果不依赖上一次的访问,比如提供静态页 ...
- Docker跨主机网络——overlay
前言 在Docker网络--单host网络一文中,我为大家总结了Docker的单机网络相关知识和操作,单机网络比较容易.本文我为大家总结Docker跨主机通信相关知识.同样本文大部分内容以CloudM ...
- 基于Ceph分布式集群实现docker跨主机共享数据卷
上篇文章介绍了如何使用docker部署Ceph分布式存储集群,本篇在此基础之上,介绍如何基于Ceph分布式存储集群实现docker跨主机共享数据卷. 1.环境准备 在原来的环境基础之上,新增一台cen ...
- Docker跨主机网络实践
Docker使用中网络管理是最麻烦的,在项目初始化前期就需要进行合理的规划,如果在比较理想的单主机的网络通信是比较简单的,但如果涉及到跨主机的网络就需要使用docker自带的overlay netwo ...
- Docker使用rexray做跨主机存储
Rex-Ray 是一个优秀的 Docker volume driver,不过只有最新版docker才支持. Rex-Ray 以 standalone 进程的方式运行在 Docker 主机上,安装方法很 ...
- 安装docker跨主机网络flannel
一.实验环境 机器 操作系统 安装服务 172.16.4.36 centos7 docker etcd flannel 172.16.4.37 centos7 docker etcd flanne ( ...
- docker 跨主机网络:overlay 简介
简介 docker 在早前的时候没有考虑跨主机的容器通信,这个特性直到 docker 1.9 才出现.在此之前,如果希望位于不同主机的容器能够通信,一般有几种方法: 使用端口映射:直接把容器的服务端口 ...
- docker 实践十一:docker 跨主机通讯
在上一篇了解了关于 docker 的网络模型后,本篇就基于上一篇的基础来实现 docker 的跨主机通信. 注:环境为 CentOS7,docker 19.03. 本篇会尝试使用几种不同的方式来实现跨 ...
- Docker 跨主机网络方案分析
PS:文章首发公众号,欢迎大家关注我的公众号:aCloudDeveloper,专注技术分享,努力打造干货分享平台,二维码在文末可以扫,谢谢大家. 上篇文章介绍了容器网络的单主机网络,本文将进一步介绍多 ...
- Docker跨主机通信(九)--技术流ken
容器网络 在前面的博客中已经详细讲解了几种网络方案: none, host, bridge,user-defined.但是他们只是解决了单个主机间的容器的通信问题,并不能实现多个主机容器之间的通信.本 ...
随机推荐
- SuperMap iClient 如何使用 WMTS 地图服务(转载)
原文链接: WMTS服务初步理解与读取 https://blog.csdn.net/supermapsupport/article/details/76806670 SuperMap iClient ...
- Android入门第一课之Java基础
通知:由于本周六场地申请没通过,所以本周的培训临时取消. 今天给大家带来的是Android入门的第一课,由于教室申请的不确定性,因此,每次培训的内容都会在博客先提前释放出来.首先Android的APP ...
- js计算剩余分钟
// 剩余时间提醒 function checkTime() { if (timeCompare()) { document.getElementById('distanceDeadline').in ...
- 【原】Java学习笔记006 - 流程控制
package cn.temptation; public class Sample01 { public static void main(String[] args) { // 需求:写一万次&q ...
- Win10 - MySQL 5.7 忘记密码
Win10 - MySQL 5.7 忘记密码 # 关闭 mysql 服务 net stop mysql # 在命令行输入以下命令, 输入后新建一个 CMD 窗口 mysqld -nt --skip-g ...
- UGUI合批原理笔记
可以通过Frame debugger查看每个drawcall绘制了哪些东西 UGUI源码下载地址:https://bitbucket.org/Unity-Technologies/ui/downloa ...
- HBase实践案例:车联网监控系统
项目背景 本项目为车联网监控系统,系统由车载硬件设备.云服务端构成.车载硬件设备会定时采集车辆的各种状态信息,并通过移动网络上传到服务器端.服务器端接收到硬件设备发送的数据首先需要将数据进行解析,校验 ...
- npm:Fatal error in , line 0 #unreachable code 解决
是nodejs环境本身的问题,下载nodejs执行repair即可
- 转://ORA-00603,ORA-27501,ORA-27300,ORA-27301,ORA-27302故障案例一则
背景介绍: 这是一套windows的rac系统.数据库后台日志报ORA-00474:SMON process terminated with error.接着报ORA-00603,ORA-27501, ...
- linux 网卡的混杂模式的取消
1.Linux下网卡常用的几种模式说明: 广播方式:该模式下的网卡能够接收网络中的广播信息. 组播方式:设置在该模式下的网卡能够接收组播数据. 直接方式:在这种模式下,只有目的网卡才能接收该数据. 混 ...