docker-swarm集群搭建

目录

 一、docker swarm介绍

二、部署docker

三、搭建集群

3.1  工作模式

 3.2  将当前主机作为leader

3.3  将第二个节点slave1加入到worker

3.4  将第三个节点slave2也加入到worker

3.5  将第四个节点(slave3)加入到manager

四、总结


 一、docker swarm介绍

Docker Swarm是一个用于构建和管理容器集群的工具。它允许你将多个Docker主机组成一个虚拟的单一主机,以便更好地扩展应用程序,并提供高可用性和负载均衡。Swarm使用了一种称为"swarm mode"的特殊模式来管理集群。

在Swarm中,你可以将多个Docker主机连接到一个Swarm集群,并使用docker service命令来创建和管理服务。服务是由一组任务(或容器)组成的,并且可以指定副本数、网络配置、容器启动参数等。Swarm会自动将任务分配到可用的主机上,以实现负载均衡和高可用性。

Docker Swarm还提供了内置的负载均衡和服务发现机制,它能够自动将流量路由到运行任务的节点上,并保证服务的可用性。此外,Swarm还具备故障恢复的能力,当某个节点出现故障时,Swarm会自动重新调度任务到其他可用的节点上。

二、部署docker

创建四台虚拟机或者四台服务器

部署过程如下

安装部署docker全部过程以及基础使用命令入门必看!-CSDN博客

shell脚本一键部署docker-CSDN博客

保证四个都安装成功


三、搭建集群


3.1  工作模式

为了便于查看,更改主机名

节点的主机名分别为:master   slave1   slave2   slave3

查看当前网络

[root@master ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
b786a56417fd   bridge    bridge    local
7bcb407e6553   host      host      local
47f66a3a9185   none      null      local

查看帮助

[root@master ~]# docker swarm --help

Usage:  docker swarm COMMAND

Manage Swarm

Commands:
  init        Initialize a swarm
  join        Join a swarm as a node and/or manager

Run 'docker swarm COMMAND --help' for more information on a command.

[root@master ~]# docker swarm init --help

Usage:  docker swarm init [OPTIONS]

Initialize a swarm

Options:
      --advertise-addr string                  Advertised address (format: "<ip|interface>[:port]")
      --autolock                               Enable manager autolocking (requiring an unlock key to start a
                                               stopped manager)
      --availability string                    Availability of the node ("active", "pause", "drain") (default
                                               "active")
      --cert-expiry duration                   Validity period for node certificates (ns|us|ms|s|m|h)
                                               (default 2160h0m0s)
      --data-path-addr string                  Address or interface to use for data path traffic (format:
                                               "<ip|interface>")
      --data-path-port uint32                  Port number to use for data path traffic (1024 - 49151). If no
                                               value is set or is set to 0, the default port (4789) is used.
      --default-addr-pool ipNetSlice           default address pool in CIDR format (default [])
      --default-addr-pool-mask-length uint32   default address pool subnet mask length (default 24)
      --dispatcher-heartbeat duration          Dispatcher heartbeat period (ns|us|ms|s|m|h) (default 5s)
      --external-ca external-ca                Specifications of one or more certificate signing endpoints
      --force-new-cluster                      Force create a new cluster from current state
      --listen-addr node-addr                  Listen address (format: "<ip|interface>[:port]") (default
                                               0.0.0.0:2377)
      --max-snapshots uint                     Number of additional Raft snapshots to retain
      --snapshot-interval uint                 Number of log entries between Raft snapshots (default 10000)
      --task-history-limit int                 Task history retention limit (default 5)

 3.2  将当前主机作为leader

[root@master ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:d9:41:26 brd ff:ff:ff:ff:ff:ff
    inet 192.168.200.10/24 brd 192.168.200.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fed9:4126/64 scope link
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:2f:5c:d0:b8 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever

[root@master ~]# docker swarm init --advertise-addr 192.168.200.10
Swarm initialized: current node (0r9pr636ujer02raru7kcpgw9) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-2pwtfth6qpuypkez62l411vlcsng0zw48q6immmg3aeoydf5fj-4m1wj6met556fugcqbl2dk2uz 192.168.200.10:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

 节点1(master)为leader

初始化节点 docker swarm init

docker swarm join 加入一个节点!

# 获取令牌

docker swarm join-token manager

docker swarm join-token worker

3.3  将第二个节点slave1加入到worker

[root@master ~]# docker swarm join --token SWMTKN-1-2pwtfth6qpuypkez62l411vlcsng0zw48q6immmg3aeoydf5fj-4m1wj6met556fugcqbl2dk2uz 192.168.200.10:2377
This node joined a swarm as a worker.

第一个节点master查看node

[root@master ~]# docker node ls
ID                            HOSTNAME   STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
0r9pr636ujer02raru7kcpgw9 *   master     Ready     Active         Leader           25.0.4
o622mci81bykwzj5ujczut3jy     slave1     Ready     Active                          25.0.4

创建worker密钥

[root@master ~]# docker swarm join-token worker
To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-2pwtfth6qpuypkez62l411vlcsng0zw48q6immmg3aeoydf5fj-4m1wj6met556fugcqbl2dk2uz 192.168.200.10:2377

3.4  将第三个节点slave2也加入到worker

[root@slave2 ~]# docker swarm join --token SWMTKN-1-2pwtfth6qpuypkez62l411vlcsng0zw48q6immmg3aeoydf5fj-4m1wj6met556fugcqbl2dk2uz 192.168.200.10:2377
This node joined a swarm as a worker.

master节点再次查看node

[root@master ~]# docker node ls
ID                            HOSTNAME   STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
0r9pr636ujer02raru7kcpgw9 *   master     Ready     Active         Leader           25.0.4
o622mci81bykwzj5ujczut3jy     slave1     Ready     Active                          25.0.4
ykwdxdwl589cxox8ffevap4hb     slave2     Ready     Active                          25.0.4

3.5  将第四个节点(slave3)加入到manager

创建manager密钥

[root@master ~]# docker swarm join-token manager
To add a manager to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-2pwtfth6qpuypkez62l411vlcsng0zw48q6immmg3aeoydf5fj-5ntj8tg2i2vahtljs614qjydj 192.168.200.10:2377

在slave3节点上使用

[root@slave3 ~]# docker swarm join --token SWMTKN-1-2pwtfth6qpuypkez62l411vlcsng0zw48q6immmg3aeoydf5fj-5ntj8tg2i2vahtljs614qjydj 192.168.200.10:2377
This node joined a swarm as a manager.

master节点再次查看

[root@master ~]# docker node ls
ID                            HOSTNAME   STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
0r9pr636ujer02raru7kcpgw9 *   master     Ready     Active         Leader           25.0.4
o622mci81bykwzj5ujczut3jy     slave1     Ready     Active                          25.0.4
ykwdxdwl589cxox8ffevap4hb     slave2     Ready     Active                          25.0.4
73lftyll7or01s0s0ld4urips     slave3     Ready     Active         Reachable        25.0.4

搭建完成

两个管理节点,两个工作节点

两主两从


四、总结

1、生成主节点 init

2、加入(管理者、worker)

Docker Swarm适合构建和管理容器集群,以实现高可用性和负载均衡

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

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

相关文章

CSS顶部与JS后写:网页渲染的奥秘

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

动态规划(算法竞赛、蓝桥杯)--数位DP度的数量

1、B站视频链接&#xff1a;E38 数位DP 度的数量_哔哩哔哩_bilibili #include <bits/stdc.h> using namespace std; const int N34; int a[N];//把B进制数的每一位抠出存入数组 int f[N][N];//f[i][j]表示在i个位置上&#xff0c;放置j个1的组合数 int K,B;void init(…

11.Node.js入门

一.什么是 Node.js Node.js 是一个独立的 JavaScript 运行环境&#xff0c;能独立执行 JS 代码&#xff0c;因为这个特点&#xff0c;它可以用来编写服务器后端的应用程序 Node.js 作用除了编写后端应用程序&#xff0c;也可以对前端代码进行压缩&#xff0c;转译&#xff0c;…

Java 数据结构之链表

public ListNode getIntersectionNode(ListNode headA, ListNode headB) {if (headA null || headB null) return null;ListNode pA headA, pB headB;while (pA ! pB) {pA pA null ? headB : pA.next;pB pB null ? headA : pB.next;}return pA;} public ListNode rev…

2024.3.6每日一题

LeetCode 找出数组中的 K -or 值 题目链接&#xff1a;2917. 找出数组中的 K-or 值 - 力扣&#xff08;LeetCode&#xff09; 题目描述 给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。 nums 中的 K-or 是一个满足以下条件的非负整数&#xff1a; 只有在 nums 中&…

【开源】SpringBoot框架开发教学资源共享平台

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 课程档案模块2.3 课程资源模块2.4 课程作业模块2.5 课程评价模块 三、系统设计3.1 用例设计3.2 类图设计3.3 数据库设计3.3.1 课程档案表3.3.2 课程资源表3.3.3 课程作业表3.3.4 课程评价表 四、系统展…

遗传算法GA求解机器人栅格地图最短路径规划,可以自定义地图及起始点(提供MATLAB代码)

一、原理介绍 遗传算法是一种基于生物进化原理的优化算法&#xff0c;常用于求解复杂问题。在机器人栅格地图最短路径规划中&#xff0c;遗传算法可以用来寻找最优路径。 遗传算法的求解过程包括以下几个步骤&#xff1a; 1. 初始化种群&#xff1a;随机生成一组初始解&…

先进电机技术 —— 高速电机与低速电机

一、背景 高速电机是指转速远高于一般电机的电动机&#xff0c;通常其转速在每分钟几千转至上万转甚至几十万转以上。这类电机具有功率密度高、响应速度快、输出扭矩大等特点&#xff0c;在航空航天、精密仪器、机器人、电动汽车、高端装备制造等领域有着广泛的应用。 高速电…

【Pytorch】新手入门:基于sklearn实现鸢尾花数据集的加载

【Pytorch】新手入门&#xff1a;基于sklearn实现鸢尾花数据集的加载 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f448; 希望…

学习和认知的四个阶段,以及学习方法分享

本文分享学习的四个不同的阶段&#xff0c;以及分享个人的一些学习方法。 一、学习认知的四个阶段 我们在学习的过程中&#xff0c;总会经历这几个阶段&#xff1a; 第一阶段&#xff1a;不知道自己不知道&#xff1b; 第二阶段&#xff1a;知道自己不知道&#xff1b; 第三…

模板不存在:./Application/Home/View/OnContact/Index.html 错误位置

模板不存在:./Application/Home/View/OnContact/Index.html 错误位置FILE: /home/huimingdedhpucixmaihndged5e/wwwroot/ThinkPHP123/Library/Think/View.class.php  LINE: 110 TRACE#0 /home/huimingdedhpucixmaihndged5e/wwwroot/ThinkPHP123/Library/Think/View.class.php(…

【REST2SQL】11 基于jwt-go生成token与验证

【REST2SQL】01RDB关系型数据库REST初设计 【REST2SQL】02 GO连接Oracle数据库 【REST2SQL】03 GO读取JSON文件 【REST2SQL】04 REST2SQL第一版Oracle版实现 【REST2SQL】05 GO 操作 达梦 数据库 【REST2SQL】06 GO 跨包接口重构代码 【REST2SQL】07 GO 操作 Mysql 数据库 【RE…

论文阅读:Iterative Denoiser and Noise Estimator for Self-Supervised Image Denoising

这篇论文是发表在 2023 ICCV 上的一篇工作&#xff0c;主要介绍利用自监督学习进行降噪的。 Abstract 随着深度学习工具的兴起&#xff0c;越来越多的图像降噪模型对降噪的效果变得更好。然而&#xff0c;这种效果的巨大进步都严重依赖大量的高质量的数据对&#xff0c;这种对…

在 Python 中 JSON 数据格式的使用

在 Python 中 JSON 数据格式的使用 JSON 简介 JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式。它易于阅读和编写&#xff0c;并且与许多编程语言兼容。 Python 中的 JSON 模块 Python 标准库中包含一个 json 模块&#xff0c;用于处理…

【嵌入式——QT】MDI应用程序设计

MDI应用程序就是在主窗口里创建多个同类型的MDI子窗口&#xff0c;这些MDI子窗口在主窗口里显示&#xff0c;并享受主窗口上的工具栏和菜单等操作功能&#xff0c;主窗口上的操作都针对当前活动的MDI子窗口进行。 图示 代码示例 QWMainWindow.h #ifndef QWMAINWINDOW_H …

静态路由--添加路由表,实现非直连网段的通信

建立拓扑&#xff1a; 路由器**只有直连网段的路由表,而对非直连并不拥有,因此要在路由器的路由表中手动添加非直连网段的路由. ** 也就是说对于AR2来说&#xff0c;**网段192.168.10.0**和**网段192.168.40.0**是他的直连网段。进一步说这两个网端的设备可以相互通信而网段19…

flink 总结

flink 流式api checkpoint state 状态分类 Managed State 和 Raw State Managed State Flink 自己管理&#xff0c;支持多种数据结构 Raw State 用户自己管理&#xff0c; 只支持byte Managed Staste 分为 Keyed State 和 operator State Managed State 只能在Keyed Str…

浅谈Redis和分布式系统

浅谈Redis Redis用于存储数据&#xff0c;且在内存当中进行存储。 但是在日常编写代码中&#xff0c;定义一个变量也就属于在内存当中存储一个数据。 Redis主要会在分布式系统当中发挥重要作用&#xff0c;如果只是单机程序&#xff0c;直接通过变量存储数据的方式会比使用Re…

ubuntu安装开源汇编调试器NASM

安装 安装很简单&#xff0c;直接在终端输入以下命令即可 sudo apt-get install nasm 安装完成后&#xff0c;如果可以查看到nasm的版本号即可视为安装成功 nasm -version 测试 创建汇编文件 创建一个asm文件 vim hello.asm 文件内容如下 section .datahello: db …

【Nestjs实操】环境变量和全局配置

一、环境变量 1、使用dotenv 安装pnpm add dotenv。 根目录下创建.env文件&#xff0c;内容如下&#xff1a; NODE_ENVdevelopment使用 import {config} from "dotenv"; const path require(path); config({path:path.join(__dirname,../.env)}); console.log(…