当前位置: 首页 > Linux

双机热备原理

时间:2023-04-06 06:47:23 Linux

转载自:码农翻车(微信ID:coderising)比尔。平衡软件将流量“平均”分配给后面几台服务器,获得了老板1000元的奖励。可张胖子心里不踏实。他总觉得系统里埋着一颗定时炸弹,随时都会引爆。炸弹是:LoadBalancer只有一台服务器,如果这台服务器挂了怎么办?没有LoadBalancer入口,用户请求无法分发,后面的服务器只能干瞪眼。这就是系统存在“单点故障”风险的含义。一天晚上,张胖子做了一个梦。他梦见LoadBalancer在高峰期死掉,导致整个管理系统瘫痪。眼看着无数订单流失,愤怒的老板不停地骂他:扣你这小子半年。薪水。张胖子吓得半夜惊醒,冷汗直冒。不想出现单点故障怎么办?张胖子稍加思索就能想到一个解决办法:安装两个LoadBalancer!但问题是:客户端应该访问哪一个?还用DNS轮询的方式?那么回到最初的问题。在这两个LoadBalancer之前加一个LoadBalancer?这不会是另一个单点故障吗?不,这条路行不通。张大胖打算另辟蹊径。从客户端的角度来看,这两个LoadBalancer应该是一个整体,就像一个虚拟服务器,这个虚拟服务提供一个IP(简称VIP)。在这两个LoadBalancer中,一个叫做Master,另一个可以叫做Backup。通常,Master负责工作,Backup待命。一旦Master挂了,Backup服务器会立即接管。在外界看来,虚拟服务器还在工作,对内部发生的“大地震”一无所知。想到这里,张胖子兴奋得睡不着觉,索性起身看邮件写代码。详细设计的第二天,张胖子七点多就来到了公司,想着把昨晚的方案汇报给比尔。但他来得太早,公司里空无一人。算了,很多细节还没有完善,大家不要着急。首先,这个虚拟VIP,如何实现两台服务器之间的“IP漂移”呢?张胖子曾经记得一个网卡可以设置多个地址,比如linux的eth0表示网卡1,可以绑定一个IP,同时也可以设置一个ip别名或者副ip.eth0-->192.168.1.10eth0:1-->192.168.1.100张胖子想:我可以让这个192.168.1.100成为VIP。如果服务器是Master,我可以绑定这个IP。如果是备份,则未绑定。换句话说,通过动态绑定/解除绑定,VIP可以在两个服务器之间来回“漂移”。这样就可以解决“IP漂移”的问题,但是Backup怎么知道Master挂了呢?理论上来说很简单,就是让Master不断的给Backup发送“心跳”消息(可以用广播的形式发送消息),这个Backup(LoadBalancer2)肯定有定时器,如果在特定的时间(嗯,这个时间应该是可配置的)如果收不到心跳,就认为Master完蛋了,需要站起来,擦干眼泪,继承前任遗志,愉快绑定VIP,继续伟大的革命事业。但是如果之前的Master(LoadBalancer1)又活了怎么办?LoadBalancer2呢?在革命的康庄大道上还没迈出几步,你会放弃还没有热身的VIP吗?如果LoadBalancer1是比较厉害的机器,战友们肯定希望他能统领大局。必须在此处定义策略。每台机器都必须有一个优先级(一个整数)。允许抢占时,谁的优先级高谁就是Master!张胖子想:看来我需要开发一个软件来实现这些通信“协议”和策略。这个软件需要在每个LoadBalancer上安装和运行,这样它们就可以组成一个单一的虚拟LoadBalancer对外提供服务。在每个LoadBalancer中,状态转换都是这样的。张大发画了一张图:汇报工作9点到,CTOBill准时上班。张大发连忙跑去向领导汇报昨晚和今早的想法。比尔听完,沉吟片刻,说道:“这个主意不错,我支持!不过……张胖子顿时紧张起来。我想得很完美。有什么问题吗?刚听到Bill说:“你可以让IP地址在两台主机之间漂移,实现主备切换,但是MAC地址呢?”?张胖子道:“MAC地址?MAC地址呢?””啊!他突然明白了,他真的忽略了IP包是在以太网帧中发送的,需要MAC地址。发送数据的机器)首先知道VIP(如:192.168.1.100),然后它需要知道VIP的MAC地址,这样才能发送数据,为了得到MAC地址,需要发起ARP查询:ThisVIP(192.168.1.100的MAC地址是多少)?如果LoadBalancer1是Master,会回复:23:39:8D:9C:0A:33(标记为MAC1),此时client会缓存记下来,然后LoadBalancer1挂了,LoadBalancer2变成这个时候client如果再发送数据,也会发送到MAC1,所以就出现了错误。想通了这一层,张大发着急了,怎么办??比尔提醒道:“不要你有虚拟IP地址吗?是否可以创建虚拟MAC地址?张胖子如梦初醒:“是的,无论哪台机器成为Master,每次响应ARP请求,都会返回这个虚拟MAC地址。”这样客户端面对的MAC地址是唯一的。”看来虚拟IP+虚拟MAC地址可以彻底解决问题!申请机器张大胖开发了软件,小心翼翼的向小气老板申请机器。问题:“你这里有两台LoadBalancer服务器,但是你通常只使用一个,另一个总是闲置的。这是一个巨大的浪费吗?“怎么办?张胖子挠了挠头,有些苦恼。