设为首页 收藏本站
查看: 909|回复: 0

[经验分享] docker集群部署:第4部分:群集

[复制链接]

尚未签到

发表于 2018-5-26 11:13:33 | 显示全部楼层 |阅读模式
  docker集群部署:第4部分:群集


  • 介绍
    在第3部分:服务中,介绍了你在第2部分中编写的应用程序,并将其转化为服务,然后在生产过程中将其扩展5倍,从而实现单台服务器多个容器的负载均衡。
    在第4部分中,将此应用程序部署到群集上,并在多台服务器上运行它。通过将多台机器连接到名为“Dockerized”的群集,使的多容器,多机器应用成为可能。
  • 群集概念
    群集(swarm)是运行Docker并加入到一个集群中的一组机器。群体中的服务器可以是物理的或虚拟的。加入群体后,他们被称为节点。
    Swarm管理人员可以使用多种策略来运行容器,你可以指示swarm manager(集群管理机)在Compose文件中使用这些策略,就像你已经使用的策略一样。
    swarm manager(集群管理机)是群体中唯一可以执行你的命令的机器,或者授权其他机器作为从机加入群体。从机只是在那里提供资源或服务能力,并没有权力告诉任何其他机器可以做什么和不可以做什么。
    到目前为止,你已经在本地机器上以单主机模式使用Docker。但是Docker也可以切换到群集模式,立即启用群模式使当前机器成为swarm manager(集群管理机)。从那时起,Docker将运行你正在管理的群集上执行的命令,而不仅仅是在当前的机器上。
  • 建立群集
    一个群由多个节点组成,可以是物理机或虚拟机。基本的概念很简单:运行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
  • 离开集群
    如果你想重新开始,你可以从每个节点运行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
  • 在群集上部署应用程序
    两台机器分别是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
  • 访问集群
    在主机(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>[
    。。。。。。
  • 集群上应用程序的更改
    通过更改docker-compose.yml文件来更改应用程序。
    无论哪种情况,只需docker stack deploy再次运行以部署这些更改即可。
    使用docker swarm join将任何物理或虚拟机器加入到此群集,并将这些新添加的机器资源添加到群集中。docker stack deploy随后运行,你的应用程序将利用新的资源。
  • 集群清理
    你可以拆下堆叠docker stack rm 集群名。例如:
    执行:
    #docker stack rm getstartedlab

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-481295-1-1.html 上篇帖子: docker集群部署:第3部分:服务 下篇帖子: 基于docker搭建rabbitmq
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表