前言

Swarm 在 Docker 1.12 版本之前属于一个独立的项目,在 Docker 1.12 版本发布之后,该项目合并到了 Docker 中,成为 Docker 的一个子命令,docker swarm是创建服务器集群的工具,只需要几条命令就可以创建一个服务器集群。它内置一些服务器集群需要的工具,比如说:服务查找,网络,负载均衡等等

一、环境

centos 7.3

Docker version 1.12.6

ip 角色
192.168.6.130 manager
192.168.6.131 worker
192.168.6.132 worker

二、集群

2.1、在192.168.6.130中,初始化集群

[root@jacky jacky]# docker swarm init --advertise-addr 192.168.6.130:
Swarm initialized: current node (4devzwb6rpimfpteqr17h2jx9) is now a manager. To add a worker to this swarm, run the following command: docker swarm join \
--token SWMTKN--5r3ujri3th4038jp7q66zrfo56eqo0sabyage8ahc10121evog-ah9bptj9d7txdu6y91w7qxd81 \
192.168.6.130: To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions. [root@jacky jacky]#

说明:--advertise-addr 设置监听Ip和端口号

2.2、初始化完、查看集群上的节点列表

[root@jacky jacky]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
4devzwb6rpimfpteqr17h2jx9 * jacky.localdomain Ready Active Leader

说明:目前只有一个节点,状态为Ready,是个Leader

2.3、192.168.6.131,加入集群

首先,切换到192.168.6.131,然后输入

[root@jacky jacky]#  docker swarm join \
> --token SWMTKN--5r3ujri3th4038jp7q66zrfo56eqo0sabyage8ahc10121evog-ah9bptj9d7txdu6y91w7qxd81 \
> 192.168.6.130:
This node joined a swarm as a worker.
[root@jacky jacky]#

2.4、192.168.6.132,加入集群

首先,切换到192.168.6.132,然后输入

[root@jacky jacky]# docker swarm join \
> --token SWMTKN--5r3ujri3th4038jp7q66zrfo56eqo0sabyage8ahc10121evog-ah9bptj9d7txdu6y91w7qxd81 \
> 192.168.6.130:
This node joined a swarm as a worker.
[root@jacky jacky]#

2.5、接着回到192.168.6.130中,查看集群中节点信息

[root@jacky jacky]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
4devzwb6rpimfpteqr17h2jx9 * jacky.localdomain Ready Active Leader
5mjtda2uzzu43v2xuxdco5ogr jacky.localdomain Ready Active
a8wdtux82dolsbgmv6ff0uu94 jacky.localdomain Ready Active

说明:
AVAILABILITY列:
显示调度程序是否可以将任务分配给节点:

  • Active 意味着调度程序可以将任务分配给节点。
  • Pause 意味着调度程序不会将新任务分配给节点,但现有任务仍在运行。
  • Drain 意味着调度程序不会向节点分配新任务。调度程序关闭所有现有任务并在可用节点上调度它们。

MANAGER STATUS列
显示节点是属于manager或者worker

    • 没有值 表示不参与群管理的工作节点。
    • Leader 意味着该节点是使得群的所有群管理和编排决策的主要管理器节点。
    • Reachable 意味着节点是管理者节点正在参与Raft共识。如果领导节点不可用,则该节点有资格被选为新领导者。
    • Unavailable 意味着节点是不能与其他管理器通信的管理器。如果管理器节点不可用,您应该将新的管理器节点加入群集,或者将工作器节点升级为管理器。

2.6、创建集群网络overlay

[root@jacky jacky]# docker network create --driver overlay skynet
843z9qb9c6douf7ir7l3iimqn
[root@jacky jacky]# docker network ls
NETWORK ID NAME DRIVER SCOPE
ad5125729239 bridge bridge local
5a15f008fb38 host host local
6echvokyh2m3 ingress overlay swarm
28068704e605 none null local
843z9qb9c6do skynet overlay swarm

可以看到新创建的网络名称为skynet,类型为overlay

三、部署测试

3.1、在管理节点中执行

docker service create -p : --name webserver --replicas  httpd

3.2、查看集群中的服务

[root@node1 jacky]# docker service ls
ID NAME REPLICAS IMAGE COMMAND
0blhke4vywh8 viz / manomarks/visualizer
7batkp4zv9f3 portainer / portainer/portainer -H unix:///var/run/docker.sock
7kw3ovihgqgb webserver / httpd

3.3、查看集群中的webserver服务

[root@node1 jacky]# docker service ps webserver
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR
e0jqrg479muha7ow8bf34rv39 webserver. httpd node1.jacky.com Running Running hours ago
23n9df2vww079h5rgkxlri4uy \_ webserver. httpd node1.jacky.com Shutdown Complete hours ago
8b8cs13u9yjsoru3ybyzzv9e6 \_ webserver. httpd node2.jacky.com Shutdown Rejected hours ago "No such image: httpd:latest"
8lvx0ynaohlcfyp11jgji4m3q webserver. httpd node1.jacky.com Running Running hours ago
0q8lrzlybo1exl3bngwwfy386 \_ webserver. httpd node1.jacky.com Shutdown Complete hours ago
eoq4a2sqx80a0hly6tizt5ucf \_ webserver. httpd node3.jacky.com Shutdown Shutdown hours ago
10juv2jp1ay9rjbu5hgw6yhs3 \_ webserver. httpd node3.jacky.com Shutdown Failed hours ago "starting container failed: er…"
7xa8uoa8775i5nl0zzi373xbt \_ webserver. httpd node3.jacky.com Shutdown Failed hours ago "starting container failed: er…"
6puw8t22w0exgiwqzt5vi8fc1 webserver. httpd node1.jacky.com Running Running hours ago
74osfdgl5ovp1c3e5s012b3f6 \_ webserver. httpd node1.jacky.com Shutdown Complete hours ago
cwzuewjsolewap28ctvy3jxaa \_ webserver. httpd node3.jacky.com Shutdown Shutdown hours ago
9bb5q38zqk153uqdex1yfcu4e \_ webserver. httpd node3.jacky.com Shutdown Failed hours ago "starting container failed: er…"
1uvoczhsfz5ncp1emdueljwqa \_ webserver. httpd node3.jacky.com Shutdown Failed hours ago "starting container failed: er…"
0j9hsq18v3pzoecmrjg0qtynh webserver. httpd node1.jacky.com Running Running hours ago
dyhyy55xlkm3abw2cqm0k8y6h \_ webserver. httpd node1.jacky.com Shutdown Complete hours ago
8dymtjskyxhw5zj0ombpv0pm1 \_ webserver. httpd node2.jacky.com Shutdown Shutdown hours ago
1b6u7rtknpgmwyfn3j3p94wm6 \_ webserver. httpd node2.jacky.com Shutdown Rejected hours ago "No such image: httpd:latest"
1af72d5vpu1xg3u0qypnvlier \_ webserver. httpd node2.jacky.com Shutdown Rejected hours ago "No such image: httpd:latest"
897au9dm88i94l0scg69slu6z webserver. httpd node1.jacky.com Running Running hours ago
eqt7g4bk6e2kqy6qbnr13gfeh \_ webserver. httpd node1.jacky.com Shutdown Complete hours ago
7vq8u2eycraafwzlmcgg1e80d \_ webserver. httpd node3.jacky.com Shutdown Shutdown hours ago
ehu6f1xun8ha6lw7cyex7jjrw \_ webserver. httpd node2.jacky.com Shutdown Shutdown hours ago

3.4、访问http://192.168.6.130、http://192.168.6.131或http://192.168.6.132

说明:192.168.6.131和192.168.6.132没有部署httpd也能狗访问,swarm搭建docker集群测试成功

四、安装Portainer,图形化管理docker

4.1、关闭selinux

setenforce 

4.2、在manager节点中执行,如下:

docker service create \
--name portainer \
--publish : \
--constraint 'node.role == manager' \
--mount type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
portainer/portainer \
-H unix:///var/run/docker.sock

4.3、访问192.168.6.130.9000

五、swarm集群其他操作

5.1、更新节点的可见性状态

[root@node1 jacky]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
4devzwb6rpimfpteqr17h2jx9 * node1.jacky.com Ready Active Leader
5mjtda2uzzu43v2xuxdco5ogr node3.jacky.com Ready Active
a8wdtux82dolsbgmv6ff0uu94 node2.jacky.com Ready Active
[root@node1 jacky]# docker node update --availability Drain node2.jacky.com
node2.jacky.com
[root@node1 jacky]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
4devzwb6rpimfpteqr17h2jx9 * node1.jacky.com Ready Active Leader
5mjtda2uzzu43v2xuxdco5ogr node3.jacky.com Ready Active
a8wdtux82dolsbgmv6ff0uu94 node2.jacky.com Ready Drain
[root@node1 jacky]# docker node update --availability Active node2.jacky.com
node2.jacky.com
[root@node1 jacky]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
4devzwb6rpimfpteqr17h2jx9 * node1.jacky.com Ready Active Leader
5mjtda2uzzu43v2xuxdco5ogr node3.jacky.com Ready Active
a8wdtux82dolsbgmv6ff0uu94 node2.jacky.com Ready Active
[root@node1 jacky]#

5.2、升级或降级节点

您可以将工作程序节点提升为manager角色。这在管理器节点不可用或者您希望使管理器脱机以进行维护时很有用。 类似地,您可以将管理器节点降级为worker角色。
无论您升级或降级节点,您应该始终在群中维护奇数个管理器节点。

  • 升级节点
[root@node1 jacky]# docker node promote node3.jacky.com node2.jacky.com
[root@node1 jacky]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
4devzwb6rpimfpteqr17h2jx9 * node1.jacky.com Ready Active Leader
5mjtda2uzzu43v2xuxdco5ogr node3.jacky.com Ready Active Unreachable
a8wdtux82dolsbgmv6ff0uu94 node2.jacky.com Ready Active Reachable
  • 降级节点
[root@node1 jacky]# docker node demote node3.jacky.com node2.jacky.com
Manager node3.jacky.com demoted in the swarm.
Manager node2.jacky.com demoted in the swarm.
[root@node1 jacky]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
4devzwb6rpimfpteqr17h2jx9 * node1.jacky.com Ready Active Leader
5mjtda2uzzu43v2xuxdco5ogr node3.jacky.com Ready Active
a8wdtux82dolsbgmv6ff0uu94 node2.jacky.com Ready Active

5.3、退出docker swarm集群

在对应的worker节点执行如下命令

[root@node1 jacky]# docker swarm leave

如果想把manager节点上已经退出集群的节点信息删除,如下:

[root@node1 jacky]# docker node rm node2.jacky.com

docker探索-swarm搭建docker集群(七)的更多相关文章

  1. docker容器中搭建kafka集群环境

    Kafka集群管理.状态保存是通过zookeeper实现,所以先要搭建zookeeper集群 zookeeper集群搭建 一.软件环境: zookeeper集群需要超过半数的的node存活才能对外服务 ...

  2. docker+phantomjs+haproxy 搭建phantomjs集群

    目标: 搭建一个远程的phantomjs服务器,提供高可用服务,支持并发. 原料: 1.docker环境.docker-compose环境 2.phantomjs镜像: docker.io/werni ...

  3. RabbitMQ:Docker环境下搭建rabbitmq集群

    RabbitMQ作为专业级消息队列:如何在微服务框架下搭建 使用组件 文档: https://github.com/bijukunjummen/docker-rabbitmq-cluster 下载镜像 ...

  4. docker使用Dockerfile搭建spark集群

    1.创建Dockerfile文件,内容如下 # 基础镜像,包括jdk FROM openjdk:8u131-jre-alpine #作者 LABEL maintainer "tony@163 ...

  5. docker进阶-利用dcoker Swarm搭建简单集群

    什么是Swarm   在介绍Swarm之前我们要说一下什么Docker三剑客? Docker-Machine:负责在多种平台上快速安装 Docker 环境. Docker-Compose:Docker ...

  6. docker~swarm搭建docker高可用集群

    回到目录 Swarm概念 Swarm是Docker公司推出的用来管理docker集群,它将一群Docker宿主机变成一个单一的,虚拟的主机.Swarm使用标准的Docker API接口作为其前端访问入 ...

  7. Docker 搭建 etcd 集群

    阅读目录: 主机安装 集群搭建 API 操作 API 说明和 etcdctl 命令说明 etcd 是 CoreOS 团队发起的一个开源项目(Go 语言,其实很多这类项目都是 Go 语言实现的,只能说很 ...

  8. Docker Swarm java 服务集群

    Docker Swarm java 服务集群 环境1: 系统:Linux Centos 7.4 x64 内核:Linux docker 3.10.0-693.2.2.el7.x86_64 Docker ...

  9. 使用Docker搭建Hadoop集群(伪分布式与完全分布式)

    之前用虚拟机搭建Hadoop集群(包括伪分布式和完全分布式:Hadoop之伪分布式安装),但是这样太消耗资源了,自学了Docker也来操练一把,用Docker来构建Hadoop集群,这里搭建的Hado ...

随机推荐

  1. linux下配置tomcat集群的负载均衡

    linux下配置tomcat集群的负载均衡 一.首先了解下与集群相关的几个概念集群:集群是一组协同工作的服务实体,用以提供比单一服务实体更具扩展性与可用性的服务平台.在客户端看来,一个集群就象是一个服 ...

  2. Android Studio主题设置、颜色背景配置

    打开http://color-themes.com/有很多样式可供选择 导入方式 下载主题—xxx.jar 注意:如果我们下载下来的jar名字如果有空格,一定要把空格去掉,同时文件路径中不要含有中文 ...

  3. 如何在open xml excel 中存储自定义xml数据?

    如何在open xml excel 中存储自定义xml数据? 而且不能放在隐藏的cell单元格内,也不能放在隐藏的sheet内,要类似web网站的Application变量,但还不能是VBA和宏之类的 ...

  4. python 安装配置(windows)

    在 Windows 上, 安装 Python 有两种选择. ActiveState 制作了一个 Windows 上的 Python 安装程序称为 ActivePython, 它包含了一个完整的 Pyt ...

  5. C#基础第七天-作业答案-利用面向对象的思想去实现名片-动态添加

    class Card { private string name; public string Name { get { return name; } set { name = value; } } ...

  6. Windows 7 添加SSD硬盘后重启卡住正在启动

    楼主办公电脑,原来只配置了一块机械硬盘,用着总很不顺心,于是说服领导给加了块SSD固态硬盘. 操作如下: 1.在PE下分区格式化新固态硬盘,将原来机械硬盘的C盘GHOST备份后还原到新固态硬盘: 2. ...

  7. Java面试题(原创)

    1:int类型的范围值(可以用指数表示min--max) 答案:此题考对int占用的字节和计算机基础---2³¹-1到-2³¹ 2.java用来表示unicode的转义符是什么,并简要描述unicod ...

  8. 解决 slf4j + log4j 在云服务上打印乱码

    由于云服务器的环境是纯英文的 虽然在eclipse中可以打印日志显示中文,但是实用putty的时候查看却是乱码,下载日志也同样是乱码 那么只要设置utf-8即可

  9. Merge into 详细介绍

    /*Merge into 详细介绍 MERGE语句是Oracle9i新增的语法,用来合并UPDATE和INSERT语句. 通过MERGE语句,根据一张表或子查询的连接条件对另外一张表进行查询, 连接条 ...

  10. Warning Template OS Linux: /etc/passwd has been changed on {HOST.NAME} {monitor:vfs.file.cksum[/etc/passwd].diff(0)}>0 Unknown

    # ll -h /etc/passwd -rw-r--r-- 1 root root 1.5K Apr 15 16:10 /etc/passwd 让zabbix 可以登录服务器 # mkdir /ho ...