docker集群部署:第4部分:群集
  TEZNKK3IfmPf 2023年11月14日 27 0

docker集群部署:第4部分:群集

  1. 介绍 在第3部分:服务中,介绍了你在第2部分中编写的应用程序,并将其转化为服务,然后在生产过程中将其扩展5倍,从而实现单台服务器多个容器的负载均衡。 在第4部分中,将此应用程序部署到群集上,并在多台服务器上运行它。通过将多台机器连接到名为“Dockerized”的群集,使的多容器,多机器应用成为可能。
  2. 群集概念 群集(swarm)是运行Docker并加入到一个集群中的一组机器。群体中的服务器可以是物理的或虚拟的。加入群体后,他们被称为节点。 Swarm管理人员可以使用多种策略来运行容器,你可以指示swarm manager(集群管理机)在Compose文件中使用这些策略,就像你已经使用的策略一样。 swarm manager(集群管理机)是群体中唯一可以执行你的命令的机器,或者授权其他机器作为从机加入群体。从机只是在那里提供资源或服务能力,并没有权力告诉任何其他机器可以做什么和不可以做什么。 到目前为止,你已经在本地机器上以单主机模式使用Docker。但是Docker也可以切换到群集模式,立即启用群模式使当前机器成为swarm manager(集群管理机)。从那时起,Docker将运行你正在管理的群集上执行的命令,而不仅仅是在当前的机器上。
  3. 建立群集 一个群由多个节点组成,可以是物理机或虚拟机。基本的概念很简单:运行docker swarm init来启用swarm模式,并让你的当前机器成为swarm manager,然后在其他机器上运行docker swarm join让它们作为worker(从机)加入swarm。
具体步骤如下:
(1)在swarm manager(集群管理机)上执行
#docker swarm init
Swarm initialized: current node (udsskjm1xcmwrhnukfu9k3xze) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-2jqmzukum85nfuaipg9gw3zv8jzwv71kx9ls54xazmm6gvpnfm-5y1cwboulbsznmldko99m24od 10.0.0.38:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

说明:在管理机上执行docker swarm init后,系统会产生如上的内容和docker swarm join的信息,但是,如果我们不是立即将从机加入集群中,那么我们应该如何得到这个信息呢?

##执行如下命令:
##在leader主机上运行
#docker swarm join-token manager
返回:
To add a manager to this swarm, run the following command:
docker swarm join --token SWMTKN-1-67up8rqnbpt7dq83icrgexr7lc5l1dofjcjk8onhjhfv9cit9g-5xacj7evi09tuj2cs9jlj6wjp 10.0.0.38:2377
(2)在worker(从机)上执行
#docker swarm join --token SWMTKN-1-2jqmzukum85nfuaipg9gw3zv8jzwv71kx9ls54xazmm6gvpnfm-5y1cwboulbsznmldko99m24od 10.0.0.38:2377
返回:This node joined a swarm as a worker.
(3)在swarm manager(集群管理机)上查看集群情况
#docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS
udsskjm1xcmwrhnukfu9k3xze *   swarm1              Ready               Active              Leader
ybjg2rrdxlg07gh5ouwub8155     swarm2              Ready               Active
  1. 离开集群 如果你想重新开始,你可以从每个节点运行docker swarm leave。
说明:如果在管理机上执行docker swarm leave,则:
#docker swarm leave --force
Node left the swarm.
[root@swarm1 ~]# docker node ls
Error response from daemon: This node is not a swarm manager. Use "docker swarm init" or "docker swarm join" to connect this node to swarm and try again.
在从机上运行:docker swarm leave
在主机(manage)上查看:
# docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS
i0hkvoybv632ajec28fi5h31e *   swarm1              Ready               Active              Leader
t8qw0gq2ny3o4uwr3mt8xhgs7     swarm2              Down                Active
  1. 在群集上部署应用程序 两台机器分别是swarm1(10.0.0.38)和swarm2 (10.0.0.39) 具体步骤如下:
(1)swarm1是主机(manage),在其上执行:docker swarm init
(2)swarm2是从机添加进集群中,在其上执行:
#docker swarm join --token SWMTKN-1-38m4cy1jwkoi6z9nna8xbvjslksphss635gkgmkr6l0kifryn5-c4ea9yazu2m2ag20j477kxqli 10.0.0.38:2377
(3)在主机(manage)上执行:
#docker stack deploy -c docker-compose.yml getstartedlab
(4)在主机(manage)上执行:docker stack ps getstartedlab
ID                  NAME                  IMAGE                  NODE                DESIRED STATE       CURRENT STATE            ERROR               PORTS
8uppaqhfm8fg        getstartedlab_web.1   friendlyhello:latest   swarm1              Running             Running 34 seconds ago
rx3j05fhyzvg        getstartedlab_web.2   friendlyhello:latest   swarm2              Running             Running 33 seconds ago
n6c91tcej3ox        getstartedlab_web.3   friendlyhello:latest   swarm1              Running             Running 34 seconds ago
uov66tw8ou4k        getstartedlab_web.4   friendlyhello:latest   swarm2              Running             Running 34 seconds ago
5qlijwxe8obg        getstartedlab_web.5   friendlyhello:latest   swarm2              Running             Running 32 seconds ago
注意:swarm1与swarm2上必须都有镜像friendlyhello:latest
  1. 访问集群 在主机(manage)上执行:curl 10.0.0.38:80 说明:不要使用curl 10.0.0.39:80,执行时会报拒绝连接的错误!
你会发现五个容器ID,它们都是随机循环的,展示了负载平衡。如下:
<h3>Hello World!</h3><b>Hostname:</b> 931ff909ff35<br/><b>Visits:</b> <i>cannot connect to Redis, counter disabled</i>[
<h3>Hello World!</h3><b>Hostname:</b> a39eefe721ed<br/><b>Visits:</b> <i>cannot connect to Redis, counter disabled</i>[
。。。。。。
  1. 集群上应用程序的更改 通过更改docker-compose.yml文件来更改应用程序。 无论哪种情况,只需docker stack deploy再次运行以部署这些更改即可。 使用docker swarm join将任何物理或虚拟机器加入到此群集,并将这些新添加的机器资源添加到群集中。docker stack deploy随后运行,你的应用程序将利用新的资源。
  2. 集群清理 你可以拆下堆叠docker stack rm 集群名。例如:
执行:
#docker stack rm getstartedlab
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月14日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   2024年03月22日   58   0   0 容器Docker
  TEZNKK3IfmPf   2023年11月15日   38   0   0 redisDocker
  TEZNKK3IfmPf   2024年04月26日   50   0   0 Docker
  TEZNKK3IfmPf   2023年11月15日   34   0   0 redisDocker
  TEZNKK3IfmPf   2023年11月15日   38   0   0 Docker
  TEZNKK3IfmPf   2024年03月29日   94   0   0 Docker
TEZNKK3IfmPf