回到目录

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参数

集群初始化 docker swarm init

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

集群中的管理节点和工作节点功能图

添加管理节点 docker swarm join

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

* join:表明一个新的节点将被添加进 Swarm

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

* –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=
WORKER= # Create the Docker hosts
for i in $(seq $MANAGER); do docker-machine create --driver virtualbox manager$i; done
for i in $(seq $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): # Add additional manager(s)
for i in $(seq $MANAGER); do docker-machine ssh manager$i docker swarm join --manager --listen-addr $(docker-machine ip manager$i): $(docker-machine ip manager1):; done # Add workers
for i in $(seq $WORKER); do docker-machine ssh worker$i docker swarm join --listen-addr $(docker-machine ip worker$i): $(docker-machine ip manager1):; done

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

docker stack deploy  -c test.yml test

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

version: ""

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,也就是说,你需要先把镜像建立好才行!

回到目录

docker~swarm搭建docker高可用集群的更多相关文章

  1. 阿里云搭建k8s高可用集群(1.17.3)

    首先准备5台centos7 ecs实例最低要求2c4G 开启SLB(私网) 这里我们采用堆叠拓扑的方式构建高可用集群,因为k8s 集群etcd采用了raft算法保证集群一致性,所以高可用必须保证至少3 ...

  2. 搭建 Kubernetes 高可用集群

    使用 3 台阿里云服务器(k8s-master0, k8s-master1, k8s-master2)作为 master 节点搭建高可用集群,负载均衡用的是阿里云 SLB ,需要注意的是由于阿里云负载 ...

  3. 基于keepalived搭建MySQL高可用集群

    MySQL的高可用方案一般有如下几种: keepalived+双主,MHA,MMM,Heartbeat+DRBD,PXC,Galera Cluster 比较常用的是keepalived+双主,MHA和 ...

  4. 基于 ZooKeeper 搭建 Spark 高可用集群

    一.集群规划 二.前置条件 三.Spark集群搭建         3.1 下载解压         3.2 配置环境变量         3.3 集群配置         3.4 安装包分发 四.启 ...

  5. Spark学习之路(七)—— 基于ZooKeeper搭建Spark高可用集群

    一.集群规划 这里搭建一个3节点的Spark集群,其中三台主机上均部署Worker服务.同时为了保证高可用,除了在hadoop001上部署主Master服务外,还在hadoop002和hadoop00 ...

  6. Spark 系列(七)—— 基于 ZooKeeper 搭建 Spark 高可用集群

    一.集群规划 这里搭建一个 3 节点的 Spark 集群,其中三台主机上均部署 Worker 服务.同时为了保证高可用,除了在 hadoop001 上部署主 Master 服务外,还在 hadoop0 ...

  7. 入门大数据---基于Zookeeper搭建Spark高可用集群

    一.集群规划 这里搭建一个 3 节点的 Spark 集群,其中三台主机上均部署 Worker 服务.同时为了保证高可用,除了在 hadoop001 上部署主 Master 服务外,还在 hadoop0 ...

  8. mysql+mycat搭建稳定高可用集群,负载均衡,主备复制,读写分离

    数据库性能优化普遍采用集群方式,oracle集群软硬件投入昂贵,今天花了一天时间搭建基于mysql的集群环境. 主要思路 简单说,实现mysql主备复制-->利用mycat实现负载均衡. 比较了 ...

  9. 基于Docker-compose搭建Redis高可用集群-哨兵模式(Redis-Sentinel)

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_110 我们知道,Redis的集群方案大致有三种:1)redis cluster集群方案:2)master/slave主从方案:3) ...

  10. 使用 Load Balancer,Corosync,Pacemaker 搭建 Linux 高可用集群

    由于网络架构的原因,在一般虚拟机或物理环境中常见的用 VIP 来实现双机高可用方案,无法照搬到 Azure 平台.但利用 Azure 平台提供的负载均衡或者内部负载均衡功能,可以达到类似的效果. 本文 ...

随机推荐

  1. Nodejs.Electron(Nodejs的图形界面开发)安装和试用

    # 克隆示例项目的仓库 git clone https://github.com/electron/electron-quick-start # 进入这个仓库 cd electron-quick-st ...

  2. inner join 与 left join 之间的区别

    关于inner join 与 left join 之间的区别,以前以为自己搞懂了,今天从前端取参数的时候发现不是预想中的结果,才知道问题出在inner join 上了. 需求是从数据库查数据,在前端以 ...

  3. bzoj5250 [2018多省省队联测]秘密袭击

    博主蒟蒻,目前还不会动态dp,所以下面说的是一个并不优秀的暴力,我会补的! 我们考虑按权值从大到小依次点亮每个点,相同权值可以同时点亮,每次点亮后,我们进行一次树形背包. 处理出$f[i][j]$表示 ...

  4. BZOJ_3589_动态树_容斥原理+树链剖分

    BZOJ_3589_动态树_容斥原理+树链剖分 题意: 维护一棵树,支持1.子树内点权加上一个数  2.给出k条链,求路径上的点权和(重复的计算一次) (k<=5) 分析: 可以用树剖+线段树解 ...

  5. BZOJ_3011_[Usaco2012 Dec]Running Away From the Barn _可并堆

    BZOJ_3011_[Usaco2012 Dec]Running Away From the Barn _可并堆 Description 给出以1号点为根的一棵有根树,问每个点的子树中与它距离小于l的 ...

  6. ubuntu ssh 免密码登录

    1 ssh 是什么? ssh 是一种 加密协议,ssh 是两个加密的密码,一个是公钥一个是私钥,公钥加密的信息只有是要才能解密.ssh协议可用于服务之间的通信.例如:登录验证,git的授权等等 2 s ...

  7. 实现自动SSH连接

    #!/usr/bin/expect set timeout 10 set username [lindex $argv 0] set password [lindex $argv 1] set hos ...

  8. 数字类型——python3

    今天我为各位小伙伴准备了python3中数字类型,希望能够帮助到你们! Python 数字数据类型用于存储数值. 数据类型是不允许改变的,这就意味着如果改变数字数据类型的值,将重新分配内存空间. 以下 ...

  9. C++ bitset用法

    概念: bitset是用来存储位的(其中的元素只有两种形式) 这个类通常用来模拟一个布尔数组,但对空间分配上进行了优化:通常,每个元素只占用一个bit ,而通常char类型是它的八倍 每个位置上的位都 ...

  10. 前端教程(1)http协议的深刻理解

    一 HTTP协议简介 作为学习前端开发的开始,我们必须搞明白以下几件事 1.什么是互联网      互联网=物理连接介质+互联网协议     2.互联网建立的目的? 数据传输打破地域限制,否则的话,我 ...