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

  1. 云栖社区>
  2. 博客>
  3. 正文

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

技术小胖子 2017-11-08 05:29:00 浏览913
展开阅读全文

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
  4. 离开集群
    如果你想重新开始,你可以从每个节点运行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
  5. 在群集上部署应用程序
    两台机器分别是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
    注意:swarm1swarm2上必须都有镜像friendlyhello:latest
  6. 访问集群
    在主机(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>[
    。。。。。。
  7. 集群上应用程序的更改
    通过更改docker-compose.yml文件来更改应用程序。
    无论哪种情况,只需docker stack deploy再次运行以部署这些更改即可。
    使用docker swarm join将任何物理或虚拟机器加入到此群集,并将这些新添加的机器资源添加到群集中。docker stack deploy随后运行,你的应用程序将利用新的资源。
  8. 集群清理
    你可以拆下堆叠docker stack rm 集群名。例如:
    执行:
    #docker stack rm getstartedlab

     本文转自品鉴初心51CTO博客,原文链接:http://blog.51cto.com/wutengfei/2064012,如需转载请自行联系原作者



网友评论

登录后评论
0/500
评论
技术小胖子
+ 关注