一、前言

  在Docker Swarm集群中,Swarm manager负责管理整个集群,如果管理节点manager出现故障,虽然不会影响现有的服务和工作节点,但是我们不能继续管理我们的docker swarm集群。所以可以增加多个管理节点,这将使集群具备高可用性且节点故障容错能力。

  管理节点作用:

  • 维护集群状态
  • 调度服务
  • 提供swarm模式的HTTP API

二、集群高可用

  2.1 扩展集群

  Docker UCP(Docker的集群管理工具) 设计为可以随应用大小和使用率的增长而水平扩展。可以在 UCP 集群中添加或删除节点来扩展集群以满足需求。由于 UCP 利用 Docker 引擎提供的集群功能,因此您可以使用 docker swarm join 命令向集群中添加更多节点。在加入新节点时,UCP 服务将在此节点中自动开始运行。  

# 在将节点加入Swarm集群中时,可以选择加入的是工作节点还是管理节点

# 加入工作节点
[root@manager ~]# docker swarm join-token worker
To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-3fzyz5knfbhw9iqlzxhb6dmzdtr0izno9nr7iqc5wid09uglh8-0mocmawzvm3xge6s37n5a48fw 172.16.60.95:2377 # 加入管理节点
[root@manager ~]# docker swarm join-token manager
To add a manager to this swarm, run the following command: docker swarm join --token SWMTKN-1-3fzyz5knfbhw9iqlzxhb6dmzdtr0izno9nr7iqc5wid09uglh8-ayq7p26q6cwpxomwflo7vx3fu 172.16.60.95:2377

  2.2 更改节点角色

  可以通过docker node promote/demote来节点改变成管理或工作节点  

root@manager ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
kfi2r4dw6895z5yvhlbyzfck6 * manager Ready Drain Leader 18.03.0-ce
41hev84z7mliyhyhkthrcf4iv node-01 Ready Active 18.03.0-ce
j1bmj304wnbz23ng1w88wvkge node-02 Ready Active 18.03.0-ce
gsya6g8dsnjrr3cxm0cyonm4b node-03 Ready Active 18.03.0-ce # 目前只有一个管理节点manager, #现在讲node-01提升为管理节点 [root@manager ~]# docker node promote node-01 manager
Node node-01 promoted to a manager in the swarm.
Node kfi2r4dw6895z5yvhlbyzfck6 is already a manager. [root@manager ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
kfi2r4dw6895z5yvhlbyzfck6 * manager Ready Drain Leader 18.03.0-ce
41hev84z7mliyhyhkthrcf4iv node-01 Ready Active Reachable 18.03.0-ce
j1bmj304wnbz23ng1w88wvkge node-02 Ready Active 18.03.0-ce
gsya6g8dsnjrr3cxm0cyonm4b node-03 Ready Active 18.03.0-ce #可以看到node-01的 MANAGER STATUS 已经是Reachable

  通过node-01管理Swarm集群

# 可以执行docker manager的命令

[root@node-01 ~]# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
n85ykahh7vfs my-centos replicated 1/1 centos:latest
qwuil9kydeya my-web replicated 5/5 nginx:latest *:80->80/tcp
c7gmtmfacqt5 web-test replicated 5/5 nginx:latest

  2.3 高可用性的要求

  为了充分利用swarm的容错特性,docker建议管理节点的数量为奇数。Swarm的manager节点之间是基于raft一致性算法来处理关系,那么manager节点中就会有三种不同的角色:指挥者、跟随者和选举者。Docker官方建议Swarm中管理节点最好不要超过7个,通常情况下5个就够了。

  

Swarm Size Majority Fault Tolerance
1 1 0
2 2 0
3 2 1
4 3 1
5 3 2
6 4 2
7 4 3
8 5 3
9 5 4

  

  所以这边swarm集群中有4台主机,需要有3个管理节点

[root@manager ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
kfi2r4dw6895z5yvhlbyzfck6 * manager Ready Drain Leader 18.03.0-ce
41hev84z7mliyhyhkthrcf4iv node-01 Ready Active Reachable 18.03.0-ce
j1bmj304wnbz23ng1w88wvkge node-02 Ready Active Reachable 18.03.0-ce
gsya6g8dsnjrr3cxm0cyonm4b node-03 Ready Active 18.03.0-ce

  2.4 验证高可用性

  停止manager管理节点的docker服务

#  manager节点
[root@manager ~]# systemctl stop docker # 查看节点信息
[root@node-01 ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
kfi2r4dw6895z5yvhlbyzfck6 manager Down Drain Unreachable 18.03.0-ce
41hev84z7mliyhyhkthrcf4iv * node-01 Ready Active Leader 18.03.0-ce
j1bmj304wnbz23ng1w88wvkge node-02 Ready Active Reachable 18.03.0-ce
gsya6g8dsnjrr3cxm0cyonm4b node-03 Ready Active 18.03.0-ce

  可以看到现在node-01现在是leader了

  查看节点状态:

# 管理节点的状态
docker node inspect manager --format "{{ .ManagerStatus.Reachability }}"
reachable

 

Docker Swarm高可用性的更多相关文章

  1. (转) Docker swarm - 使用体验 1+2

    背景 凭借敏捷开发部署理念的推行,相信对于很多人来说docker这项容器技术已经并不陌生,Docker 1.12引擎发布了快两个月,新引擎中包含了许多特性.诸如: Swarm模式,容器集群的健康检查, ...

  2. Docker(六):Docker 三剑客之 Docker Swarm

    实践中会发现,生产环境中使用单个 Docker 节点是远远不够的,搭建 Docker 集群势在必行.然而,面对 Kubernetes, Mesos 以及 Swarm 等众多容器集群系统,我们该如何选择 ...

  3. Docker三剑客之Docker Swarm

    一.什么是Docker Swarm Swarm是Docker公司推出的用来管理docker集群的平台,几乎全部用GO语言来完成的开发的,代码开源在https://github.com/docker/s ...

  4. 在Docker Swarm上部署Apache Storm:第2部分

    [编者按]本文来自 Baqend Tech Blog,描述了如何在 Docker Swarm,而不是在虚拟机上部署和调配Apache Storm集群.文章系国内 ITOM 管理平台 OneAPM 编译 ...

  5. docker swarm英文文档学习-10-使用Docker密钥管理敏感数据

    Manage sensitive data with Docker secrets使用Docker secrets管理敏感数据 About secrets 对于Docker Swarm服务来说,sec ...

  6. docker swarm英文文档学习-6-添加节点到集群

    Join nodes to a swarm添加节点到集群 当你第一次创建集群时,你将单个Docker引擎置于集群模式中.为了充分利用群体模式,可以在集群中添加节点: 添加工作节点可以增加容量.当你将服 ...

  7. docker swarm英文文档学习-4-swarm模式如何运行

    1)How nodes work Docker引擎1.12引入了集群模式,使你能够创建一个由一个或多个Docker引擎组成的集群,称为集群.集群由一个或多个节点组成:在群模式下运行Docker引擎1. ...

  8. Docker Manager for Docker Swarm deploy

    一.Swarm概述 Swarm是Docker公司在2014年12月初发布的一套较为简单的工具,用来管理Docker集群,它将一群Docker宿主机变成一个单一的,虚拟的主机.Swarm使用标准的Doc ...

  9. [docker swarm] 从单容器走向负载均衡部署

    背景 之前写过<<docker-compose真香>> 和<docker-compose.docker stack前世今生>两篇博客, 回顾一下思路: ① dock ...

随机推荐

  1. TeamWork#3,Week5,Performance Test of Crawlers

    爬虫总体性能不错,能完成基本的网络数据爬取,没有功能上的缺陷.下图为饿了么网站商户信息爬取结果及原网站信息. 大部分信息是正确的,但也有一些错误.比如下图,小渝馆家常菜和渝码头川菜位置爬取错了. 再比 ...

  2. Daily Scrum (2015/10/21)

    今天可以说是项目正式开始的第一天,由于大家缺乏做团队项目的经验,对TFS的使用都还不太熟悉,所以今天大家的主要工作是熟悉TFS的使用和对代码进行初步的理解.我们预计需要2-3天时间来理解透彻源代码.以 ...

  3. [2017BUAA软工]结对项目

    软工结对项目 一. Github项目地址 https://github.com/crvz6182/sudoku_partner 二. PSP表格 Psp personal software progr ...

  4. MySQL课堂练习 20162315

    练习内容 1.参考教材相关代码,提交能连接到world的截图(有学号水印) 2.查询world数据库,获得人口超过500万的所有城市的列表. 3.查询world数据库,获得New Jersey州所有城 ...

  5. Sqlite数据库初步的了解

    转载与:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2013/0714/1438.html    来自:泡在网上的日子. 和其他数据库一 ...

  6. Hibernate笔记④--一级二级缓存、N+1问题、saveorupdate、实例代码

    一级缓存及二级缓存 一级缓存也是Session 缓存     一个链接用户的多次查询使用缓存     跨用户 则无缓存     hibernate自带的 get和load都会填充并利用一级缓存 二级缓 ...

  7. java中的互斥锁和信号量的区别

    互斥锁和信号量都是操作系统中为并发编程设计基本概念,互斥锁和信号量的概念上的不同在于,对于同一个资源,互斥锁只有0和1 的概念,而信号量不止于此.也就是说,信号量可以使资源同时被多个线程访问,而互斥锁 ...

  8. JS计算两个日期之间的天数,时间差计算

    1.日期之间的天数计算 //计算天数差的函数,通用 function DateDiff(sDate1, sDate2) { //sDate1和sDate2是2017-9-25格式 var aDate, ...

  9. HDU 2103 Family planning

    http://acm.hdu.edu.cn/showproblem.php?pid=2103 Problem Description As far as we known,there are so m ...

  10. MSSQL给字段添加默认值

    create table t(id int,v int ) go alter table t ADD DEFAULT 0 FOR v go