栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

2.2 DockerSwarm集群学习和上机实验

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2.2 DockerSwarm集群学习和上机实验

文章目录
  • 概念
  • AVAILABILITY 的三种状态 可用性
  • MANAGER STATUS 的三种状态
  • 操作命令
    • docker node update --availability 修改节点可用性
    • docker swarm leave 节点离开集群
    • docker node rm 删除节点
    • docker node promote/demote 升级降级节点
    • docker service create 部署服务到集群
    • 动态扩容两种方式
    • docker service ps 查看服务部署情况
    • docker service rm 删除服务
    • docker service ps 查看服务部署情况
    • docker service inspect 查看具体服务信息
    • docker service update 滚动升级
    • docker info 集群信息
  • 上机实验
    • 初始化
    • Raft协议
    • 将两个work节点docker服务停止
    • docker info信息
  • 服务在提交之后不会发生动态调整

概念

Docker 集群化部署

Docker sworm 工作机制 - 官网链接

概念的总结

swarm

集群的管理和编号,docker可以初始化一个swarm集群,其他结点可以加入。(管理,工作者)

Node

就是一个docker结点,多个结点就组成了一个网络集群(管理、工作者)

Service

任务,可以在管理结点或者工作结点来运行。核心,用户访问。

Task

容器内的命令、细节任务!

service

AVAILABILITY 的三种状态 可用性
  • Active:调度器能够安排任务到该节点
  • Pause:调度器不能够安排任务到该节点,但是已经存在的任务会继续运行
  • Drain:调度器不能够安排任务到该节点,而且会停止已存在的任务,并将这些任务分配到其他 Active 状态的节点
MANAGER STATUS 的三种状态
  • Leader:为群体做出所有群管理和编排决策的主要管理者节点
  • Reachable:如果 Leader 节点变为不可用,该节点有资格被选举为新的 Leader
  • Unavailable:该节点不能和其他 Manager 节点产生任何联系,这种情况下,应该添加一个新的 Manager 节点到集群,或者将一个 Worker 节点提升为 Manager 节点

升级降级

[升级] docker node promote WorkerA
[降级] docker node demote WorkerA
操作命令 docker node update --availability 修改节点可用性
  • 使node不可调度:
docker node update --availability drain 
  • 停止node:
docker node update --availability pause 
  • 使node可调度:
docker node update --availability active 
docker swarm leave 节点离开集群
  • 使当前work节点离开集群:
[root@iZ2zeeea01dfr0ijz61q5bZ ~]# docker swarm leave
Node left the swarm.
  • leader/Reachable节点离开集群
[root@iZ2zeeea01dfr0ijz61q5cZ /]# docker swarm leave
Error response from daemon: You are attempting to leave the swarm on a node that is participating as a manager. Removing this node leaves 1 managers out of 2. Without a Raft quorum your swarm will be inaccessible. The only way to restore a swarm that has lost consensus is to reinitialize it with `--force-new-cluster`. Use `--force` to suppress this message.

  • 为了删除leader或者Reachable节点我们可以先进行降级为Work节点之后进行离开集群
[升级] docker node promote WorkerA
[降级] docker node demote WorkerA
docker node rm 删除节点
  • 删除node:
docker node rm 

删除节点

-f可以删除运行的工作节点,但是不能是主节点

docker node promote/demote 升级降级节点
[升级] docker node promote WorkerA
[降级] docker node demote WorkerA
docker service create 部署服务到集群
docker service create --replicas 1 --name redis --update-delay 10s redis:3.0.6

运行了三个nginx服务,被分配给了三个容器

[root@iZ2zeeea01dfr0ijz61q5cZ /]# docker service create -p 8080:80 --replicas 3 --name my-nginx nginx
nb0p3u573jvu8wcfruhp04ri6
overall progress: 3 out of 3 tasks 
1/3: running   [==================================================>] 
2/3: running   [==================================================>] 
3/3: running   [==================================================>] 
verify: Service converged 

每个服务器查询容器状况

[root@iZ2zeeea01dfr0ijz61q5bZ ~]# docker ps
ConTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS     NAMES
5ce1bc85f035   nginx:latest   "/docker-entrypoint.…"   44 seconds ago   Up 43 seconds   80/tcp    my-nginx.1.s0q9r0qhb1yajsel1i20tdlum

[root@iZ2zeeea01dfr0ijz61q5aZ ~]# docker ps
ConTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS     NAMES
5ca14540ba74   nginx:latest   "/docker-entrypoint.…"   48 seconds ago   Up 46 seconds   80/tcp    my-nginx.3.y9ddyamakd7411sgvhyl24nw2

[root@iZ2zeeea01dfr0ijz61q59Z ~]# docker ps
ConTAINER ID   IMAGE          COMMAND                  CREATED              STATUS          PORTS     NAMES
7baa823ebdc7   nginx:latest   "/docker-entrypoint.…"   about a minute ago   Up 59 seconds   80/tcp    my-nginx.2.wzp7a77pu4f2lu9fk38yme2ni

#5cZ是没有的
[root@iZ2zeeea01dfr0ijz61q5cZ /]# docker ps
ConTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

动态扩容两种方式
docker service scale my-nginx=5
docker service update --replicas 10 my-nginx
  • 方式一:

docker service update --replicas 10 my-nginx

[root@iZ2zeeea01dfr0ijz61q5cZ /]# docker service update --replicas 10 my-nginx
my-nginx
overall progress: 10 out of 10 tasks 
1/10: running   [==================================================>] 
2/10: running   [==================================================>] 
3/10: running   [==================================================>] 
4/10: running   [==================================================>] 
5/10: running   [==================================================>] 
6/10: running   [==================================================>] 
7/10: running   [==================================================>] 
8/10: running   [==================================================>] 
9/10: running   [==================================================>] 
10/10: running   [==================================================>] 
verify: Service converged 

  • 方式二:
[root@iZ2zeeea01dfr0ijz61q5cZ /]# docker service scale my-nginx=5
my-nginx scaled to 5
overall progress: 5 out of 5 tasks 
1/5: running   [==================================================>] 
2/5: running   [==================================================>] 
3/5: running   [==================================================>] 
4/5: running   [==================================================>] 
5/5: running   [==================================================>] 
verify: Service converged 
docker service ps 查看服务部署情况
[root@iZ2zeeea01dfr0ijz61q5cZ /]# docker service ps my-nginx
ID             NAME         IMAGE          NODE                      DESIRED STATE   CURRENT STATE            ERROR     PORTS
s0q9r0qhb1ya   my-nginx.1   nginx:latest   iZ2zeeea01dfr0ijz61q5bZ   Running         Running 14 minutes ago             
wzp7a77pu4f2   my-nginx.2   nginx:latest   iZ2zeeea01dfr0ijz61q59Z   Running         Running 14 minutes ago             
y9ddyamakd74   my-nginx.3   nginx:latest   iZ2zeeea01dfr0ijz61q5aZ   Running         Running 14 minutes ago             
2hha260nxh18   my-nginx.4   nginx:latest   iZ2zeeea01dfr0ijz61q59Z   Running         Running 12 minutes ago             
0e59envs0g56   my-nginx.5   nginx:latest   iZ2zeeea01dfr0ijz61q5aZ   Running         Running 12 minutes ago   
docker service rm 删除服务
docker service rm 服务名
docker service ps 查看服务部署情况
 docker service ps 服务名

可以看到服务运行在那些节点上

[root@iZ2zeeea01dfr0ijz61q5cZ /]# docker service ps my-nginx
ID             NAME             IMAGE          NODE                        DESIRED STATE   CURRENT STATE             ERROR     PORTS
mz83alfde7y7   my-nginx.1       nginx:latest   iZ2zeeea01dfr0ijz61q5cZ     Running         Running 40 minutes ago              
s0q9r0qhb1ya    _ my-nginx.1   nginx:latest   ngzsop9kuocrkdpju6jutrl3z   Shutdown        Orphaned 26 minutes ago             
y3ljuqzhijw3   my-nginx.2       nginx:latest   iZ2zeeea01dfr0ijz61q5cZ     Running         Running 23 minutes ago              
wzp7a77pu4f2    _ my-nginx.2   nginx:latest   zpne79i1zbcwpanm3u7k0y3d2   Shutdown        Orphaned 23 minutes ago             
6tkpmlga1v54   my-nginx.3       nginx:latest   iZ2zeeea01dfr0ijz61q5cZ     Running         Running 23 minutes ago              
k6amvh9r6bme    _ my-nginx.3   nginx:latest   zpne79i1zbcwpanm3u7k0y3d2   Shutdown        Orphaned 23 minutes ago             
y9ddyamakd74    _ my-nginx.3   nginx:latest   iZ2zeeea01dfr0ijz61q5aZ     Shutdown        Shutdown 24 minutes ago             
o8i4cdjizfa1   my-nginx.4       nginx:latest   iZ2zeeea01dfr0ijz61q5cZ     Running         Running 23 minutes ago              
2hha260nxh18    _ my-nginx.4   nginx:latest   zpne79i1zbcwpanm3u7k0y3d2   Shutdown        Orphaned 23 minutes ago             
n99wzzkkg2go   my-nginx.5       nginx:latest   iZ2zeeea01dfr0ijz61q5cZ     Running         Running 24 minutes ago              
0e59envs0g56    _ my-nginx.5   nginx:latest   iZ2zeeea01dfr0ijz61q5aZ     Shutdown        Shutdown 24 minutes ago   
docker service inspect 查看具体服务信息
docker service inspect 服务名
[root@iZ2zeeea01dfr0ijz61q5cZ /]# docker service inspect --pretty my-nginx

ID:		nb0p3u573jvu8wcfruhp04ri6
Name:		my-nginx
Service Mode:	Replicated
 Replicas:	5
Placement:
UpdateConfig:
 Parallelism:	1
 On failure:	pause
 Monitoring Period: 5s
 Max failure ratio: 0
 Update order:      stop-first
RollbackConfig:
 Parallelism:	1
 On failure:	pause
 Monitoring Period: 5s
 Max failure ratio: 0
 Rollback order:    stop-first
ContainerSpec:
 Image:		nginx:latest@sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
 Init:		false
Resources:
Endpoint Mode:	vip
Ports:
 PublishedPort = 8080
  Protocol = tcp
  TargetPort = 80
  PublishMode = ingress 
docker service update 滚动升级
docker service update --image redis:3.0.7 redis
docker info 集群信息

**

可以看出来有三个节点,其中有两个是管理节点。

上机实验 初始化
  • 使用ip addr查看本机ip

  • 初始化集群 作为管理节点
 docker swarm init --advertise-addr 172.30.160.92 #这里的 IP 为创建机器时分配的 内网ip。
Raft协议

双主双从:假设一个结点挂了!其他结点是否可以用!

Raft协议:保证大多数结点存活才可以使用,只要>1, 集群至少大于3台!

  1. 通过这两个命令生成token后去其他节点中运行从而加入集群
[root@iZ2zeeea01dfr0ijz61q5cZ /]# docker swarm join-token worker
To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-6b2hs9v3lc73pv4xn7dyv0gqi4ljo6ucfgm0s3ag6hhdp20gxm-dwtnhhk2fa87b4jd9e5mkfcca 172.30.160.92:2377

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

    docker swarm join --token SWMTKN-1-6b2hs9v3lc73pv4xn7dyv0gqi4ljo6ucfgm0s3ag6hhdp20gxm-4latyoz0e4lnnfnpqm7wjsrqr 172.30.160.92:2377
  1. 初始状态是在5cZ初始化docker swarm init的因此它为leader节点并且将其他节点加入构成两主两从的结构
[root@iZ2zeeea01dfr0ijz61q5cZ ~]# docker node ls
ID                            HOSTNAME                  STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
zoj83x7i7xnawhahf0k2959dq     iZ2zeeea01dfr0ijz61q5aZ   Ready     Active                          20.10.12
n1px3rqxy59m6hyrjyi58fwj1     iZ2zeeea01dfr0ijz61q5bZ   Ready     Active                          20.10.12
l3wtk8e7ne760cgji7pbovkpb *   iZ2zeeea01dfr0ijz61q5cZ   Ready     Active         Leader           20.10.12
zpne79i1zbcwpanm3u7k0y3d2     iZ2zeeea01dfr0ijz61q59Z   Ready     Active        Reachable        20.10.12
  1. 5cZ为leader,将其手动结束服务,发现因为只剩下一个主节点,因此不能够运行
[root@iZ2zeeea01dfr0ijz61q59Z ~]# docker node ls
Error response from daemon: rpc error: code = DeadlineExceeded desc = context deadline exceeded

  1. 然后5cZ再次启动服务
[root@iZ2zeeea01dfr0ijz61q5cZ /]# systemctl start docker 
#启动后5cZ发现59Z成为了Leader就会变成Reachable
[root@iZ2zeeea01dfr0ijz61q5cZ /]# docker node ls
ID                            HOSTNAME                  STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
zoj83x7i7xnawhahf0k2959dq     iZ2zeeea01dfr0ijz61q5aZ   Ready     Active                          20.10.12
n1px3rqxy59m6hyrjyi58fwj1     iZ2zeeea01dfr0ijz61q5bZ   Ready     Active                          20.10.12
l3wtk8e7ne760cgji7pbovkpb *   iZ2zeeea01dfr0ijz61q5cZ   Ready     Active        Reachable        20.10.12
zpne79i1zbcwpanm3u7k0y3d2     iZ2zeeea01dfr0ijz61q59Z   Ready     Active         Leader           20.10.12

将两个work节点docker服务停止
[root@iZ2zeeea01dfr0ijz61q59Z ~]# docker node ls
ID                            HOSTNAME                  STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
zoj83x7i7xnawhahf0k2959dq     iZ2zeeea01dfr0ijz61q5aZ   Down      Active                          20.10.12
n1px3rqxy59m6hyrjyi58fwj1     iZ2zeeea01dfr0ijz61q5bZ   Down      Active                          20.10.12
l3wtk8e7ne760cgji7pbovkpb     iZ2zeeea01dfr0ijz61q5cZ   Ready     Active         Reachable        20.10.12
zpne79i1zbcwpanm3u7k0y3d2 *   iZ2zeeea01dfr0ijz61q59Z   Ready     Active         Leader           20.10.12

开启一个服务运行了在5cZ上

[root@iZ2zeeea01dfr0ijz61q5cZ /]# docker service create -p8080:80 --name my-nginx nginx
pdksl93bek4zihgijzdyx3biq
overall progress: 1 out of 1 tasks 
1/1: running   [==================================================>] 
verify: Service converged 
[root@iZ2zeeea01dfr0ijz61q5cZ /]# docker ps
ConTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS     NAMES
abbf0c8ad7c5   nginx:latest   "/docker-entrypoint.…"   20 seconds ago   Up 18 seconds   80/tcp    my-nginx.1.l6fixew2pq61v66nbvjm0zvlx

docker info信息
[root@iZ2zeeea01dfr0ijz61q5cZ /]# docker info
 Swarm: active
  NodeID: l3wtk8e7ne760cgji7pbovkpb
  Is Manager: true
  ClusterID: 03sd6s9vyk2pu0uozf9rmr47a
  Managers: 2
  Nodes: 4
  Default Address Pool: 10.0.0.0/8  
  SubnetSize: 24
  Data Path Port: 4789
  Orchestration:
   Task History Retention Limit: 5
服务在提交之后不会发生动态调整

初始状态5cZ的状态为Drain

[root@iZ2zeeea01dfr0ijz61q5cZ /]# docker node ls
ID                            HOSTNAME                  STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
jmd278rks0g4dod7yyzrojg9b     iZ2zeeea01dfr0ijz61q5aZ   Ready     Active         Reachable        20.10.12
ngzsop9kuocrkdpju6jutrl3z     iZ2zeeea01dfr0ijz61q5bZ   Ready     Active                          20.10.12
l3wtk8e7ne760cgji7pbovkpb *   iZ2zeeea01dfr0ijz61q5cZ   Ready     Drain          Leader           20.10.12
zpne79i1zbcwpanm3u7k0y3d2     iZ2zeeea01dfr0ijz61q59Z   Ready     Active                          20.10.12

将其状态修改为Actice

[root@iZ2zeeea01dfr0ijz61q5cZ /]# docker node update --availability active l3wtk8e7ne760cgji7pbovkpb
l3wtk8e7ne760cgji7pbovkpb
[root@iZ2zeeea01dfr0ijz61q5cZ /]# docker ps
ConTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@iZ2zeeea01dfr0ijz61q5cZ /]# docker node ls
ID                            HOSTNAME                  STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
jmd278rks0g4dod7yyzrojg9b     iZ2zeeea01dfr0ijz61q5aZ   Ready     Active         Reachable        20.10.12
ngzsop9kuocrkdpju6jutrl3z     iZ2zeeea01dfr0ijz61q5bZ   Ready     Active                          20.10.12
l3wtk8e7ne760cgji7pbovkpb *   iZ2zeeea01dfr0ijz61q5cZ   Ready     Active         Leader           20.10.12
zpne79i1zbcwpanm3u7k0y3d2     iZ2zeeea01dfr0ijz61q59Z   Ready     Active                          20.10.12

但是服务没有流转过来

[root@iZ2zeeea01dfr0ijz61q5cZ /]# docker ps
ConTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@iZ2zeeea01dfr0ijz61q5cZ /]# docker ps
ConTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

动态扩容之后,倾向于分配在这个节点

[root@iZ2zeeea01dfr0ijz61q5cZ /]# docker service scale redis=7
redis scaled to 7
overall progress: 7 out of 7 tasks 
1/7: running   [==================================================>] 
2/7: running   [==================================================>] 
3/7: running   [==================================================>] 
4/7: running   [==================================================>] 
5/7: running   [==================================================>] 
6/7: running   [==================================================>] 
7/7: running   [==================================================>] 
verify: Service converged 

[root@iZ2zeeea01dfr0ijz61q5cZ /]# docker ps
ConTAINER ID   IMAGE         COMMAND                  CREATED              STATUS              PORTS      NAMES
aa794d38a768   redis:3.0.7   "docker-entrypoint.s…"   about a minute ago   Up about a minute   6379/tcp   redis.7.uiav726vnrajtucshz8ngng8v

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/692460.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号