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

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

我们在使用VM或DOCKER环境时, 如果VM或DOCKER发生failover, 转移到其他宿主机运行后,
原来APP和Server建立的TCP会话怎样才能快速的感知并重新和新的Server建立TCP会话呢?
假设结构如下 : 
fast known when vm/docker failover to another machine (Linux exp) - 德哥@Digoal - PostgreSQL research


假设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 内核会处理会话的状态.
fast known when vm/docker failover to another machine (Linux exp) - 德哥@Digoal - PostgreSQL research


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

[参考]
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/109109.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • docker部署jenkins安装使用教程_docker关闭所有容器

    docker部署jenkins安装使用教程_docker关闭所有容器前言使用docker安装jenkins环境,jenkins构建的workspace目录默认是在容器里面构建的,如果我们想执行python3的代码,需进容器内部安装python3的环境。进jenki

    2022年7月30日
  • Docker网络,网络工程师还不赶紧收藏!

    Docker网络,网络工程师还不赶紧收藏!学习Docker网络前建议清空所有环境dockerrmi-f$(dockerimages-aq)每启动一个docker容器,docker就会给docker容器分配一个ip。只要安装了docker,就会有一个网卡docker0(桥接模式,使用的是evth-pair技术)什么是Evth-pairEvth-pair就是一对的虚拟设备接口,他们都是成对出现的,一段连着协议,一段彼此相连.正因为这个特性,evth-pair充当一个桥梁,连接各种虚拟网络设备。OpenStac,Dock

    2022年7月19日
  • docker搭建kafka集群[通俗易懂]

    docker搭建kafka集群[通俗易懂]docker搭建kafka集群我在M1mbp上使用的以下镜像新建文件zk-kafka-docker-compose.ymlversion:”2″services:zookeeper:user:rootimage:docker.io/zookeeperports:-“12181:2181″environment:-ALLOW_ANONYMOUS_LOGIN=yesvolumes:-zoo

    2022年4月25日
  • 用docker部署jar包_docker run 参数

    用docker部署jar包_docker run 参数小小总结一、思路1、将docker容器中的指定文件夹挂载到宿主机上,更新jar包只需上传到宿主机指定路径,方便更新2、利用bash文件运行jar包,并构建该bash的镜像,代替构建直接运行jar包的镜像,利于镜像与jar包解耦。例如,app-1.0.0.jar升级到app-2.0.0.jar,只须更改bash文件的内容,而无须构建新的镜像。二、准备工作1、创建存放docker配置文件、jar包的文件夹在宿主机上,创建文件夹:/home/admin/app,用于存放bash文件和jar包。然

    2022年9月27日
  • 记录一次docker启动容器后Exited(127)的解决过程[通俗易懂]

    特意强调一下:本人使用的系统为centos6.8本人运行容器的状态为Exited(127),如果你的问题不是127,可能解决不了你的问题问题:安装docker之后,拉取镜像dockerpullredis然后dockerimages查看所有镜像后,开始命令运行redisdockerrun-d–name=myredis-p6379:6379-d7caaqwe22q(镜像id)然后dockerps-a发现:CONTAINERIDIMAGE

    2022年4月15日
  • Docker 下查看Redis版本的命令「建议收藏」

    Docker 下查看Redis版本的命令「建议收藏」命令:dockerexec-itfirst-redisredis-server-vps:其中first-redis为redis在docker中的容器名称

    2022年6月3日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号