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

006Gere4ly1fvrs5sjcuzj30i207odg0.jpg

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

006Gere4ly1fvrs5funmhj310y0lsabj.jpg

VirtualBox backend

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

006Gere4ly1fvrs622mrwj30su09gq32.jpg

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

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

1.删除 IDE controller。

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

006Gere4ly1fvrsenc8o3j30jr0c73yy.jpg

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

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

006Gere4ly1fvrsgm94fyj310708dt9y.jpg

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

创建 Rex-Ray volume

安装插件

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

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

006Gere4ly1fvrtms0q7ij30m402xaa1.jpg

创建 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 创建的表和写入的数据完好无损。

转载于:https://www.cnblogs.com/mrwuzs/p/9797098.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker中使用Prometheus,可以通过docker-compose实现持久化存储。具体步骤如下: 1. 创建一个docker-compose.yml文件,在其中定义Prometheus服务和数据卷。 ``` version: '3' services: prometheus: image: prom/prometheus volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml - prometheus_data:/prometheus command: - '--config.file=/etc/prometheus/prometheus.yml' - '--storage.tsdb.path=/prometheus' ports: - '9090:9090' volumes: prometheus_data: ``` 在上面的配置中,我们定义了一个名为“prometheus”的服务,它使用Prometheus的官方镜像,并将配置文件和数据卷映射到宿主机上。配置文件将在后面的步骤中创建。 2. 创建Prometheus配置文件。 在宿主机上创建一个名为“prometheus.yml”的文件,并添加以下内容: ``` global: scrape_interval: 15s # 默认的采集时间为15秒 evaluation_interval: 15s # 默认的评估时间为15秒 scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['localhost:9090'] - job_name: 'node_exporter' static_configs: - targets: ['node-exporter:9100'] # node-exporter的服务名为node-exporter ``` 在上面的配置中,我们定义了两个作业(jobs):“prometheus”和“node_exporter”。第一个作业是Prometheus自身的监控,而第二个作业是用于监控主机资源的node_exporter。 3. 启动Prometheus服务。 在命令行中进入docker-compose.yml所在的目录,并输入以下命令启动服务: ``` docker-compose up -d ``` 这将在后台启动Prometheus服务,并将数据存储在名为“prometheus_data”的数据卷中。 现在,可以通过浏览器访问localhost:9090来访问Prometheus仪表板。可以在仪表板中添加监控指标并设置报警规则。 总结: 上述步骤演示了如何使用docker-compose在Docker中持久化存储Prometheus数据。通过这种方式,可以轻松地管理和监控容器化应用程序,并确保数据不会丢失。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值