fast known when vm/docker failover to another machine (Linux exp)

我们在使用VM或DOCKER环境时, 如果VM或DOCKER发生failover, 转移到其他宿主机运行后,

原来APP和Server建立的TCP会话怎样才能快速的感知并重新和新的Server建立TCP会话呢?

假设结构如下 : 

假设APP使用主机名连接Server, 比较靠谱的是使用DNS做这类解析.

当vm/docker failover后, Server的IP可能发生变化, 也可能不发生变化. 

如果vm/docker ip发生变化, 势必设计到DNS的变更, 那么为了快速的解析到正确的IP, DNS的TTL不能太大.

如果vm/docker ip不发生, 那么不需要变更DNS, 所以DNS TTL无所谓.

另一方面, TCP会话断开后, app要迅速的感知, 除了应用层自己做心跳以外(这里假设APP没有心跳功能), 可以依靠TCP的心跳.

[root@150 ~]# sysctl -a|grep keepa

net.ipv4.tcp_keepalive_time = 7200

net.ipv4.tcp_keepalive_probes = 9

net.ipv4.tcp_keepalive_intvl = 75

缩短这些心跳值, linux 内核会处理会话的状态.

1. app连接主机名, 从DNS解析VM/DOCKER IP

2. vm/docker container failover to another machine

3.1. when vm/docker ip changed, 修改DNS (需快速修改)

3.2. app等待tcp会话超时, 或应用层感知  (需快速超时)

3.3. 等待DNS TTL超时, 才能解析主机名到新的IP地址,   (需快速超时)

3.4. APP连接到新的地址

4.1 when vm/docker ip unchanged

4.2. app等待tcp会话超时, 或应用层感知  (需快速超时)

4.3app连接主机名, 从DNS解析VM/DOCKER IP

[参考]

1. http://blog.163.com/digoal@126/blog/static/163877040201410105419967/

时间: 2024-10-23 07:34:26

fast known when vm/docker failover to another machine (Linux exp)的相关文章

《自己动手写Docker》书摘之一: Linux Namespace

Linux Namespace 介绍 我们经常听到说Docker 是一个使用了Linux Namespace 和 Cgroups 的虚拟化工具,但是什么是Linux Namespace 它在Docker内是怎么被使用的,说到这里很多人就会迷茫,下面我们就先介绍一下Linux Namespace 以及它们是如何在容器里面使用的. 概念 Linux Namespace 是kernel 的一个功能,它可以隔离一系列系统的资源,比如PID(Process ID),User ID, Network等等.一

《自己动手写Docker》书摘之三: Linux UnionFS

UnionFS UnionFS是一种为Linux,FreeBSD和NetBSD操作系统设计的把其他文件系统联合到一个联合挂载点的文件系统服务.它使用branch把不同文件系统的文件和目录"透明地"覆盖,形成一个单一一致的文件系统.这些branches或者是read-only或者是read-write的,所以当对这个虚拟后的联合文件系统进行写操作的时候,系统是真正写到了一个新的文件中.看起来这个虚拟后的联合文件系统是可以对任何文件进行操作的,但是其实它并没有改变原来的文件,这是因为uni

如何在 Docker 容器中运行 Kali Linux 2.0

介绍 Kali Linux 是一个对于安全测试人员和白帽的一个知名操作系统.它带有大量安全相关的程序,这让它很容易用于渗透测试.最近,Kali Linux 2.0 发布了,它被认为是这个操作系统最重要的一次发布.另一方面,Docker 技术由于它的可扩展性和易用性让它变得很流行.Dokcer 让你非常容易地将你的程序带给你的用户.好消息是你可以通过 Docker 运行Kali Linux 了,让我们看看该怎么做 :) 在 Docker 中运行 Kali Linux 2.0 相关提示 如果你还没有

Docker的价值和应用场景分析

近年来,Docker在IT界可谓风光十足,各大技术论坛上赚足了眼球,公司内外也有相当多的介绍和尝试,看上去如此高大上的技术,貌似会给云.服务部署.运维等领域带来颠覆性的创新. 近期查阅了一些文档,较深入的了解Docker的技术细节,发现Docker确实在解决部分需求时恰到好处,但也绝对不是无所不能的万金油. 一.什么是Docker 官方定义: Develop, Ship and Run Any Application, Anywhere Docker is a platform for deve

初识Docker,概念-架构-相关术语

介绍Docker概念与平台架构,相关术语 Docker的历史 诞生 Docker 是Docker.Inc 公司开源的一个基于 LXC技术之上构建的Container容器引擎,基于Google 公司推出的 Go语言实现的云开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目.项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护.而且居然只有 1W 行就完成了这些功能.如果想尝试一下的话可以看 官方介绍了.   D

通过Docker容器运行持续集成/持续部署

本文讲的是通过Docker容器运行持续集成/持续部署,[编者的话] 对于Docker主流的应用场景:持续集成和持续部署(CI/CD)大家也许并不陌生.这篇文章从独特的视角阐述了如何利用各种云平台构建属于自己的CI/CD容器,笔者还自己扩展了Gitlab CI引擎,对CI感兴趣的同学对这个文章应该很感兴趣. 我曾经使用Docker了一段时间,在过去的一年里伴随着众多的Docker容器涌入,帮助用户们更容易的部署Docker容器到生产环境中.一些工具是第三方公司提供,当然也包括Docker公司自己的

深入浅出Docker(1)----Docker核心技术预览

本文为转载文章http://www.infoq.com/cn/articles/docker-core-technology-preview/ http://blog.csdn.net/minimicall [编者按]Docker是PaaS供应商dotCloud开源的一个基于LXC 的高级容器引擎,源代码托管在 GitHub 上, 基于Go语言开发并遵从Apache 2.0协议开源.Docker提供了一种在安全.可重复的环境中自动部署软件的方式,它的出现拉开了基于云计算平台发布产品方式的变革序幕

.NET 和 Docker结合使用

本文讲的是.NET 和 Docker结合使用[编者的话]本文主要围绕 .NET 和 Docker 结合的几个方面,.NET 团队所提供的包括基础入门,使用场景等实践,以及他们在推进 .NET 和 Docker 结合上所做出的努力,同时也提供了一些示例文件和经验,可以帮助用户更加容易地使用和迁移现有服务. [3 天烧脑式 Docker 训练营 | 上海站]随着Docker技术被越来越多的人所认可,其应用的范围也越来越广泛.本次培训我们理论结合实践,从Docker应该场景.持续部署与交付.如何提升测

Docker使用中可能遇到的问题

Docker并不是一个新的技术,容器化也不是,早在2006年就陆续出现了LXC, OpenVZ,Jail等容器虚拟化技术,但是为什么Docker却能异军突起呢?Docker的核心是基于 Linux的CGroup.Namespace和LayeredFS技术,通过资源的控制.隔离和对镜像的分层处理,是Docker容器能够将应用程序和运行环境打包到一起,这样就可以Build, Ship And Run anywhere.与其说是Docker火,不如说是其天生的轻量级属性,正好迎合了云计算大行其道的今天