docker集群(1):docker 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节点

查看ip
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 网络

在这里插入图片描述

关于安全组

集群需要开放的端口

作用协议端口
集群管理通信TCP2377
节点通信TCP&UDP7946
覆盖型网络UDP4789

或者你可以配置安全组规则,集群服务器使用相同的安全组,把各服务器的内网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白名单。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值