docker~swarm搭建docker高可用集群

回到目录html

Swarm概念

  Swarm是Docker公司推出的用来管理docker集群,它将一群Docker宿主机变成一个单一的,虚拟的主机。Swarm使用标准的Docker API接口做为其前端访问入口,换言之,各类形式的Docker Client(docker client in Go, docker_py, docker等)都可以直接与Swarm通讯。Swarm几乎所有用go语言来完成开发,Swarm0.2发布,相比0.1版本,0.2版本增长了一个新的策略来调度集群中的容器,使得在可用的节点上传播它们,以及支持更多的Docker命令以及集群驱动。
  Swarm deamon只是一个调度器(Scheduler)加路由器(router),Swarm本身不运行容器,它只是接受docker客户端发送过来的请求,调度适合的节点来运行容器,这意味着,即便Swarm因为某些缘由挂掉了,集群中的节点也会照常运行,当Swarm从新恢复运行以后,它会收集重建集群信息.前端

Swarm结构图

Swarm的基本命令

docker node 用来显示集群的节点,默认创建时只有一个节点,固然也就谈不上高可用了,可使用docker node --help来查看全部node参数node

集群初始化 docker swarm init  docker

当已经被初始化后,就不能从新执行这个操做了,使用docker node ls 来查看刚创建的集群api

集群中的管理节点和工做节点功能图网络

 

添加管理节点 docker swarm join ssh

Docker Swarm 命令中还须要添加一些选项:post

* join:代表一个新的节点将被添加进 Swarmui

* –manager:代表节点的性质(manager vs worker)spa

* –listen-addr:让一个新添加的节点能够访问 Swarm 内的其余节点

* 最后的参数就是第一管理节点的地址(即这一命令将被送到的那个节点)

注意:因为 –auto-accept manager 选项会在 Swarm 初始化的过程当中被提供,因此第二管理节点会被自动接受。若是没有这一选项,那么第二管理节点须要被第一管理节点手动接受。

$ MANAGER2_IP=$(docker-machine ip manager2)
docker-machine ssh manager2 docker swarm join --manager --listen-addr $MANAGER2_IP:2377 $MANAGER1_IP:2377

Swarn部署时使用的脚本,来自网络

下面是一小段用来建立 Docker 主机并部署 Swarm 的 Shell 脚本。固然了,管理/工做节点的数字都是能够随意改动的。
注意:建立两个管理节点和两个工做节点,仅仅是用来做示范。在工业生产中,咱们可能须要在集群里搭建 3 个管理节点和 5 个工做节点。

# Define the number of managers/workers
MANAGER=3
WORKER=5

# Create the Docker hosts
for i in $(seq 1 $MANAGER); do docker-machine create --driver virtualbox manager$i; done
for i in $(seq 1 $WORKER); do docker-machine create --driver virtualbox worker$i; done

# Init the swarm
docker-machine ssh manager1 docker swarm init --auto-accept manager --auto-accept worker --listen-addr $(docker-machine ip manager1):2377

# Add additional manager(s)
for i in $(seq 2 $MANAGER); do docker-machine ssh manager$i docker swarm join --manager --listen-addr $(docker-machine ip manager$i):2377 $(docker-machine ip manager1):2377; done

# Add workers
for i in $(seq 1 $WORKER); do docker-machine ssh worker$i docker swarm join --listen-addr $(docker-machine ip worker$i):2377 $(docker-machine ip manager1):2377; done

对于上面文章中,只提到了集群,而没有谈到如何去使用,在创建集群后,服务的部署咱们能够用

docker stack deploy  -c test.yml test

下面给出本身写的一个服务,版本3的

version: "3"

services:
  loggerapi:
    image: logger.api
    build:
      context: ./src/Logger.Api
      dockerfile: Dockerfile
    ports:
      - "5000:80"
    networks:
      - ingress

 loggermanager:
    image: logger.manager
    build:
      context: ./src/Logger.Manager
      dockerfile: Dockerfile
    ports:
      - "5050:80"
    networks:
      - ingress

networks:
  ingress:

这里有个服务要注意,服务的名称必定不能有点,如logger.manager这是错误的!

来创建一个服务,同时可使用docker service来查看已经运行的服务!

还有一点要注意,yml在进行v3版后,再也不支持build,也就是说,你须要先把镜像创建好才行!

 

回到目录

相关文章
相关标签/搜索