#故障转移 Failover

#当其中一个节点关闭宕机时,其节点中的service会转移到另一个节点上。
Swarm会检测到node1发生故障并把此故障节点的状态标记为Down; docker node ls 可查看 node1的STATUS 为Down
同时 Swarm会把node1上的service调度到其它有资源的节点上来运行;docker service ps web_server 可查看其过程和状态

#访问server

#便于分析,重新部署一个
docker service create --name=htdocs_nginx --replicas=3 nginx
docker service ps htdocs_nginx 可查看副本数
--replicas可直接指定副本数 ,不需要再用docker scale命令

#现在我们要访问server
在以上操作中,我们每个节点都有运行service, node1、node2、node3 容器里是监听80端口的,但我们并没有映射端口到Host,所以要进行以下操作

#进入容器查看:
docker exec 容器ID /bin/sh 也可使用 /bin/bash
容器IP 为172.12.0.5, 实际上连接的是Docker的bridge网络
crul 172.12.0.5 可以访问
但是这是在容器内部,需要实现在外部也可访问,也就时暴露80端口

#外部访问
docker service update --publish-add 80:80 htdocs_nginx
这样就映射端口了,外部也可访问。
当然新建service时也可直接指定
docker service create --name htdocs_nginx --replicas=3 --publish-add 80:80 nginx

#routing mesh
我们访问每个节点的80端口都可以返回结果; swarm 内部的 load balancer 会将请求转发给 web_server 其中的一个副本。这就是 routing mesh 的作用。

注:当我们使用 --publish-add 80:80 时 swarm会重新配置副本,容器内的网络就会发生改变
器的网络与 --publish-add 之前已经大不一样了,现在有两块网卡,每块网卡连接不同的 Docker 网络。
实际上:

eth0 连接的是一个 overlay 类型的网络,名字为 ingress,其作用是让运行在不同主机上的容器可以相互通信。

eth1 连接的是一个 bridge 类型的网络,名字为 docker_gwbridge,其作用是让容器能够访问到外网。

ingress 网络是 swarm 创建时 Docker 为自动我们创建的,swarm 中的每个 node 都能使用 ingress。
通过 overlay 网络,主机与容器、容器与容器之间可以相互访问;同时,routing mesh 将外部请求路由到不同主机的容器,
从而实现了外部网络对 service 的访问。

#service与service通信 内部的
为了不暴露端口 增加安全性 ,我们可以用一下方法:
服务发现:
如果不 publish,那么 swarm 就要提供一种机制,能够:
让 service 通过简单的方法访问到其他 service。
当 service 副本的 IP 发生变化时,不会影响访问该 service 的其他 service。
当 service 的副本数发生变化时,不会影响访问该 service 的其他 service。
这其实就是服务发现(service discovery)。Docker Swarm 原生就提供了这项功能,通过服务发现,
service 的使用者不需要知道 service 运行在哪里,IP 是多少,有多少个副本,就能与 service 通信。

#创建overlay网络
docker network create --driver overlay app_net
docker network ls

#部署
docker service create --name my_web --replicas=5 --network app_net nginx
docker service create --name database --network app_net mysql

docker service ps database 查看容器 然后进入容器
docke exec 容器ID /bin/sh ping my_web 发现可通
同时ping所得到的my_webIP是VIP 虚拟IP ,swarm 会将对 VIP 的访问负载均衡到每一个副本。

failover swarm 故障转移的更多相关文章

  1. 同一域环境下SQLServer DB Failover故障转移配置详解

    前 言:    很多情况下,虽然我们的站点.APIService.Redis等已经做成了分布式架构,但是SQLServer依然还是单体结构,当出现网络异常.服务器宕机时便存在极大的风险,这时候我们需要 ...

  2. 第7章 性能和可靠性模式 Failover Cluster(故障转移群集)

    上下文 您已经决定在设计或修改基础结构层时使用群集以提供高度可用的服务. 问题 您应该如何设计一个高度可用的基础结构层,来防止因单台服务器或它所运行的软件出现故障而导致的服务丢失? 影响因素 在设计高 ...

  3. Oracle Dataguard故障转移(failover)操作

    注意:故障转移会破坏DG的主从关系,使其变为互不相关的2个数据库,谨慎使用. (一)故障转移操作流程图 (二)故障转移操作流程 备注:以下操作步骤与上面流程图步骤一一对应 STEP1:刷新所有未发送到 ...

  4. Oracle DataGuard故障转移(failover)后使用RMAN还原失败的主库

    (一)DG故障转移后切换为备库的方法 在DG执行故障转移之后,主库与从库的关系就被破坏了.这个时候如果要恢复主从关系,可以使用下面的3种方法: 将失败的主库重新搭建为备库,该方法比较耗时: 使用数据库 ...

  5. 在Windows Server 2012 R2中搭建SQL Server 2012故障转移集群

    需要说明的是我们搭建的SQL Server故障转移集群(SQL Server Failover Cluster)是可用性集群,而不是负载均衡集群,其目的是为了保证服务的连续性和可用性,而不是为了提高服 ...

  6. 在Azure上实现Linux Server故障转移

    要充分利用公有云的弹性扩展和高可用, 首先要在应用系统层面支持横向扩展(scale out),这个说起来很容易,或者说对新开发的应用系统而言已经成为标配.但是对已有的.老旧的应用系统来说,这就比较困难 ...

  7. Hyper-V 2012 R2 故障转移群集

    和终端用户相比,企业用户对于业务的连续性和可靠性更为在意.相对而言,企业一般不会将追逐单一硬件的性能排在第一位. 如何衡量业务是否持续可用,一般使用"x 个 9"这种方式来定义.如 ...

  8. Apache ActiveMQの版本更迭和Apache ActiveMQの故障转移

    本文描述apache activemq 版本更迭的原因以及Apache ActiveMQのThe Failover Transport new features in 5.2.0  1.对信息的传输/ ...

  9. 为什么很多人用keepalived来实现redis故障转移

    目前,Redis还没有一个类似于MySQL Proxy或Oracle RAC的官方HA方案.Redis作者有一个名为Redis Sentinel的计划 ,据称将会有监控,报警和自动故障转移三大功能,非 ...

随机推荐

  1. 通过爬虫程序深入浅出java 主从工作模型

    随手做的爬虫程序在   https://github.com/rli07/master_java/blob/master/spider.zip  可下载. 这是我做的系统学习图, 可以参考一下 系统架 ...

  2. Tomcat启用GZIP压缩,提升web性能

    一.前言 最近做了个项目,遇到这么一个问题:服务器返回给客户端的json数据量太大(大概65M),在客户端加载了1分多钟才渲染完毕,费时耗流量,用户体验极其不好.后来网上搜优化的方法,就是Http压缩 ...

  3. Oracle条件判断if...elsif

  4. 网络编程--使用TCP协议发送接收数据

    package com.zhangxueliang.tcp; import java.io.IOException; import java.io.OutputStream; import java. ...

  5. 【学亮IT手记】angularJS+select2多选下拉框实例

     永远保持对大部分知识的好奇心,学习从不枯燥,也没有被逼学习一说,乐此不疲才是该有的心态和境界!!! 引入相关js库: html部分代码: angularJS定义数据源变量:

  6. mybatis事务管理机制详解

    1.mybatis事务的配置和使用 mybatis事务有两种使用方式: (a):使用JDBC的事务管理机制:即使用java.Sql.Connection对象完成对事务的提交,回滚和关闭操作. (b): ...

  7. jquery选择基础

    1 元素选择器 之前不熟悉的是如: $("input.cls1"); 这种用法 2 属性选择器 包含name属性的input元素, 如 $("input[name]&qu ...

  8. Golang的日志处理

    整个看了一圈下来,感觉Golang的日志包在管理多线程安全的情况下,提供了最小粒度的工具.并没有提供什么复杂的过滤器之类的生成. 实现了一个demo来记录一下日志分类日志打印等实现: package ...

  9. linux audit审计(7)--读懂audit日志

    让我们先来构造一条audit日志.在home目录下新建一个目录,然后配置一条audit规则,对这个目录的wrax,都记录审计日志: auditctl -w /home/audit_test -p wr ...

  10. python数学第三天【方向导数】

    1.方向导数 2. 梯度 3. 凸函数: 4. 凸函数的判定 5. 凸函数的一般表示 6. 凸性质的应用