docker集群(1):docker swarm
文章目录
- 准备工作
- 工作模式
- 搭建集群
- Raft协议
- docker service
- 常用命令
- 概念总结
- 服务副本与全局服务
- 拓展:网络模式: "PublishMode": "ingress" Swarm:
- 关于安全组
- 遇到的错误
准备工作
- 购买准备4台服务器(需要在同一内网)。(为了避免忘记释放服务器,可以设置几个小时自动释放,也可以选择手动释放)
- 为所有主机安装Docker
技巧:xshell可以右键发送命令到所有的会话,这样多个主机就可以同时安装了。
工作模式
docker swarm 地址:https://docs.docker.com/engine/swarm/
docker集群分为工作节点和管理节点
管理节点:负责管理工作节点,也提供服务。
工作节点:提供服务。
搭建集群
查看docker swarm的帮助命令
init 初始化一个集群 --advertise-addr:公布address 。
- 创建集群
我这里的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启动(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。
- 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相关推荐
- Docker集群管理之Swarm介绍
[摘要] Docker自诞生以来,其容器特性以及镜像特性给DevOps爱好者带来了诸多方便.然而在很长的一段时间内,Docker只能在单host上运行,其跨host的部署.运行与管理能力颇受外界诟病. ...
- docker集群管理之swarm mode
序言 当有多台物理机的时候,就要考虑使用集群的模式了,那么docker如何来使用集群来进行管理呢?在这里主要使用的是docker自带的swarm mode,也就是docker集群的管理和编排.所谓的编 ...
- Swarm搭建Docker集群
Swarm介绍 Swarm是Docker公司在2014年12月初发布的一套较为简单的工具,用来管理Docker集群,它将一群Docker宿主机变成一个单一的,虚拟的主机.Swarm使用标准的Docke ...
- Docker学习笔记 — Swarm搭建Docker集群
http://www.cnblogs.com/rio2607/p/4445968.html#undefined Swarm介绍 Swarm是Docker公司在2014年12月初发布的一套较为简单的工具 ...
- Docker集群管理(DockerHub Harbor 打包-Jib 任务编排工具- docker-compose和Swarm)
Docker 集群管理 Docker 集群管理 镜像仓库管理 DockerHUb仓库管理 什么是DockerHUb 账号注册和登陆 Docker客户端登录 管理镜像 推送镜像 仓库镜像测试 regis ...
- docker集群管理
docker集群管理 ps:docker machine docker swarm docker compose 在Docker Machine发布之前,你可能会遇到以下问题: ...
- SKIL/安装/Docker集群
Docker集群 使用Docker可以设置SKIL集群.如果你还没有这样做,我们建议你在尝试设置集群之前下载并运行单个Docker镜像. 要配置Docker Skil CE群集,你需要以下镜像: My ...
- docker swarm的应用----docker集群的构建
一.docker安装 这里我们安装docker-ce 的18.03版本 yum -y remove docker 删除原有版本 #安装依赖包 [root@Docker ~]# yum -y i ...
- Docker实战 (docker swarm的应用,docker集群的构建,在docker集群中部署服务)
Docker实战 ----docker swarm的应用,docker集群的构建,在docker集群中部署服务 转载来源:https://blog.csdn.net/No_red/article/de ...
最新文章
- 计算机网络Rip例题,计算机网络技术习题
- 机器学习(三)--- scala学习笔记
- 去百度,还是去创新工厂
- App上线需要自查的list——主要针对产品、部分运营加测试
- JDBC事务和JTA事务的区别 --包含spring事务 声明式事务
- java getimage_在Java语言中,为了使用getImage的方法,你需要导入的类是()。
- myeclipse中如何修改Servlet模板
- 【渝粤教育】国家开放大学2019年春季 1332中文学科论文写作 参考试题
- CORS跨域漏洞的学习(防止CSRF漏洞导致的漏洞)
- 如何在MyEclipse中建立一个代理服务器
- 2015年下半年的读书技术
- 机载激光雷达原理与应用科普(八)
- python复制上一条语句快捷键_pycharm快捷键及一些常用设置
- 操作系统之运行环境简介
- 拉上谷歌高通 三星围攻苹果
- 修改电量android,安卓手机端修改电池电量图标的教程
- 从源代码分析DbSet如何通过ObjectStateManager管理entity lifecycle的生命周期
- zabbix报警-邮件-钉钉
- 老调重弹:JDBC系列 之 JDBC层次结构和基本构成
- 宁波9家游戏开发运营公司简介