基于DR模式拓扑图的解释 (用的多)
- 整体架构:在DR(Direct Routing,直接路由)模式中,客户端(client1 、client2 )要访问服务。lvs(负载均衡器)在这里起到关键作用,它有一个虚拟IP(VIP 10.1.8.100 )对外提供服务,自身还有一个真实IP(DIP 10.1.8.10 ) 。web1、web2、web3 是后端真实服务器,它们也都配置了相同的VIP 10.1.8.100 ,并且各自有自己的真实IP(RIP ,如web1 的RIP是10.1.8.11 ) 。
- 请求流程:
- 当client1(10.1.8.21 )发出请求时,请求首先到达lvs。lvs根据负载均衡算法,判断要把请求转发给web1 。此时,lvs不改变请求报文的IP地址(VIP一直保持10.1.8.100 不变 ),而是修改请求报文的目标MAC地址,把它改成web1 的MAC地址。
- 然后这个请求就通过交换机(switch )直接到达web1 。web1 接收到请求后进行处理。
- 响应流程:web1 处理完请求后,因为它自身也配置了VIP 10.1.8.100 ,所以可以直接把响应报文发送给client1 ,不需要再经过lvs 。这就是DR模式中 “直接路由” 的体现,响应不经过lvs,减轻了lvs的压力。
- 网络连接关系:lvs、web1 、web2 、web3 都在10.1.8.0/24 这个网段内,通过交换机连接在一起,并且都在同一个物理网络中,这样才能保证MAC地址修改和直接响应的正常进行。
LVS DR(直接路由)模式
还是把LVS负载均衡器看成公司前台,客户端是客户。客户打电话来找公司里的员工。
前台这次呢,不改变电话号码(IP地址不变 ),而是悄悄告诉电话交换机(修改请求报文的目标MAC地址 ),把这个电话直接接到对应的员工分机上(后端真实服务器 )。
员工接到电话,处理完事情后,直接就给客户回电话(真实服务器直接将响应报文发送给客户端 ),不用再经过前台了。
这样一来,前台就没那么忙了,能应对更多的电话(请求 )。不过呢,前台和员工都得在公司内部的电话网络里(在同一个物理网络 ),而且都得有个公司对外的号码(相同虚拟IP地址 ) ,只是只有前台对外公开用这个号码接电话,并且还得处理好一些电话线路相关的小麻烦(ARP相关问题 )。
在LVS的DR模式里,不是关掉ARP,而是要进行ARP抑制相关设置 。原因和做法如下:
为什么要进行ARP抑制(不直接关闭ARP )
在DR模式下,负载均衡器(LVS)和后端真实服务器(如web1、web2、web3 )都配置了相同的虚拟IP(VIP ) 。当客户端发送ARP广播询问VIP对应的MAC地址时,如果后端真实服务器也响应这个ARP请求,就会导致网络混乱。因为正常情况下,应该只有负载均衡器来响应这个ARP请求,然后根据负载均衡算法将请求转发给后端真实服务器。要是后端真实服务器也响应,路由器的ARP表就可能被错误更新,把原本该发给负载均衡器的请求,错误发给了后端真实服务器,导致负载均衡功能失效。
如何进行ARP抑制设置
一般是通过修改后端真实服务器的Linux内核参数来实现:
- 设置
arp_ignore
:将arp_ignore
设置为1
,意思是系统只响应目标IP为本机接口的ARP请求,忽略其他针对VIP的ARP请求。比如在后端真实服务器上执行sysctl -w net.ipv4.conf.all.arp_ignore=1
(all
表示所有网络接口,也可针对特定接口如lo
单独设置 ),这样就可以让后端真实服务器不响应针对VIP的ARP广播。 - 设置
arp_announce
:把arp_announce
设置为2
,表示系统始终使用接口的本地IP作为ARP源地址,避免将VIP作为ARP请求的源地址发送出去,防止路由器的ARP表被错误更新 。例如执行sysctl -w net.ipv4.conf.all.arp_announce=2
。
通过这样的ARP抑制设置,就能确保在DR模式下,负载均衡器正常发挥作用,避免因ARP响应混乱导致的网络问题 。
基于NAT模式拓扑图的解释
- 整体架构:在NAT(Network Address Translation,网络地址转换)模式里,lvs作为负载均衡器,有对外的IP(10.1.1.10 )和对内的IP(10.1.8.10 ) 。web1 、web2 、web3 是后端真实服务器,它们只有自身的IP(如web1 的10.1.8.11 ) 。
- 请求流程:
- client1(10.1.8.21 )或client2(10.1.1.21 )发出请求,请求先到达lvs的对外IP(10.1.1.10 ) 。lvs根据负载均衡算法,确定把请求转发给web1 。这时,lvs会修改请求报文的目标IP地址,把原本指向lvs对外IP的地址,改成web1 的IP地址(10.1.8.11 ) 。
- 然后请求通过交换机到达web1 。
- 响应流程:web1 处理完请求后,把响应报文发回给lvs。lvs再把响应报文的源IP地址,从web1 的IP地址(10.1.8.11 )改回lvs的对外IP地址(10.1.1.10 ) ,最后再发送给客户端。也就是说,请求和响应都要经过lvs进行地址转换,lvs在这里相当于一个中转站。
- 网络连接关系:lvs通过路由器(router )分别连接了10.1.1.0/24 和10.1.8.0/24 两个网段,web1 、web2 、web3 在10.1.8.0/24 网段内,客户端在各自对应的网段,lvs起到跨网段连接和地址转换的作用。
LVS NAT(网络地址转换)模式
想象你是一个公司前台(LVS负载均衡器) ,客户(客户端)打电话来(发送请求)说要找公司里的某个员工(后端真实服务器)。
前台先根据自己的安排规则(负载均衡算法),知道要把这个电话转给哪个员工。然后呢,前台就偷偷把电话转接时显示的号码(修改请求报文的目标IP地址 ),改成那个员工的分机号(后端真实服务器的私有IP ),这样电话就打到员工那里了。
员工接完电话(处理完请求),回复的内容又回到前台这里,前台再把显示的号码(修改响应报文的源IP地址 )换回公司对外的号码(虚拟IP ),再把回复告诉客户。
也就是说,所有的请求和回复都得经过前台(LVS负载均衡器),要是来的电话太多,前台就会忙不过来,而且员工们(后端真实服务器)用的是内部号码(私有地址),并且都得把前台的号码(LVS负载均衡器内网地址 )设成自己的转接号码(网关 )。