failover swarm 故障转移
#故障转移 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 故障转移的更多相关文章
- 同一域环境下SQLServer DB Failover故障转移配置详解
前 言: 很多情况下,虽然我们的站点.APIService.Redis等已经做成了分布式架构,但是SQLServer依然还是单体结构,当出现网络异常.服务器宕机时便存在极大的风险,这时候我们需要 ...
- 第7章 性能和可靠性模式 Failover Cluster(故障转移群集)
上下文 您已经决定在设计或修改基础结构层时使用群集以提供高度可用的服务. 问题 您应该如何设计一个高度可用的基础结构层,来防止因单台服务器或它所运行的软件出现故障而导致的服务丢失? 影响因素 在设计高 ...
- Oracle Dataguard故障转移(failover)操作
注意:故障转移会破坏DG的主从关系,使其变为互不相关的2个数据库,谨慎使用. (一)故障转移操作流程图 (二)故障转移操作流程 备注:以下操作步骤与上面流程图步骤一一对应 STEP1:刷新所有未发送到 ...
- Oracle DataGuard故障转移(failover)后使用RMAN还原失败的主库
(一)DG故障转移后切换为备库的方法 在DG执行故障转移之后,主库与从库的关系就被破坏了.这个时候如果要恢复主从关系,可以使用下面的3种方法: 将失败的主库重新搭建为备库,该方法比较耗时: 使用数据库 ...
- 在Windows Server 2012 R2中搭建SQL Server 2012故障转移集群
需要说明的是我们搭建的SQL Server故障转移集群(SQL Server Failover Cluster)是可用性集群,而不是负载均衡集群,其目的是为了保证服务的连续性和可用性,而不是为了提高服 ...
- 在Azure上实现Linux Server故障转移
要充分利用公有云的弹性扩展和高可用, 首先要在应用系统层面支持横向扩展(scale out),这个说起来很容易,或者说对新开发的应用系统而言已经成为标配.但是对已有的.老旧的应用系统来说,这就比较困难 ...
- Hyper-V 2012 R2 故障转移群集
和终端用户相比,企业用户对于业务的连续性和可靠性更为在意.相对而言,企业一般不会将追逐单一硬件的性能排在第一位. 如何衡量业务是否持续可用,一般使用"x 个 9"这种方式来定义.如 ...
- Apache ActiveMQの版本更迭和Apache ActiveMQの故障转移
本文描述apache activemq 版本更迭的原因以及Apache ActiveMQのThe Failover Transport new features in 5.2.0 1.对信息的传输/ ...
- 为什么很多人用keepalived来实现redis故障转移
目前,Redis还没有一个类似于MySQL Proxy或Oracle RAC的官方HA方案.Redis作者有一个名为Redis Sentinel的计划 ,据称将会有监控,报警和自动故障转移三大功能,非 ...
随机推荐
- YARN的笔记
- MySQL Limit优化(转)
原文:http://bbs.landingbj.com/t-0-240894-1.html 首先,我们看一个分页SQL: SELECT time,pageFROM `l_not_200_page`WH ...
- C#设计模式之8:外观模式
外观模式 外观模式和适配器模式一样,都实现了接口改变,适配器模式是让一个接口转化成另外一个接口,而外观模式是让接口变得更简单. 先来看一下需求: 外观模式没有封装子系统的类,外观只是提供一个统一的接口 ...
- array_filter与array_map
php数组array_filter函数和array_slice函数:<?php /* array_filter()用回调函数过滤数组中的单元 array_filter(array,functio ...
- mybtis逆向工程实战教程--条件查询
mabitis逆向工程进行条件查询:
- java.lang.NoClassDefFoundError: org/apache/log4j/Priority的问题解决
在pom 文件中添加 <dependency> <groupId>log4j</groupId> <artifactId>log4j</artif ...
- Navicat Preminum
此软件在连接的时候,需要这样: 新建链接==>连接属性==>编码选择自动==>如果此时点击确定的话,会把整个服务器的所有数据库都打开, 我们也可以只打开指定的数据库, 点击高级==& ...
- DAY08、文件操作
一.文件操作模式汇总: 主模式: r:读模式 w:写模式(无创建,有清空) a:追加(有创建的功能) x:写,必须自己创建文件,否则报错 从模式: t:文本操作(默认模式)r >rt,w> ...
- python数据结构与算法学习自修第二天【时间复杂度与大O表示法】
#!/usr/bin/env python #! _*_ coding:UTF-8 _*_ from Queue import Queue import time que = Queue() time ...
- 无法启动此程序,因为计算机丢失MSVCR110.dll
解决方法下: 1.首先是打开浏览器,在浏览器的地址栏里输入 http://www.microsoft.com/zh-CN/download/details.aspx?id=30679 这个网址来进行相 ...