文章目录

  • 准备工作
  • 工作模式
  • 搭建集群
  • Raft协议
  • docker service
  • 常用命令
  • 概念总结
    • 服务副本与全局服务
    • 拓展:网络模式: "PublishMode": "ingress" Swarm:
  • 关于安全组
  • 遇到的错误

准备工作

  1. 购买准备4台服务器(需要在同一内网)。(为了避免忘记释放服务器,可以设置几个小时自动释放,也可以选择手动释放)

  2. 为所有主机安装Docker
    技巧:xshell可以右键发送命令到所有的会话,这样多个主机就可以同时安装了。

工作模式

docker swarm 地址:https://docs.docker.com/engine/swarm/


docker集群分为工作节点和管理节点
管理节点:负责管理工作节点,也提供服务。
工作节点:提供服务。

搭建集群

查看docker swarm的帮助命令

init 初始化一个集群 --advertise-addr:公布address 。

  1. 创建集群
    我这里的ip是172.26.131.206,(请使用内网ip,ECS内网通信不产生流量费)
docker swarm init --advertise-addr 172.26.131.206 #创建集群,当前主机会自动变成manager节点


2. 添加一个worker节点(在第二台主机上执行命令)(如果此步报错,请确保节点之间能互相ping通,且安全组是否设置ip白名单)

docker swarm join --token SWMTKN-xxx 172.26.131.206:2377   #这个在创建集群时,会输出到控制台


3. 将另外两台节点添加进去

#生成manager节点的令牌(在manager节点执行)
docker swarm join-token manger
#生成worker节点的令牌(在manager节点执行)
docker swarm join-token worker
#查看节点命令(在manager节点执行)
docker node ls

按照这个方式,构建出双主双从。
manager status 为Leader表示领导节点,Reachable表示可达,也是主节点,其它无标注的表示work节点。

Raft协议

双主双从:假设一个节点挂掉,其他节点是否可用?
Raft协议:保证大多数节点存活才可以,必须大于1,集群至少3台。
实验:
环境备注:1和3为manager,2和4为worker

1.将docker1停止,双主,另外一台节点也不能使用了。
(停掉(systemctl stop docker)了第一台ecs(manager节点)上的docker,在第三台ecs执行docker node ls提示服务不可用。

  1. 将1启动(systemctl start docker)。继续测试,停掉一台worker节点。
  • 在节点1启动后,我们会发现Leader发生了变化。(这表示节点3变成了Leader)

  • 此时我们将节点2停掉
#两条指令执行其一均可
systemctl stop docker #停掉docker(在节点2执行)
docker swarm leave  #离开集群(在节点2执行,将该节点离开集群)
docker swarm leave --force  #强制离开集群(如果集群无法连通的话,可能导致无法离开集群,此时使用强制离开)

这里执行了离开集群,再次查看节点,发现节点2的状态变成了Down

3. 在主节点生成manager令牌(见前面如何生成令牌),将节点2 变成manager节点后,发现现在是一台Leader,两台Reachable。

  1. work是用来工作的,管理节点操作,3台主机设置为manager

架构简单,集群可以用。3个主节点,只要大于1台管理节点即可使用。
Raft协议,保证大多数节点活,才可以使用,高可用。

docker service

docker swarm 弹性,扩缩容,汲取!
docker run(单容器部署) > docker compose (多服务单机部署启动) > swarm (集群部署docker service)
容器=> 服务!
容器=> 服务! =>副本
redis服务=>10个副本!
体验:创建服务,动态扩容服务,动态更新服务。

注意:所有的docker service都在manager节点上操作

创建一个服务
docker service create -p 8888:80 --name mynginx nginx


docker run 容器启动! 不具有扩缩容能力
docker service 服务! 具有扩缩容器,滚动更新!

查看服务REPLICAS

#查看服务
docker service ps mynginx

动态扩缩容(replicas 副本)

#扩容副本3台(将会有3个实例)
docker service update --replicas 3 mynginx

注:填写数量是指扩容到的意思,不是增加的意思。比如填写20,那么实际上一共20个mynginx容器,
同样也可以减少。比如之前20个mynginx,现在填写5,那么同样存在5个mynginx容器。

scale扩缩容
与上面replicas副本实际效果一样
同样可以减少,可以增加。

#扩容到6台
docker service scale mynginx=6

常用命令

docker swarm常用命令
Docker swarm init:初始化一个集群
docker swarm join-token manager/worker 生成join令牌
Docker swarm join:加入一个集群
docker swarm leave 离开集群
docker swarm leave --force 强制离开集群
Docker node ls:查看集群的信息
Docker service create:创建一个集群服务
Docker service ls:查看集群的服务
Docker service rm:删除一个集群服务
docker service ps mynginx 查看服务
docker service update --replicas 10 mynginx 扩容副本(增加/减少至10个)
docker service scale mynginx=10 扩缩容(增加/减少至10个)

概念总结

swarm
集群的管理和编号。
docker可以初始化一个swarm集群,其它节点可以加入。(manager,worker)
Node
Node节点,多个节点就组成了一个网络集群。(manager,worker)
Service
任务,可以在管理节点或者工作节点来运行。核心,用户访问1
Task
容器内的命令,细节任务!

逻辑是不变的。
命令->管理->api->调度->工作节点(创建Task容器维护创建!)

服务副本与全局服务

调整service以什么方式运行
--mode string
Service mode (replicated or global) (default "replicated")
docker service create --mode replicated --name mytom tomcat:7 默认的
docker service create --mode global --name haha alpine ping baidu.com
#场景?日志收集
每一个节点有自己的日志收集器,过滤。把所有日志最终再传给日志中心
服务监控,状态性能。

拓展:网络模式: “PublishMode”: “ingress” Swarm:

Overlay:
ingress : 特殊的 Overlay 网络! 负载均衡的功能! IPVS VIP!
虽然docker在4台机器上,实际网络是同一个! ingress 网络 ,是一个特殊的 Overlay 网络

关于安全组

集群需要开放的端口

作用 协议 端口
集群管理通信 TCP 2377
节点通信 TCP&UDP 7946
覆盖型网络 UDP 4789

或者你可以配置安全组规则,集群服务器使用相同的安全组,把各服务器的内网ip配置到docker swarm安全组,开放所有流量。
EC2示例:

ECS 示例:

遇到的错误

错误1: Error response from daemon: rpc error: code = Unknown desc = The swarm does not have a leader. It’s possible that too few managers are online. Make sure more than half of the managers are online

解决方法:
请注意配置安全组,将docker swarm节点设置为ip白名单。

docker集群(1):docker swarm相关推荐

  1. Docker集群管理之Swarm介绍

    [摘要] Docker自诞生以来,其容器特性以及镜像特性给DevOps爱好者带来了诸多方便.然而在很长的一段时间内,Docker只能在单host上运行,其跨host的部署.运行与管理能力颇受外界诟病. ...

  2. docker集群管理之swarm mode

    序言 当有多台物理机的时候,就要考虑使用集群的模式了,那么docker如何来使用集群来进行管理呢?在这里主要使用的是docker自带的swarm mode,也就是docker集群的管理和编排.所谓的编 ...

  3. Swarm搭建Docker集群

    Swarm介绍 Swarm是Docker公司在2014年12月初发布的一套较为简单的工具,用来管理Docker集群,它将一群Docker宿主机变成一个单一的,虚拟的主机.Swarm使用标准的Docke ...

  4. Docker学习笔记 — Swarm搭建Docker集群

    http://www.cnblogs.com/rio2607/p/4445968.html#undefined Swarm介绍 Swarm是Docker公司在2014年12月初发布的一套较为简单的工具 ...

  5. Docker集群管理(DockerHub Harbor 打包-Jib 任务编排工具- docker-compose和Swarm)

    Docker 集群管理 Docker 集群管理 镜像仓库管理 DockerHUb仓库管理 什么是DockerHUb 账号注册和登陆 Docker客户端登录 管理镜像 推送镜像 仓库镜像测试 regis ...

  6. docker集群管理

    docker集群管理 ps:docker machine     docker swarm       docker compose  在Docker Machine发布之前,你可能会遇到以下问题: ...

  7. SKIL/安装/Docker集群

    Docker集群 使用Docker可以设置SKIL集群.如果你还没有这样做,我们建议你在尝试设置集群之前下载并运行单个Docker镜像. 要配置Docker Skil CE群集,你需要以下镜像: My ...

  8. docker swarm的应用----docker集群的构建

    一.docker安装 这里我们安装docker-ce 的18.03版本 yum    -y remove docker  删除原有版本 #安装依赖包 [root@Docker ~]# yum -y i ...

  9. Docker实战 (docker swarm的应用,docker集群的构建,在docker集群中部署服务)

    Docker实战 ----docker swarm的应用,docker集群的构建,在docker集群中部署服务 转载来源:https://blog.csdn.net/No_red/article/de ...

最新文章

  1. 计算机网络Rip例题,计算机网络技术习题
  2. 机器学习(三)--- scala学习笔记
  3. 去百度,还是去创新工厂
  4. App上线需要自查的list——主要针对产品、部分运营加测试
  5. JDBC事务和JTA事务的区别 --包含spring事务 声明式事务
  6. java getimage_在Java语言中,为了使用getImage的方法,你需要导入的类是()。
  7. myeclipse中如何修改Servlet模板
  8. 【渝粤教育】国家开放大学2019年春季 1332中文学科论文写作 参考试题
  9. CORS跨域漏洞的学习(防止CSRF漏洞导致的漏洞)
  10. 如何在MyEclipse中建立一个代理服务器
  11. 2015年下半年的读书技术
  12. 机载激光雷达原理与应用科普(八)
  13. python复制上一条语句快捷键_pycharm快捷键及一些常用设置
  14. 操作系统之运行环境简介
  15. 拉上谷歌高通 三星围攻苹果
  16. 修改电量android,安卓手机端修改电池电量图标的教程
  17. 从源代码分析DbSet如何通过ObjectStateManager管理entity lifecycle的生命周期
  18. zabbix报警-邮件-钉钉
  19. 老调重弹:JDBC系列 之 JDBC层次结构和基本构成
  20. 宁波9家游戏开发运营公司简介

热门文章

  1. 谈谈为什么霸榜C站的无一不是标题党软文,竟一个实战案例都没有?不知道有多少人和我有一样的想法!
  2. java音频剪辑_Android实现mp3音频剪辑(带试听)
  3. 数学建模 matlab 数据的拟合和回归
  4. 华为服务器串号官网查询系统,串号去云端服务器查询
  5. 【无标题】哈哈哈哈哈哈哈
  6. r9 6900hx参数 r9 6900hx功耗
  7. 下列不是python数据类型的是_python不支持的数据类型有
  8. [VMware]如何绕开对虚拟机检测
  9. 怎样用Photoshop做出爆炸效果
  10. 表格中单元格之间分隔线的隐藏方法