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 服务器的地址。

即可完成挂载。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一文读懂视频号下载

工具&#xff1a; 移动端抓包工具&#xff08;以Stream为例&#xff09;电脑端浏览器电脑端析包工具&#xff08;以Charles为例&#xff09;【可选项】 一、手机抓包 1 开启Stream 2 抓包 手机进入视频号&#xff0c;通过“搜索“的方式发送get请求&#xff0c;达到抓包的效…

在jupyter notebook中使用海龟绘图

首先&#xff0c;安装ipyturtle3 ref:ipyturtle3 PyPI pip install ipyturtle3然后&#xff0c;安装ipycanvas ipycanvas是一个需要安装在与JupyterLab实例相同环境的包。此外&#xff0c;您需要安装nodejs&#xff0c;并启用JupyterLab ipycanvas小部件。 所有这些都在ipy…

ElasticSearch 数据聚合、自动补全(自定义分词器)、数据同步

文章目录 数据聚合一、聚合的种类二、DSL实现聚合1、Bucket&#xff08;桶&#xff09;聚合2、Metrics&#xff08;度量&#xff09;聚合 三、RestAPI实现聚合 自动补全一、拼音分词器二、自定义分词器三、自动补全查询四、实现搜索款自动补全&#xff08;例酒店信息&#xff0…

C#程序变量统一管理例子 - 开源研究系列文章

今天讲讲关于C#应用程序中使用到的变量的统一管理的代码例子。 我们知道&#xff0c;在C#里使用变量&#xff0c;除了private私有变量外&#xff0c;程序中使用到的公共变量就需要进行统一的存放和管理。这里笔者使用到的公共变量管理库划分为&#xff1a;1)窗体&#xff1b;2)…

Python Django 模型概述与应用

今天来为大家介绍 Django 框架的模型部分&#xff0c;模型是真实数据的简单明确的描述&#xff0c;它包含了储存的数据所必要的字段和行为&#xff0c;Django 遵循 DRY Principle 。它的目标是你只需要定义数据模型&#xff0c;然后其它的杂七杂八代码你都不用关心&#xff0c;…

发布python模仿2023年全国职业的移动应用开发赛项样式开发的开源的新闻api,以及安卓接入案例代码

python模仿2023年全国职业的移动应用开发赛项样式开发的开源的新闻api&#xff0c;以及原生安卓接入案例代码案例 源码地址:keyxh/newsapi: python模仿2023年全国职业的移动应用开发赛项样式开发的开源的新闻api&#xff0c;以及安卓接入案例代码 (github.com) 目录 1.环境配…

服务器感染了.360勒索病毒,如何确保数据文件完整恢复?

引言&#xff1a; 随着科技的不断进步&#xff0c;互联网的普及以及数字化生活的发展&#xff0c;网络安全问题也逐渐成为一个全球性的难题。其中&#xff0c;勒索病毒作为一种危害性极高的恶意软件&#xff0c;在近年来频频袭扰用户。本文91数据恢复将重点介绍 360 勒索病毒&a…

扁线电机定子转子工艺及自动化装备

售&#xff1a;扁线电机 电驱对标样件 需要请联&#xff1a;shbinzer &#xff08;拆车邦&#xff09; 新能源车电机路线大趋势&#xff0c;自动化装配产线需求迫切永磁同步电机是新能源车驱动电机的主要技术路线。目前新能源车上最广泛应用的类型为永磁同步电机&#xff0c…

操作系统-笔记-第二章-进程同步与互斥

目录 二、第二章——【进程同步与互斥】 1、进程同步&#xff08;异步&#xff09; 2、进程互斥 & 共享 3、总结&#xff08;互斥、同步&#xff09; 4、进程互斥&#xff08;软件实现&#xff09; &#xff08;1&#xff09;单标志法——谦让【会让他们轮流访问、其…

【通俗易懂】如何使用GitHub上传文件,如何用git在github上传文件

目录 创建 GitHub 仓库 使用 Git 进行操作 步骤 1&#xff1a;初始化本地仓库 步骤 2&#xff1a;切换默认分支 步骤 3&#xff1a;连接到远程仓库 步骤 4&#xff1a;获取远程更改 步骤 5&#xff1a;添加文件到暂存区 步骤 6&#xff1a;提交更改 步骤 7&#xff1a…

spring如何进行依赖注入,通过set方法把Dao注入到serves

1、选择Generate右键鼠标 你在service层后面方法的这些: 2、UserService配置文件的写法是怎样的&#xff1a; 3、我们在UserController中执行一下具体写法&#xff1a; 最后我们执行一下 &#xff1a; 4、这里可能出现空指针&#xff0c;因为你当前web层,因为你new这个对象根…

spring boot分装通用的查询+分页接口

背景 在用spring bootmybatis plus实现增删改查的时候&#xff0c;总是免不了各种模糊查询和分页的查询。每个数据表设计一个模糊分页&#xff0c;这样代码就造成了冗余&#xff0c;且对自身的技能提升没有帮助。那么有没有办法实现一个通用的增删改查的方法呢&#xff1f;今天…

课程项目设计--项目设计--宿舍管理系统--vue+springboot完成项目--项目从零开始

写在前面&#xff1a; 本文是从项目设计到完成开始写的&#xff0c;本来这个项目基础功能是做完了的&#xff0c;但是之前时间紧张想从头做起了。之前一周写前端后端累死了. 设计是关键&#xff0c;这一篇主讲设计。可能后面会有修改&#xff0c;本人实力有限,学习的也是别人的…

搞定二叉树

树的名词与概念 子树&#xff1a;树是一个有限集合&#xff0c;子树则是该集合的子集。就像套娃一样&#xff0c;一棵树下面还包含着其子树。比如&#xff0c;树T1 的子树为 树T2、T3、T4&#xff0c;树T2的子树为 T5、T6 。 上图中还有许多子树没有标记出来 。 结点(Node)&am…

Stable Diffusion:使用自己的数据集微调训练LoRA模型

Stable Diffusion&#xff1a;使用自己的数据集微调训练LoRA模型 前言前提条件相关介绍微调训练LoRA模型下载kohya_ss项目安装kohya_ss项目运行kohya_ss项目准备数据集生成关键词模型参数设置预训练模型设置文件夹设置训练参数设置 开始训练LoRA模型TensorBoard查看训练情况 测…

基于Googlenet深度学习网络的信号调制类型识别matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 深度学习与卷积神经网络 4.2 数据预处理 4.3 GoogLeNet结构 4.4 分类器 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022a 3.部分核心程序 ............…

聚焦电力行业CentOS迁移,麒麟信安受邀参加第六届电力信息通信新技术大会暨数字化发展论坛并发表主题演讲

为加快推进“双碳”目标下的新型能源体系和新型电力系统建设&#xff0c;深化新一代数字技术与电力业务的融合发展&#xff0c;促进电力行业关键技术自主创新、安全可控&#xff0c;助力电力企业数字化转型升级和高质量发展&#xff0c;2023年8月9-11日&#xff0c;第六届电力信…

攻防世界-warmup

原题解题思路 只有一张图片&#xff0c;就查看源代码&#xff0c;有一个source.php。 查看source.php&#xff0c;白名单中还有一个hint.php。 hint.php告诉我们flag的位置ffffllllaaaagggg 但是直接跳转是没用的&#xff0c;构造payload。 http://61.147.171.105:55725/sourc…

Dockerfile制作Web应用系统nginx镜像

目录 1.所需实现的具体内容 2.编写Dockerfile Dockerfile文件内容&#xff1a; 默认网页内容&#xff1a; 3.构建镜像 4.现在我们运行一个容器&#xff0c;查看我们的网页是否可访问 5.现在再将我们的镜像打包并上传到镜像仓库 1.所需实现的具体内容 基于centos基础镜像…

8.部署项目

项目地址&#xff1a;RuoYi-Cloud-Plus: 项目正式入驻 dromara 开源社区 迁移地址: https://gitee.com/dromara/RuoYi-Cloud-Plus 1.获取源码 需要有gitee账户 先把源码fork到自己的仓库中 需要多等待一段时间 勾选对应的环境 构建项目 2.sql导入 将sql导入到与sql文件名…