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集群提供了两种方式解决数据持久化问题:

  1. volume模式:默认模式,将工作节点宿主机的目录同步到容器内。
  2. 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 服务器的地址。

即可完成挂载。

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

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

相关文章

13个顶级AI代码助手排行榜【2023最新】

AI代码助手&#xff08;AI Coding Assistant&#xff09;是一种利用人工智能帮助开发人员更快、更准确地编写代码的软件工具。 它可以通过根据提示生成代码或在你实时编写代码时建议自动完成代码来实现此目的。 以下是AI代码助手可以做的一些事情&#xff1a; 与你使用的流行代…

YOLOv5可视化界面

Pyside6可视化界面 安装Pyside6 激活之前的虚拟环境yolov5 在该环境的终端输入以下命令 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyside6输入where python找到当前使用的Python的路径 找到该路径下的designer.exe文件&#xff08;/Lib/site-packages/PySi…

布置Zabbix监控

一、在 Web 页面中添加 agent 主机 1.1打开Zabbix的Web页面 2.2在 Web 页面中添加 agent 主机 二、在 Web 页面创建自定义监控项模板 2.1创建模版

Chrome

Chrome 简介下载 简介 Chrome 是由 Google 开发的一款流行的网络浏览器。它以其快速的性能、强大的功能和用户友好的界面而闻名&#xff0c;并且在全球范围内被广泛使用。Chrome 支持多种操作系统&#xff0c;包括 Windows、macOS、Linux 和移动平台。 Chrome官网: https://ww…

css3新增选择器总结

目录 一、属性选择器 二、结构伪类选择器 三、伪元素选择器 四、UI状态伪类选择器 五、反选伪类选择器 六、target选择器 七、父亲选择器、后代选择器 八、相邻兄弟选择器、兄弟们选择器 一、属性选择器 &#xff08;除IE6外的大部分浏览器支持&#xff09; E&#…

嵌入式面试笔试刷题(day10)

文章目录 前言一、数组和链表的区别二、什么是内存对齐三、IIC的时序四、static作用五、查看tty设备的方法六、查找指定文件命令七、三次握手和四次挥手1.三次握手2.四次挥手 八、半关闭状态九、字节流和数据报总结 前言 本篇文章继续讲解笔试和面试。 一、数组和链表的区别 …

PHP 使用ThinkPHP实现电子邮件发送示例

文章目录 首先我们需要设置我们的邮箱客户端授权&#xff0c;获取到授权码找到我们的邮箱设置去账号中找到这一堆服务&#xff0c;找到后开启smtp服务开启服务后管理服务 接下来需要去下载相应的第三方类库(我这里使用的是PHPMailer)在thinkPHP中封装一下邮件服务类实际调用效果…

数据结构—图的应用

6.4图的应用 概念回顾—生成树 生成树&#xff1a;所有顶点均由边连接在一起&#xff0c;但不存在回路的图。 一个图可以有许多棵不同的生成树、含有n个顶点 n-1 条边的图不一定是生成树所有生成树具有以下共同特点 生成树的顶点个数与图的顶点个数相同&#xff1b;生成树是图的…

如何运用小程序技术闭环运营链路?

如何通过线上小程序获取用户线索&#xff0c;提高企业抗风险能力&#xff0c;建立有效的营销数字化系统一直是困扰每一个小程序开发者与运营者的问题。 当我们选择使用小程序设计自己的运营流程时&#xff0c;从「推广」到「转化」&#xff0c;再到最终的「留存」都是运营过程…

ABeam×Startup丨德硕管理咨询(深圳)创新研究团队前往灵境至维·既明科技进行拜访交流

近日&#xff0c;德硕管理咨询&#xff08;深圳&#xff09;&#xff08;以下简称“ABeam-SZ”&#xff09;创新研究团队一行前往灵境至维既明科技有限公司&#xff08;以下简称“灵境至维”&#xff09;进行拜访交流&#xff0c;探讨线上虚拟空间的商业模式。 现场合影 &…

Qt扫盲-QWidget理论使用总结

QWidget理论使用总结 一、概述二、顶层 控件 和子 控件三、复合控件四、自定义控件和绘制五、大小提示和大小策略六、事件七、一组函数和属性八、QWidget样式表九、透明度和双缓冲十、创建半透明窗口 一、概述 widget 是用户界面的最小单位&#xff1a;它从window系统接收鼠标…

Jsoup爬取简单信息

1. 豆瓣图书最受关注 1.1 创建SpringBoot项目或者Maven项目 1.2 引入jsoup <dependency><!-- jsoup HTML parser library https://jsoup.org/ --><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.15.3<…

Qt应用开发(基础篇)——堆栈窗口 QStackedWidget

一、前言 QStackedWidget继承于QFrame&#xff0c;QFrame继承于QWidget&#xff0c;是Qt常用的堆栈窗口部件。 框架类QFrame介绍 QStackedWidget堆栈窗口&#xff0c;根据下标切换&#xff0c;一次显示一个小部件&#xff0c;常用于应用界面切换、图片轮询播放等场景。 二、QSt…

中小企业体育代言:探索费用策略与实际操作

随着体育市场的不断扩大和企业品牌的不断提升&#xff0c;中小型企业正逐渐将目光投向了体育明星代言&#xff0c;希望通过这一策略来提升品牌知名度、美誉度&#xff0c;进而吸引目标消费者的注意力并提升销售量。然而&#xff0c;中小型企业请体育明星代言的费用究竟是多少呢…

element-ui的el-dialog,简单的封装。

el-dialog是使用率很高的组件 使用el-dialog很多都是按照文档的例子&#xff0c;用一个变量控制是否显示&#xff0c;再来一个变量控制标题。 如果我这个对话框多个地方使用的话还要创建多个变量&#xff0c;甚至关闭之后还要清空一些变量&#xff0c;应该可以简化一点。我写…

Windows Hyper-V Ubuntu 22.04 LTS安装

文章目录 Ubuntu准备Hyper-V启用虚拟化支持services.msc 打开服务列表&#xff0c;关注Hyper-V服务是否启动打开管理器创建虚拟机 启动备份 Ubuntu 下载Ubuntu-Desktop&#xff0c;这是个iso文件。 准备 20GB以上的磁盘空间&#xff0c;ubuntu安装后的虚拟磁盘文件超过15GB一…

C/C++test两步完成CMake项目静态分析

您可能一直在静态分析中使用CMake。但您是否尝试过将Parasoft C/Ctest与CMake一起使用吗&#xff1f;以下是如何使用C/Ctest在基于CMake的项目中运行静态分析的详细说明。 CMake是用于构建、测试和打包软件的最流行的工具之一。Parasoft C/Ctest通过简化构建管理过程&#xff…

【Minecraft】Fabric Mod开发完整流程1 - 环境配置与第一个物品

前言 Fabric 是 Minecraft 一款非官方的模组 API,与 Forge mod 不同。它以轻量级和高性能为设计目标,专注于支持新版本的 Minecraft。 Fabric 和 Forge 在各自的加载编译流程上差别很大&#xff0c;所以你很难看见有同时支持二者的 mod&#xff0c;除非做了兼容性处理 Fabri…

【Java笔记】对象存储服务MinIO

1 MinIO简介 MinIO基于Apache License v2.0开源协议的对象存储服务&#xff0c;可以做为云存储的解决方案用来保存海量的图片&#xff0c;视频&#xff0c;文档。由于采用Golang实现&#xff0c;服务端可以工作在Windows,Linux, OS X和FreeBSD上。配置简单&#xff0c;基本是复…

mac-右键-用VSCode打开

1.点击访达&#xff0c;搜索自动操作 2.选择快速操作 3.执行shell脚本 替换代码如下&#xff1a; for f in "$" doopen -a "Visual Studio Code" "$f" donecommand s保存会出现一个弹框&#xff0c;保存为“用VSCode打开” 5.使用