当前位置: 首页 > news >正文

Docker Swarm 集群搭建

Docker Swarm Mode
Docker Swarm 集群搭建
Docker Swarm 节点维护
Docker Service 创建

1.准备主机

 搭建一个 docker swarm 集群,包含 5 个 swarm 节点。这 5 个 swarm 节点的 IP 与暂
时的角色分配如下(注意,搭建完成后会切换角色):

hostiprole
docker192.168.137.100manager
docker2192.168.137.101manager
docker3192.168.137.102manager
docker4192.168.137.103worker
docker5192.168.137.104worker

Hyper-v 设置静态IP 搭建集群

2.搭建swarm集群

2.1 查看 swarm 激活状态

在任意 docker 主机上通过 docker info 命令可以查看到当前 docker 引擎 Server 端对于swarm 的激活状态。由于尚未初始化 swarm 集群,所以这些 docker 主机间没有任何关系,且 swarm 均未被激活。

docker info

在这里插入图片描述

2.2 swarm 初始化

在主机名为“docker”的主机上运行 docker swarm init 命令,创建并初始化一个 swarm。

# 如果多网卡,需要指定ip。--advertise-addr参数表示其它swarm中的worker节点使用此ip地址与manager联系。
docker swarm init --advertise-addr 192.168.137.100:2377 --listen-addr 192.168.137.100:2377

在这里插入图片描述

2.3 添加 worker 节点

复制 docker swarm init 命令的响应结果中添加 wroker 节点的命令在 docker4 与 docker5节点上运行,将这两个节点添加为 worker 节点。

# ip表示manager主机ip:port
# --advertise-addr参数表示worker节点使用此ip地址与manager联系
docker swarm join --token SWMTKN-1-14pekii6qepms5f3tfg8wt7rixqyybjb12ga8vahme52fm490i-43kozm8fpi1s9ist2kk4ysv36 192.168.137.100:2377 --advertise-addr 192.168.137.103:2377docker swarm join --token SWMTKN-1-14pekii6qepms5f3tfg8wt7rixqyybjb12ga8vahme52fm490i-43kozm8fpi1s9ist2kk4ysv36 192.168.137.100:2377 --advertise-addr 192.168.137.104:2377

2.4 添加 manager 节点

(1)获取添加命令

若要为 swarm 集群添加 manager 节点,需要首先在 namager 节点获取添加命令

docker swarm join-token manager

(2)添加节点

复制 docker swarm join-token 命令生成的 manager 添加命令,然后在 docker2 与 docker3节点上运行,将这两个节点添加为 manager 节点。

docker swarm join --token SWMTKN-1-14pekii6qepms5f3tfg8wt7rixqyybjb12ga8vahme52fm490i-6cqtvvvohw38xgcdn06bgecyp 192.168.137.100:2377 --advertise-addr 192.168.137.101:2377docker swarm join --token SWMTKN-1-14pekii6qepms5f3tfg8wt7rixqyybjb12ga8vahme52fm490i-6cqtvvvohw38xgcdn06bgecyp 192.168.137.100:2377 --advertise-addr 192.168.137.102:2377

2.5 查看 swarm 节点

在 manager 任意一个节点 docker、docker2、docker3 上通过 docker node ls 命令可以查看到当前swarm 集群所包含的节点状态数据。

在这里插入图片描述

3. swarm 集群维护

当一个节点想从 swarm 集群中退出时,可以通过 docker swarm leave 命令。不过 worker节点与 manager 节点的退群方式是不同的。

3.1 worker 退群

对于 worker 节点退群,直接运行 docker swarm leave 命令即可。

在这里插入图片描述

此时在 manager 节点中查看节点情况,可以看到 docker4 已经 Down 了。

3.2 worker 重新加入

在 manager 节点上运行 docker swarm join-token worker 命令,查看加入 worker 节点的命令。

复制生成的命令,在 docker4 节点上运行,将此节点添加到 swarm 集群。

docker swarm join --token SWMTKN-1-14pekii6qepms5f3tfg8wt7rixqyybjb12ga8vahme52fm490i-43kozm8fpi1s9ist2kk4ysv36 192.168.137.100:2377 --advertise-addr 192.168.137.103:2377

3.3 查看节点情况

此时在 manager 节点中查看节点情况,可以看到原来的 docker4 依然是 Down,但又新增了一个新的 docker4 节点,其状态为 Ready。

在这里插入图片描述

此时在 manager 节点通过 docker info 命令可以查看到节点数量变为了 6 个。

在这里插入图片描述

3.4 删除 Down 状态节点

对于Down状态的节点是完全可以将其删除的。通过在manager节点运行docker node rm命令完成。

docker node rm <nodeId>

在这里插入图片描述

3.5 manager 退群

 对于 manager 节点,原则上是不推荐直接退群的,这样会导致 swarm 集群的一致性受到损坏。如果 manager 执意要退群,可在 docker swarm leave 命令后添加-f`` 或–force`` 选项进行强制退群。

4. swarm 自动锁定

4.1 swarm 集群自动锁定原理

 在 manager 集群中,swarm 通过 Raft 日志方式维护了 manager 集群中数据的一致性。即在 manager 集群中每个节点通过 manager 间通信方式维护着自己的 Raft 日志。

 但在通信过程中存在有一种风险:Raft 日志攻击者会通过 Raft 日志数据的传递来访问、篡改 manager 节点中的配置或数据。为了防止被攻击,swarm 开启了一种集群自动锁定功能,为 manager 间的通信启用了 TLS 加密。用于加密和解密的公钥与私钥,全部都维护在各个节点的 Docker 内存中。一旦节点的 Docker 重启,则密钥丢失

 swarm 中通过 autolock 标志来设置集群的自动锁定功能:为 true 则开启自动锁定,为
false 则关闭自动锁定。

4.2 设置自动锁定

 在 manager 节点通过 docker swarm update –-autolock=true 命令可以开启当前 swarm 集群的自动锁定功能。

在这里插入图片描述

此时查看 manager 的 docker info 可以看到,autolock 已经为 true 了。

在这里插入图片描述

4.3 查看解锁密钥

如果没有保存 docker swarm update --autolock=true 命令中生成的密钥,也可通过在manager 中运行 docker swarm unlock-key 命令查看。

4.4 关闭一个 manager, 模拟宕机重新加入

直接关闭 docker3 的 docker 引擎,模拟一个 manager 宕机的情况。再启动 docker3 的 docker 引擎。

systemctl stop docker
systemctl start docker

此时再查看该节点的 docker info,可以看到 Swarm 值为 locked,即当前节点看到的 Swarm集群的状态为锁定状态,其若要加入,必须先解锁。

在这里插入图片描述

即使 docker3 已经正常启动,也没有被加入到集群中

在这里插入图片描述

在 docker3 中运行 docker swarm unlock 命令 输入密钥,解锁 swarm。

此时再查看节点信息,该 manager 已经加入。

在这里插入图片描述

相关文章:

Docker Swarm 集群搭建

Docker Swarm Mode Docker Swarm 集群搭建 Docker Swarm 节点维护 Docker Service 创建 1.准备主机 搭建一个 docker swarm 集群&#xff0c;包含 5 个 swarm 节点。这 5 个 swarm 节点的 IP 与暂 时的角色分配如下&#xff08;注意&#xff0c;搭建完成后会切换角色&#xff…...

Mac 开机提示Google LLC 注册 无法登录进入系统

Google LLC 会在电脑启动时提示如下弹窗&#xff0c;并要求登录谷歌账户进行验证 此时很明显没有用来进行验证的账号&#xff0c;所以需要关掉这个验证程序 从日志里面可以看到LLC启动了一个Tiny.app的程序 只需要想办法把这个程序删掉即可 关机 按住 Command R 开机 进入R…...

excel单元格各种组合求和

单元格如果连续选择的话使用冒号&#xff0c;不是连续选择使用逗号&#xff1b;sum(A1:A4)表示对A1到A4求和&#xff1b;sum(A1,A4)表示求A1A4的和&#xff1b; 如下图&#xff0c;求斜线上四个单元格的和&#xff0c;结果见下图&#xff1b; 求A列和C列全部单元格的和&#x…...

SysTick—系统定时器

SysTick 简介 SysTick—系统定时器是属于CM3内核中的一个外设&#xff0c;内嵌在NVIC中。系统定时器是一个24bit 的向下递减的计数器&#xff0c;计数器每计数一次的时间为1/SYSCLK&#xff0c;一般我们设置系统时钟SYSCLK 等于72M。当重装载数值寄存器的值递减到0的时候&#…...

ATPCS:ARM-Thumb程序调用的基本规则

为了使单独编译的c文件和汇编文件之间能够互相调用&#xff0c;需要制定一系列的规则&#xff0c;AAPCS就是ARM程序和Thumb程序中子程序调用的基本规则。 1、ATPCS概述 ATPCS规定了子程序调用过程中寄存器的使用规程、数据站的使用规则、参数的传递规则。为了适应一些特殊的需…...

Swift 判断 A B 两个时间是不是同一天,A 是不是 B 的昨天

1. 今天要做这个效果&#xff08;在时间旁边显示今天&#xff0c;昨天&#xff09; 2. Preview 3. Code: // 添加 今天 昨天 func show_today_yesterday(d: Date Date()) -> String {let calendar Calendar.currentlet today: Date Date()if calendar.isDate(today, inS…...

华为OD 高效的任务规划(200分)【java】A卷+B卷

华为OD统一考试A卷+B卷 新题库说明 你收到的链接上面会标注A卷还是B卷。目前大部分收到的都是B卷。 B卷对应20022部分考题以及新出的题目,A卷对应的是新出的题目。 我将持续更新最新题目 获取更多免费题目可前往夸克网盘下载,请点击以下链接进入: 我用夸克网盘分享了「华为O…...

使用VGG框架实现从二分类到多分类

一.数据集的准备 与之前的不同&#xff0c;这一次我们不使用开源数据集&#xff0c;而是自己来制作数据集。重点需要解决的问题是对数据进行预处理&#xff0c;如每一个图片的大小均不同&#xff0c;需要进行resize&#xff0c;还需要对每一张图片打标签等操作。 数据集文件 …...

Ubuntu服务器配置qq邮箱发送信息

效果&#xff1a; 此处设置的是自己给自己发送&#xff0c;配合linux的cron实现定时触发发送事件的效果 实现过程&#xff1a; 安装邮箱客户端Postfix sudo apt-get install postfix配置Postfix&#xff1a;编辑Postfix的主要配置文件 /etc/postfix/main.cf&#xff0c;并在…...

HTML读书笔记

HTML的读书笔记 概述 Jack 2023.10.23 参考网站&#xff1a; w3school 在线教程 HTML 头部 | 菜鸟教程 本教程已教你如何使用 HTML 创建站点。 HTML 是一种在 Web 上使用的通用标记语言&#xff08;并不是类似Python一样的编程语言&#xff09;。HTML 允许你格式化文本&…...

初识Java

一、Java语言概述 1.1 Java是什么 Java是一种优秀的程序设计语言&#xff0c;它具有令人赏心悦目的语法和易于理解的语义 不仅如此&#xff0c;Java还是一个有一系列计算机软件和规范形成的技术体系&#xff0c;这个技术体系提供了完整的用于软件开发和跨平台部署的支持环境&a…...

bootstrap.properties中配置Nacos

bootstrap.properties用于在Spring Boot应用程序启动阶段加载外部配置 优先级高&#xff1a;在应用程序启动时首先加载&#xff0c;用于配置应用程序的基础设置&#xff0c;如配置数据源、日志、配置服务器 外部配置&#xff1a;加载外部配置源&#xff08;如远程配置服务器&a…...

【CVPR 2023】Diffusion Models高分辨率长视频生成 Align your Latents

Diffusion Models专栏文章汇总:入门与实战 前言:CVPR 2023年的工作《Align your Latents: High-Resolution Video Synthesis with Latent Diffusion Models》实现了高帧率高分辨率长视频生成,并在保持时间一致性上做了很多工作。这篇博客详细解读一下背后的原理,并总结一下…...

[Linux 基础] make、Makefile自动化构建代码工具

文章目录 1、make与Makefile是什么2、为什么要有make与Makefile3、怎么实现一个Makefile文件3.1 如何编写Makefile文件3.1.1 依赖关系3.1.2 依赖方法 3.2 如何清理项目3.2.1 如何编写3.2.2 clean详解 3.3 make的使用3.4 原理3.4.1 查看文件修改时间 1、make与Makefile是什么 m…...

vue3结合Cesium加载倾斜摄影3dtiles

这篇文章主要是为了记录加载3dtiles时模型与地形有时候存在一些高度上的差异&#xff0c;为此将解决方法做一个记录&#xff0c;便于其他读者使用。 加载倾斜摄影3dtitle //加载倾斜摄影图像 function init3Dtiles() {const tileSet new Cesium3DTileset({url: "http://1…...

面对DDoS和APT攻击,我们该如何有效防御?

关于DDoS&#xff08;Distributed Denial of Service&#xff09;分布式拒绝服务攻击&#xff0c;是指攻击者通过技术手段&#xff0c;在很短的时间内对目标攻击网站发出大量请求&#xff0c;极大地消耗相关网站的主机资源&#xff0c;导致其无法正常服务。 打个比方来说&#…...

【前端学习】—Vue生命周期(十七)

【前端学习】—Vue生命周期&#xff08;十七&#xff09; 一、Vue生命周期 二、Vue父子组件生命周期调用顺序 三、Vue中在哪个生命周期内调用异步请求...

ant的Path-like结构

ant可以使用path和classpath结构指明路径。path和classpath可以包含内嵌的元素&#xff0c;类似下面的通用形式&#xff1a; <classpath><pathelement path"${classpath}"/><pathelement location"lib/helper.jar"/> </classpath>…...

Java设计模式之组合模式

比如在实现一个文件管理系统时&#xff0c;对于客户端来说&#xff0c;如果需要区分文件与文件夹的使用&#xff0c;会比较麻烦&#xff0c;使用组合模式可以在使用不同对象时使用方法保持一致性。 定义 又名部分整体模式&#xff0c;是用于把一组相似的对象当作一个单一的对…...

划词搜索IP插件

插件背景 浏览器插件可以让用户根据个人工作及日常需求来定制浏览器的功能和界面。当用户在网页上看到一些IP地址时&#xff0c;或许会好奇它们的来源和归属。传统的做法是&#xff0c;用户需要复制这个IP地址&#xff0c;然后跳转到埃文科技旗下的http://IPUU.net网站进行查询…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战&#xff1a;腾讯云IM群组成员管理&#xff08;增删改查&#xff09; 一、前言 在社交类App开发中&#xff0c;群组成员管理是核心功能之一。本文将基于UniApp框架&#xff0c;结合腾讯云IM SDK&#xff0c;详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...