Docker Swarm NFS 数据持久化存储

news2025/1/18 3:21:48

mydockerswarm


目录

    • 一、Swarm 集群部署
    • 二、NFS 服务部署
    • 三、Swarm 使用 NFS
      • 3.1 通过 Volume
        • 3.1.1 创建 Volume
        • 3.1.2 使用 Volume
        • 3.1.3 验证数据共享特性
      • 3.2 通过 Docker Stack
        • 3.2.1 创建 YAML 文件
        • 3.2.2 使用 YAML 文件
        • 3.2.3 验证数据共享特性


一、Swarm 集群部署

可参考我前面的博客《基于 Linux 的 Docker Swarm 集群部署及应用》

本次实验:

  • master:192.168.56.142
  • work1:192.168.56.132
  • work2:192.168.56.180

二、NFS 服务部署

可参考我前面的博客《构建NFS-FTP文件共享存储》

本次实验:

  • NFS IP:192.168.56.141
  • Shared Dir:/data/sharedir

三、Swarm 使用 NFS

3.1 通过 Volume

3.1.1 创建 Volume

1、创建 Docker Volume

每个 swarm 节点均创建相同名称的 Docker Volume(名称为 nfsdata)

docker volume create --driver local \
  --opt type=nfs \
  --opt o=addr=192.168.56.141,rw \
  --opt device=:/data/sharedir \
  nfsdata

2、查看 Volume 是否创建成功

docker volume ls

# swarm集群节点依次进行验证

image-20230111144019356

3、查看 Volume 详情

docker volume inspect nfsdata

image-20230111144430328

其中:Mountpoint 为 Host 挂载点,Options 为 NFS 服务共享目录信息。

3.1.2 使用 Volume

1、在 docker swarm 的 master 节点执行创建服务操作

docker service create \
  --name nginx-nfs-test \
  --publish 1180:80 \
  --mount type=volume,source=nfsdata,destination=/data/web \
  --replicas 3 \
  nginx:1.20.2

2、查看 Service 部署情况

image-20230111145635747

3.1.3 验证数据共享特性

1、NFS 服务创建测试数据

image-20230111150058510

2、Service 验证是否共享 NFS 数据

image-20230111150309868

可见,数据被共享了,当然,你在容器中 /data/web 目录下产生的数据也会被持久化到 NFS 服务上。

当然,Nginx 也是正常运行的

image-20230111151444719

3.2 通过 Docker Stack

Docker Stack CLI

通过 Volume 方式,你会发现每台 swarm 集群 work 节点都需要创建 Volume(如果 master 节点也为 work 节点,也要创建 Volume )。稍显麻烦,我们可通过 Docker Stack 方式来弥补这点不足,也就是使用 Docker Stack 方式时,就不需要手动创建 Docker Volume 了。

3.2.1 创建 YAML 文件

参考:docker compose CLI

vim nginx-compose.yml

# 以下配置文件会创建一个名为myweb_nginx-nfs-test-1的service
# service命名规则:stack名_service名
version: "3"

services:
  nginx-nfs-test-1:
    image: nginx:1.20.2
    deploy:
      mode: replicated
      replicas: 3
      restart_policy:
        condition: on-failure
    ports:
      - "1181:80"
    networks:
      my-overlay-network:
        aliases:
          - nginx-test-net
    volumes:
      - "mountdata:/data/web"

volumes:
  mountdata:
    driver: local
    driver_opts:
      type: "nfs"
      o: "addr=192.168.56.141,rw"
      device: ":/data/sharedir"

networks:
  my-overlay-network:
    driver: overlay

如果你需要在指定的 Node 节点上运行 Service,可在配置文件中进行指定 Node 节点名(新增 placement 字段)。

version: "3"

services:
  nginx-nfs-test-1:
    image: nginx:1.20.2
    deploy:
      placement:
        constraints:
          - "node.hostname==harbor-nexus"
      mode: replicated
      replicas: 3
      restart_policy:
        condition: on-failure
    ...
    ...

除了可指定节点名外,还可以指定节点 ID、标签等。

3.2.2 使用 YAML 文件

docker stack deploy -c nginx-compose.yml myweb

# 创建一个名为myweb的stack

image-20230111155010050

查看 Service 所在集群节点

image-20230111155249105

3.2.3 验证数据共享特性

我在 3.1 小节中已经向 NFS 添加过测试数据了,现在来验证容器内部有没有测试数据。

docker exec -it myweb_nginx-nfs-test-1.2.dahr1c6am279qgnhf2910449c bash

image-20230111155733010

可见,数据已经同步到 swarm service 容器内部。

至此,Docker Swarm 的数据持久化问题已经解决。当然,除了 NFS 共享存储外,还有 Ceph、ClusterFS 等存储也能实现。实际生产中大家自行修改使用即可。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/158658.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从数据到价值,DataOps精益数据运营概述

作者:陈荣耀 阿里云全球技术服务团队 一、背景&挑战 数字化时代,企业希望借助数字化的技术能力来提升企业的经营能力,从最终业务目标上来看,一般分三类: 1. 增加收入:基于经营数据的智能分析来提升产…

24、TORCH.UTILS.DATA

PyTorch 数据加载实用程序的核心是 torch.utils.data.DataLoader 类。它代表一个可在数据集上迭代的 Python,支持map-style and iterable-style datasets,customizing data loading order,automatic batching,single- and multi-process data loading,automatic mem…

CTK Plugin Framework插件框架学习--服务追踪

文章目录一、前言二、新建插件PluginA三、新建插件PluginB四、测试一、前言 服务追踪:如果想在B插件里使用A服务,可以专门写一个类继承ctkServiceTracker,在这个类里完成对A服务的底层操作,然后在B插件里通过这个类提供的接口来使…

重庆市市长胡衡华会见深兰科技董事长陈海波一行

1月9日,重庆市市长胡衡华会见了赴渝考察调研的深兰科技集团创始人、董事长陈海波一行,双方就开展互利合作进行了深入交流。胡衡华市长会见深兰科技考察团重庆市委常委、副市长陈鸣波,市政府秘书长、办公厅主任欧顺清,市政府副秘书…

ResT: An Efficient Transformer for Visual Recognition

文章地址: https://arxiv.org/pdf/2105.13677.pdf codeResT: An Efficient Transformer for Visual Recognition一、引言二、ResT一、Transformer模块的再思考二、Efficient Transformer Block三、Patch Embedding四、Positional Encoding五、整体架构三、实验一、分类二、目标…

go import package 入门lib1 is not in GOROOT

main.go:4:2: package lib1 is not in GOROOT (/usr/local/go/src/lib1)├── 5-init│ ├── lib1│ │ └── lib1.go│ └── lib2│ └── lib2.go├── const.go├── firstVar.go├── go.mod├── helloGolang.go├── main.go└── test3function.gogo env …

Java学习之单例设计模式

目录 设计模式 单例模式 一、饿汉式 二、懒汉式 三、饿汉式VS懒汉式 总结 设计模式 1.静态方法和属性的经典使用 2.设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格以及解决问题的思考方式。就像是经典的棋谱,不同的棋局,我们用…

连接查询之外连接(左外链接和右外连接)

内连接: 假设A表和B表进行连接查询,使用内连接的话,凡是A表和B表能够匹配上的记录被查询出来,这就是内连接。A、B两张表没有主副之分,两张表是平等的。 外连接: 假设A表和B表进行连接查询,使用…

对于html中div标签height属性的个人理解

对于没有系统学习过css的程序员来说,在编写css样式的时候,div的height属性值确实是个玄学的东西,我也感觉css确实挺玄学的,本文将介绍我对div标签height属性的个人理解,如有问题请指正。 在html中,div标签属…

xilinx srio ip学习笔记之srio example

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 xilinx srio ip学习笔记之srio example前言IP的配置例程前言 前面对SRIO的理论有了初步的理解,现在急需要通过理解例程并且修改例程来建立自信心了。 学东西确实…

Java版本TransH代码的学习

主要讲和TransE代码的区别,TransE文章的链接 Java版本TransE代码的学习 关于范数的概念 什么是0范数、1范数、2范数?区别又是什么 初始化向量 初始化关系平面的向量Wr,初始化向量relation_vec,初始化节点向量entity_vec Wr_vec new doub…

富豪酒店集团全新体验「METAGREEN」上线!边玩边赚,了解可持续发展!

富豪酒店集团推出 MetaGreen 以提高大众对可持续发展的认识,并创造一个多元化的绿色生态系统。 体验将包涵盖数个独特的互动地标,包括环保富豪酒店、大华银行艺术空间、恒生银行元宇宙分行,以及 citysuper、LOG-ON 和 The Mills 等零售商。 …

擎创技术流 | ClickHouse实用工具—ckman教程(9)

哈喽~大家好,时间倏然,上一次ckman分享还是在2022,这一期分享就已经是2023了。由于前段时间小编“成功加入羊群”,导致拖更一周,实在抱歉。希望新的一年大家都可以身体健健康康,事业红红火火,生…

Clarifying Question领域最常见的三个数据集

文章目录Qulacqulac.json:qulac_hist012_dict.tar.gz:MIMICSClariQConvAI3 Data ChallengeStage1: initial datasetStage2: human-in-the-loopClariQ DatasetFile Formattrain.tsv and dev.tsvtest.tsvquestion_bank.tsvdev_synthetic.pkl.tar.gz & train_synthetic.pkl.ta…

【进阶】Spring核心思想及其项目创建

努力经营当下,直至未来明朗! 文章目录一、Spring核心思想1. 容器2. IoC3. SpringIoC4. DI概念说明二、Spring的创建和使用1. 创建Spring项目3. Maven项目导入jar包和设置国内源的方法:2. Spring对象的存储/存储Bean对象3. 从Spring中读取到Be…

Electron自定义协议Protocol对web网站做数据交互,使用SSE实时数据推送到网站

(防盗镇楼)本文地址:https://blog.csdn.net/cbaili/article/details/128651549 前言 最近在撸VUE,想要实现一份代码既能构建Web又能构建Electron应用 并且能够判断环境是浏览器还是Electron,随后在Electron中做一些特定的事情 以往的Electron通信依靠IPC通信完成,但是发布到…

模板(template)包含与继承

Django 模板查找机制: Django 查找模板的过程是在每个 app 的 templates 文件夹中找(而不只是当前 app 中的代码只在当前的 app 的 templates 文件夹中找)。各个 app 的 templates 形成一个文件夹列表,Django 遍历这个列表&#x…

超详细的Socket通信原理和实例讲解

我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket&am…

【算法篇-排序】八大排序

十大排序0.常见排序1. 插入排序(直接插入排序和希尔排序)1.1直接插入排序1.2希尔排序(缩小增量排序)2.选择排序2.1选择排序2. 2堆排序3.交换排序3.1 冒泡排序3.2快速排序3.2.1hoare版本快排3.2.2挖坑法3.2.3前后指针法3.3.4 快排的…

【Linux】在Linux上写一个进度条小程序

👑作者主页:安 度 因 🏠学习社区:安度因的学习社区 📖专栏链接:Linux 文章目录一、前言二、理解 \r 与 \n三、行缓冲1、提出问题2、认识行缓冲3、解答与拓展4、倒计时四、进度条五、结语如果无聊的话&#…