11. Docker Swarm(二)
1、前言
上一篇中我们利用Docker Swarm搭建了基础的集群环境。那么今天我们就来验证以下该集群的可用性。上一篇的示例中,我创建了3个实例副本,并且通过访问http://192.168.74.132:8080得到我们的页面。


2、验证高可用
1)我们可以通过以下命令查看当前应用的节点信息:
docker service ps swarm_demo

可以看出在IP为132,133,134上各启动了一个容器来运行。
2)此时,我们将134上的节点容器关掉:
# 查看容器信息,拿到容器ID
docker ps# 停止该容器
docker stop <容器ID>

3)停止完后,我们再到master节点上查看节点信息:

可以看到134节点上出现运行的容器宕机了,但是由于我们将节点的副本数量设置为3,所以Swarm集群自动的又重新启动了一个容器。通过当前状态可以看到启动的时间。
4)如果我们把134的docker容器整个停止掉:
![]()
5)我们再来查看master节点节点信息:

我们会发现3个节点副本中,有2个启动在了132的节点上。
而我们依然可以访问我们的应用:

3、热更新
Docker Swarm实现平滑升级,也就是不停机更新。
1)更新Dockerfile文件,版本号version改为2:
FROM nginx
RUN echo '<h1> My first Swarm demo, version: 2</h1>' > /usr/share/nginx/html/index.html
2)重新编译镜像:
docker build -t pengyaohuang/swarm_nginx_demo:2 .
3)上传Docker Hub:
docker login
docker push pengyaohuang/swarm_nginx_demo:2

4)更新之前Swarm部署的服务:
docker service update --image pengyaohuang/swarm_nginx_demo:2 swarm_demo

5)访问应用:

4、数据持久化
与单机环境一样,Docker Swarm集群中的容器也是无状态的服务。如果在Swarm集群行了MySQL 等有状态的服务,若没有将数据挂载到宿主机中,那么一旦容器被销毁,则意味着据会丢失。
Docker Swarm集群提供了两种方式解决数据持久化问题:
- volume模式:默认模式,将工作节点宿主机的目录同步到容器内。
- NFS模式:通过网络文件系统实现数据持久化。
4.1、volume挂载
这里的数据卷方式与docker容器下的数据卷完全一样。可以使用以下命令挂载数据卷:
docker service create -p 8080:80 --replicas 3 --name swarm_demo \--mount type=volume,src=myvolume,dst=/usr/share/nginx/html/ \pengyaohuang/swarm_nginx_demo:1
这里使用--mount进行挂载数据卷。这里将容器/usr/share/nginx/html/目录挂载到宿主机定义的myvolume目录下。
查看数据卷信息,可以使用:
docker volume ls
通过volume模式挂载的数据卷,可以实现容器与宿主机间的数据持久化,但是无法实现群中各个节点的数据共享。
4.2、NFS
为了解决volume无法在各个节点中共享数据的问题,Swarm 集群中更常用的一种方式是,使用NFS(网络文件系统来实现数据的共享与持久化。
NFS(网络文件系统)允许计算机之间通过TCP/IP 网络共享资源。在NFS应用中,NFS客户端可以透明地读写远端NFS 服务器上的文件,就像访问本地文件一样。
系统结构图如下:

其中,NFS可被看成是 NFS 的服务器端,而 Docker 节点(master 节点、node1 节点、node2 节点)则可以被看成是NFS的客户端。因此,整个系统是 Client-Server 结构。
为了方便进行测试,可以将 master 节点作为 NFS Server。但在实际的环境中,一般可以单独搭建一个节点作为NFS Server。
1)安装NFS:
yum install -y nfs-utils
systemctl start nfs
2)master节点中编辑/etc/exports文件:
# 输入以下配置信息
/nfs *(rw,sync,no_root_squash)
参数说明:
- /nfs:NFS共享目录
- *:所有网段可以访问主机网段
- rw:可读写权限
- sync:数据传输采用同步方式,async表示异步
- no_root_squash:NFS共享目录属性
3)master节点上创建/nfs目录:
mkdir /nfs
# 重启nfs节点
systemctl restart nfs
4)Node1节点上启动NFS客户端:
systemctl start rpcbind
5)在Node1节点上挂载NFS目录:
# 创建node1节点的目录
mkdir /nfs-node1
# 将master节点的目录/nfs挂载到node1节点的nfs-node1上
mount -t nfs 192.168.74.132:/nfs /nfs-node1
6)测试,node1目录上新建一个文件:
Node1节点上:

master节点上:

可以看到文件已经进行了同步。
7)Swarm集群中创建服务:
docker service create --replicas 3 --name swarm_demo -p 8080:80 \--mount 'type=volume,src=mynfsvol,dst=/usr/share/nginx/html,volume-driver=local,volume-nocopy=true,volume-opt=type=nfs,volume-opt=device=192.168.74.132:/nfs,"volume-opt=o=addr=192.168.74.132,vers=4,soft,timeo=180,bg,tcp,rw"' \pengyaohuang/swarm_nginx_demo:1
参数说明:
- type=volume:数据存储类型
- src=mynfsvol:数据卷名称
- dst=/usr/share/nginx/html:挂载到容器中的目录
- volume-opt=type=nfs:数据卷的类型
- volume-opt=device=192.168.74.132:/nfs:挂载的 NFS 目录
- volume-opt=o=addr=192.168.74.132: NFS 服务器的地址。
即可完成挂载。
相关文章:
11. Docker Swarm(二)
1、前言 上一篇中我们利用Docker Swarm搭建了基础的集群环境。那么今天我们就来验证以下该集群的可用性。上一篇的示例中,我创建了3个实例副本,并且通过访问http://192.168.74.132:8080得到我们的页面。 2、验证高可用 1)我们可以通过以下命…...
注册中心Eureka和Nacos,以及负载均衡Ribbon
1.初识微服务 1.1.什么是微服务 微服务,就是把服务拆分成为若干个服务,降低服务之间的耦合度,提供服务的独立性和灵活性。做到高内聚,低耦合。 1.2.单体架构和微服务架构的区别: 单体架构:简单方便&#…...
php+tcpdf生成pdf:中文乱码
亲测成功,感谢分享! 查看原文 TCPDF是一个生成PDF的不错的库,可惜,官方对包括中文在内的东亚字体支持不怎么样的。 场景:某项目需要根据数据库信息生成pdf格式的发票,考虑采用稳定的tcpdf,虽然…...
【AI实战】BERT 文本分类模型自动化部署之 dockerfile
【AI实战】BERT 文本分类模型自动化部署之 dockerfile BERTBERT 文本分类模型基于中文预训练bert的文本分类模型针对多分类模型的loss函数样本不均衡时多标签分类时 dockerfile编写 dockerfilebuild镜像运行docker测试服务 参考 本文主要介绍: 基于BERT的文本分类模…...
深入理解 Flutter 图片加载原理 | 京东云技术团队
前言 随着Flutter稳定版本逐步迭代更新,京东APP内部的Flutter业务也日益增多,Flutter开发为我们提供了高效的开发环境、优秀的跨平台适配、丰富的功能组件及动画、接近原生的交互体验,但随之也带来了一些OOM问题,通过线上监控信息…...
Spring Boot 支持多种环境,包括开发环境、测试环境、预发布环境和生产环境。
Spring Boot 支持多种环境,包括开发环境、测试环境、预发布环境和生产环境。不同的环境具有不同的配置,可以在不同的环境中对应用程序进行测试、验证和部署。以下是每种环境的用途和相应的代码案例。 开发环境 开发环境是开发人员在本地进行开发的环境&…...
Ctfshow web入门 命令执行RCE篇 web29-web77 与 web118-web124 详细题解 持续更新中(预计8.18完成)~
Ctfshow 命令执行 web29 pregmatch是正则匹配函数,匹配是否包含flag,if(!preg_match("/flag/i", $c)),/i忽略大小写 可以利用system来间接执行系统命令 flag采用f*绕过,或者mv fl?g.php 1.txt修改文件名,…...
合宙Air724UG LuatOS-Air script lib API--wifiRil
wifiRil Table of Contents wifiRil wifiRil.regRsp(head, fnc, typ, formt) wifiRil.regUrc(prefix, handler) wifiRil.deRegUrc(prefix) wifiRil.request(cmd, arg, onrsp, delay, param) wifiRil 模块功能:esp8266 wifi模块AT命令交互管理 wifiRil.regRsp(head,…...
python读取word/pdf文档,指定文字内容和图片
读编号转文件夹目录然后放图片进去那个 一 先将word转为PDF pdf 读起来比较方便, 按页码读取文件: import pdfplumber from PIL import Image import cv2 import numpy as np import re import os import logging import iodef create_folder(folder_name):if not…...
零售行业供应链管理核心KPI指标(二) – 线上订单履行周期
一般品牌零售商有一个大的渠道就是全国连锁的商超、大卖场,非常重要的渠道,要去铺货。同类型的产品都在竞争这个大渠道,但商超、大卖场在这类产品的容量是有限的,所以各个品牌就要去争夺整个容量,看谁在有限的容量里占…...
VGG分类实战:猫狗分类
关于数据集 数据集选择的是Kaggle上的Cat and Dog,猫狗图片数量上达到了上万张。你可以通过这里进入Kaggle下载数据集Cat and Dog | Kaggle。 在我的Github仓库当中也放了猫狗图片各666张。 VGG网络 VGG的主要特点是使用了一系列具有相同尺寸 3x3 大小的卷积核进…...
C++11并发与多线程笔记(3)线程传参详解,detach()大坑,成员函数做线程函数
C11并发与多线程笔记(3)线程传参详解,detach 大坑,成员函数做线程函数 1、传递临时对象作为线程参数1.1 要避免的陷阱11.2 要避免的陷阱21.3 总结 2、临时对象作为线程参数2.1 线程id概念2.2 临时对象构造时机抓捕 3、传递类对象…...
说几个常见的语法糖
目录 面试回答 知识扩展 如何解语法糖? 糖块一、swith 支持 String 与枚举 糖块二、泛型 糖块三、自动装箱与拆箱 糖块四、枚举 糖块五、条件编译 糖块六、断言 糖块七、数值字面量 糖块八、for-each 糖块九、try-with-resource 可能遇到的坑 泛型 自…...
Python文件操作与输入输出:从基础到高级应用
文章目录 🍀引言🍀文件操作基础🍀上下文管理器与文件自动关闭🍀文件的迭代与逐行读取🍀文件的其他常见操作🍀输入输出基础🍀 文件输入输出🍀格式化输出🍀高级文件操作&am…...
leetcode算法题--找出最安全路径
原题链接:https://leetcode.cn/problems/find-the-safest-path-in-a-grid/description/ func maximumSafenessFactor(grid [][]int) int {n : len(grid)type pair struct {x inty int}p : make([]pair, 0)dis : make([][]int, n)for i : range dis {dis[i] make([…...
神经网络基础-神经网络补充概念-34-正则化
概念 正则化是一种用于控制模型复杂度并防止过拟合的技术,在机器学习和深度学习中广泛应用。它通过在损失函数中添加一项惩罚项来限制模型的参数,从而使模型更倾向于选择简单的参数配置。 理解 L1 正则化(L1 Regularization)&a…...
idea打jar包
目录 1、打包设置 2、打包介绍 3、开始打包 1、打包设置 先设置要打包的模块信息,即打包进去的内容。如下图所示:File --> Project Structure --> Artifacts,点击+号完成模块创建,其中有两种方式:…...
民安汇智(第三方旅游服务暗访)开展旅游景区度假区明察暗访复核检查服务
近日,民安汇智受客户委托对该市某旅游景区度假区进行明察暗访复核检查工作。 民安汇智通过实地调研、体验式暗访等各种方式对该市范围内3A级以上旅游景区、旅游度假区及2022年新创建的3A级以上旅游景区、旅游度假区进行明察暗访复核检查,对照《旅游景区…...
《游戏编程模式》学习笔记(六)单例模式 Singleton Pattern
单例模式的定义 保证一个类只有一个实例,并且提供了访问该实例的全局访问点。 定义这种东西一般都是不说人话的,要想要理解这句话的意思,我们得把它揉开了才能搞明白。 我们先看前半句 “保证一个类只有一个实例”,单例一般使用…...
《Go 语言第一课》课程学习笔记(二)
初窥门径:一个 Go 程序的结构是怎样的? 创建“hello,world”示例程序 在 Go 语言中编写一个可以打印出“hello,world”的示例程序,我们只需要简单两步,一是创建文件夹,二是开始编写和运行。通…...
Langchain的学习(一)
目录 一,实操 编码 Runnable Runnable 是什么 核心方法(所有 Runnable 都有) 最关键能力:用 | 组合(LCEL) 常用内置 Runnable 总结 二,聊天模型-核心能力 定义模型 init_chat_model 本地部署 调用工具 定义工具-Tool version1 schema: version2(基于…...
别再手动拖拽了!用Java POI + XSSFDrawing,5行代码搞定Excel单元格图片批量插入(附完整源码)
5行代码实现Excel图片批量插入:Java POI XSSFDrawing高效开发指南 1. 为什么需要自动化Excel图片插入? 在日常报表开发中,我们经常遇到需要将大量图片(如用户头像、产品图)嵌入Excel单元格的场景。传统手动操作存在三…...
Keil MDK中EVR选项缺失的解决方案与原理
1. 问题现象解析:EVR选项缺失的典型表现 在Keil MDK开发环境中使用Event Recorder(事件记录器)时,开发者常会遇到一个令人困惑的现象:按照官方文档配置printf重定向到EVR时,STDOUT的下拉菜单中本该出现的&q…...
水培种菜翻车了?可能是水质问题!用NodeMCU和TDS传感器给你的营养液做个“体检”
水培种菜翻车了?可能是水质问题!用NodeMCU和TDS传感器给你的营养液做个“体检” 看着阳台上蔫头耷脑的生菜叶子,你开始怀疑人生——明明按照教程配了营养液,定时补光通风,为什么植物就是长不好?别急着怪自己…...
最新彩虹云商城重构版 虚拟商城 在线下单 自动发货
内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 彩虹云商城重构版 【重构】数据面板显示样式和布局 【优化】一级分类提示,更加详细,添加对模板导航引入说明 【优化】系统概览页面 【优化】供货商商品列表显示…...
Boomi 与 Gong 达成合作,将 Revenue AI 引入 Boomi Agentstudio
Gong 的 Revenue AI 现已原生集成至 Boomi Enterprise Platform 面向 AI 时代的数据激活公司 Boomi 今日宣布,与 Revenue AI 领域领导者 Gong 达成合作,将 Gong 捕获的营收信号原生整合至 Boomi Enterprise Platform。通过此次合作,企业可构…...
地平线旭日X3派边缘AI开发板深度体验:从开箱到模型部署实战
1. 项目概述:当“地平线”升起时,我们看到了什么?最近几年,如果你关注边缘计算、机器人或者智能驾驶,那么“地平线”这个名字你一定不陌生。它早已不是那个遥远的天际线,而是成为了国内AI芯片领域一个响当当…...
从CNN到ViT:混合网络架构的设计哲学与PyTorch实战
1. 项目概述:为什么我们需要混合网络?在计算机视觉领域待了十几年,我亲眼见证了模型架构的“风水轮流转”。从早期的LeNet、AlexNet,到后来统治多年的ResNet、DenseNet等纯卷积神经网络,再到这两年Transformer架构&…...
【Perplexity医生信息搜索实战指南】:3大隐藏技巧让临床决策效率提升70%
更多请点击: https://kaifayun.com 第一章:Perplexity医生信息搜索实战指南概述 Perplexity 是一款基于大语言模型的智能搜索工具,其核心优势在于支持自然语言提问、实时联网检索与引用溯源。在医疗健康领域,尤其面向医生资质核查…...
Yuzu模拟器进阶设置指南:图形选项怎么调?多核CPU如何利用?让你的《王国之泪》帧数翻倍
Yuzu模拟器进阶设置指南:图形选项与多核CPU优化实战 当《塞尔达传说:王国之泪》在Yuzu模拟器上运行时,你是否遇到过这些情况:画面闪烁不定、帧数剧烈波动、复杂场景突然卡顿?这些问题往往源于模拟器设置与硬件特性的不…...
