一、LVS简介 LVS(Linux Virtual Server)即Linux虚拟服务器,是由章文嵩博士主导的开源负载均衡项目,目前LVS已经被集成到Linux内核模块中。该项目在Linux内核中实现了基于IP的数据请求负载均衡调度方案,其体系结构如图1所示,终端互联网用户从外部访问公司的外部负载均衡服务器,终端用户的Web请求会发送给LVS调度器,调度器根据自己预设的算法决定将该请求发送给后端的某台Web服务器,比如,轮询算法可以将外部的请求平均分发给后端的所有服务器,终端用户访问LVS调度器虽然会被转发到后端真实的服务器,但如果真实服务器连接的是相同的存储,提供的服务也是相同的服务,最终用户不管是访问哪台真实服务器,得到的服务内容都是一样的,整个集群对用户而言都是透明的。最后根据LVS工作模式的不同,真实服务器会选择不同的方式将用户需要的数据发送到终端用户,LVS工作模式分为NAT模式、TUN模式、以及DR模式。二、三种工作模式的解析。1、基于NAT的LVS模式负载均衡 NAT(Network Address Translation)即网络地址转换,其作用是通过数据报头的修改,使得位于企业内部的私有IP地址可以访问外网,以及外部用用户可以访问位于公司内部的私有IP主机。VS/NAT工作模式拓扑结构如图2所示,LVS负载调度器可以使用两块网卡配置不同的IP地址,eth0设置为私钥IP与内部网络通过交换设备相互连接,eth1设备为外网IP与外部网络联通。 第一步,用户通过互联网DNS服务器解析到公司负载均衡设备上面的外网地址,相对于真实服务器而言,LVS外网IP又称VIP(Virtual IP Address),用户通过访问VIP,即可连接后端的真实服务器(Real Server),而这一切对用户而言都是透明的,用户以为自己访问的就是真实服务器,但他并不知道自己访问的VIP仅仅是一个调度器,也不清楚后端的真实服务器到底在哪里、有多少真实服务器。 第二步,用户将请求发送至124.126.147.168,此时LVS将根据预设的算法选择后端的一台真实服务器(192.168.0.1~192.168.0.3),将数据请求包转发给真实服务器,并且在转发之前LVS会修改数据包中的目标地址以及目标端口,目标地址与目标端口将被修改为选出的真实服务器IP地址以及相应的端口。 第三步,真实的服务器将响应数据包返回给LVS调度器,调度器在得到响应的数据包后会将源地址和源端口修改为VIP及调度器相应的端口,修改完成后,由调度器将响应数据包发送回终端用户,另外,由于LVS调度器有一个连接Hash表,该表中会记录连接请求及转发信息,当同一个连接的下一个数据包发送给调度器时,从该Hash表中可以直接找到之前的连接记录,并根据记录信息选出相同的真实服务器及端口信息。2、基于TUN的LVS负载均衡 在LVS(NAT)模式的集群环境中,由于所有的数据请求及响应的数据包都需要经过LVS调度器转发,如果后端服务器的数量大于10台,则调度器就会成为整个集群环境的瓶颈。我们知道,数据请求包往往远小于响应数据包的大小。因为响应数据包中包含有客户需要的具体数据,所以LVS(TUN)的思路就是将请求与响应数据分离,让调度器仅处理数据请求,而让真实服务器响应数据包直接返回给客户端。VS/TUN工作模式拓扑结构如图3所示。其中,IP隧道(IP tunning)是一种数据包封装技术,它可以将原始数据包封装并添加新的包头(内容包括新的源地址及端口、目标地址及端口),从而实现将一个目标为调度器的VIP地址的数据包封装,通过隧道转发给后端的真实服务器(Real Server),通过将客户端发往调度器的原始数据包封装,并在其基础上添加新的数据包头(修改目标地址为调度器选择出来的真实服务器的IP地址及对应端口),LVS(TUN)模式要求真实服务器可以直接与外部网络连接,真实服务器在收到请求数据包后直接给客户端主机响应数据。3、基于DR的LVS负载均衡在LVS(TUN)模式下,由于需要在LVS调度器与真实服务器之间创建隧道连接,这同样会增加服务器的负担。与LVS(TUN)类似,DR模式也叫直接路由模式,其体系结构如图4所示,该模式中LVS依然仅承担数据的入站请求以及根据算法选出合理的真实服务器,最终由后端真实服务器负责将响应数据包发送返回给客户端。与隧道模式不同的是,直接路由模式(DR模式)要求调度器与后端服务器必须在同一个局域网内,VIP地址需要在调度器与后端所有的服务器间共享,因为最终的真实服务器给客户端回应数据包时需要设置源IP为VIP地址,目标IP为客户端IP,这样客户端访问的是调度器的VIP地址,回应的源地址也依然是该VIP地址(真实服务器上的VIP),客户端是感觉不到后端服务器存在的。由于多台计算机都设置了同样一个VIP地址,所以在直接路由模式中要求调度器的VIP地址是对外可见的,客户端需要将请求数据包发送到调度器主机,而所有的真实服务器的VIP地址必须配置在Non-ARP的网络设备上,也就是该网络设备并不会向外广播自己的MAC及对应的IP地址,真实服务器的VIP对外界是不可见的,但真实服务器却可以接受目标地址VIP的网络请求,并在回应数据包时将源地址设置为该VIP地址。调度器根据算法在选出
U2FsdGVkX1+6y5/FnippB+E4jHqFMZyGPcfABmpdit5Yb/bStleZ7Jd40ZoGLD9L
DdNtXEJc6kXfldEzN+wLQO2b1bM3L1hUFapF0oaETbL7F5vi2siCKTOw2vw8RirwVra+gaTPeVdt1/boJDZEli+ySPIrcMW2y32pymLvfEEsAI4hswgJU4G/yf+vkZ5h194a3d8tsM0Tz8//kd5iOSHMQ1xyeCNDfVXWI/zFpeW21EiSdSiBNPiFwhtnk6ZrQNTGZ+PGNN8ZjBjU/733DvJMDdBNCesf9N+NdNCORFbQzb+BBfKEDcFevpFhwbsdIifYrXIETKd+XM6iUNCQxs4oiuhHd90EMzJAkfKNimaG8A7sy9yczN7XQzLlzyPWTR3bk1UkPR83ew/wt3qx/NdswmOTX3ZWptwjx3lSzftLoZgcN9pGntshiILtJ0zXSFLYxDyuuUEXiqmT6mRNPUBCQSmNvgEBQP+bGmgQrptULXAKUa2yJsJBiVsdofQrMkGoRu5gGdjJ0ku12Jz6m5e9nbeq1ACnWPPJhT8m3PlW1ZiMUOSm4S4W9CDOT07Aq60PNpzjgL2O6XxVgqDKvUmlPSOGfPVpAPBervaoXUepz0UNw10+IyRzjutzT8a2ClLR3ERXpnc1bb0wogtekAIOjKB5sYFvaqc7x2AplDpfDUTNaRKb+smR37lSaQjPzo8vVb128S1ugqaK4BOAiCSac1dptCr39SsWJcwCpfcYfDYw+M3nhMmOk+Txy/dklh3elf7ysUtAbESN3r8xoJdMy3q300A0qMJuK2+gfcRX4BmVU0tZ/dCoyrmIbShSEMVFGORt+hsx7q17rxVySlrUmrL/11Djhs6VqNiM4uHGtENtksxAIHaS629PCRUKZ9vdt9+lykE4HPYGpr3UVnjdwCwUBWhljo30dM4g2WJftmMb3qMq3qgeEHmlFee9R2jS4IUBi/eCz1ke+hQb2RZLORNPIttzG9FLIEU/fM15W2eJ2F3ah75ucc+l2yYXn/meP5TJGKeZA8v/7i2iR+trKx/q1Le8rWbww8u44oluq/zMyGEY6TWZ5EwYFQt9JimPtrSaLeAUCY6nAYMv5jGFRo4Em/sHhrzRM/OpV5rwbJTeZrQnlQQpnH49snu07wx8vhSa8o4nVi+XIwku5vLux+zQV18Trttg1wHCOOr/e9IA090wC9/pQ8qvmlqeCyqJ7J98aFkwGkKW9/NXu8U4Y6OdnfTTHV07S2bi0WlaDKIn0u9zqU6eRniNYgwyAeTaqH+FLwlzvdmz0gLmibBrpvCyjBvc6mFMsZKKqI76PUldXg+aRAycRbQlUd/x8KN5shejjAnjaAtgRAUfyjQVyZtdm5MllumyT773upYg++h1Sxeg341b1jSIachBwyFSi3q4ebep2B0BOzS5rrBqU8mwfv8dIPSFcKtl04wQLSAOBXnJUPontlIm+2DKNPie9jMBo3zab6gm7EfPqB2mAU+67HSRMukrDYXhBnBYgSg4k/w8uvZ5nc6HxZEnktii3JbSmN5MMoNqwsNoUgH9kw8ad/cz072nhbR8a2DW9rMzyGPSMrIqvbshuQSxJ7wcIoqZR6BOEDcPblpH/uXeBcImjaixWeNN4WM9jU0TxZQnOrULUOUMpDX9+kHD87/jTn1XZD/2kjPDTHti6HHLN4nbmHyVlfVBiuUTRYpKpARe4Xjt8839e+mhDfQynB6tDB2WIi8TlGxXfBuCkbSI9spHgHLA7D7+BEaqBxHKgb31bo2wzODcI8I32M/1ZL3U9KP0In41r1GSFeV3nkUHVVZSgGTQbHsMVrt9lAtoAOGIGvZ02rGDbj4GvQVNw3spiYPIcMGH8wkT2W1kYykYrg8Telb7VG//fiC/CbJrFWWIqwfrNggwEXKv1Cu5gOvBo4EsRiaqK5aDMeh91LIkGSzVXhuu0WtF1udsy/E85SPxH7xBxopc0+RlgnJv9/QbaXUzZ4CCg46hG/sDRNC08jeCSp5ZggHmEeU7TuR0abuhgH7d3F9Uk5A5pe1PZw/seNHMbNLFL0yv7kLsyZB3TM8Mkbb1LuVL5mHNgibZwSaA6ZUmzbcZ7WqfDCYx1efYHxA/6F5yMWaxMqXpjXuICdqtdrbBO40Q4kgpm08ZKuouDRLexRXVAq1/cEmNE9KmEx9AROo/azOAMT4S1NRodaR2mkdKidgocVj6aJwwtwLqLiFv/EFgOs3cCparWybkEKMWW4B9Gp4bHS2zzrElo9NGBodlwqjfd0t4tRnP+HMjY7/DSXdpEv9JYRn0IhKRxDd4V7AW0J+JRKEpweuSwA88BtHdKnt+8hg8L+Dv7MHRyQS8QTnZUbGOimGpFQ9HzojHGtSMWzmfuKt0ZnAatrPf6PVj4y7wJ9nWAOvx0QrL+lIm1YfkbPfdM2Yq9KgfNuL9UInfen5evy8cdqAzffsaZOrMzGTbxL25KeNQ64jYvQrhsdsHOJslhaEkExmXWV+BIcy14Sl3Rd1VmP7lmbGIrwsC9027942M4Tqe5bd7Bu3HwnBzsr3pPpPgGUc8gqEKfjkSrkBVdYG+nAVG9OTsFslwe14lBWn3bvC3AU6jFGu4U7m1YtzKEASEIKyK6oJ/DBVO9z7mH0UmuBwJcpnsOcnpWZJ0zUmVwzqjF7M5hKvjjG6PVwDk3WgBu+M4a9AMrfcTHAfr0PYjtLo7hBrGlKwauIcKPKf97w7j3Xwh1yZLsH/5RS561PyOvJo+QiaIUJlHRaNMRBfzHd5/8NDMZrJCGKKcRhyMzDg0bb9cX1bN4lC5KC+jk/Tz4vkevJlBL6C7un9ylOrM2yTWegH+0kjgrus+d0EzPsYZgrceBM4xq6Mzc7jdgrBnLFkb2DxaF0+eC30JXDsJpcPlUlpkJKkqXu77BzUx9uPsOhTk+VWfgl3wwvgDTuWhLVcecU63QbK59kx6ViJ91g9KhtlUROf5oEhVc/WlAY7QnTKJPIqAP/1yKVznCJPtCzyZzeMWuFSzRqnYfKn13GnU8YBKpIUJf8gfX0jh3dwTCFbvBfF0p241YSG5DFZhpl4FqKf0cC7NixYObORILOZI83OulwXCllYTVvAfnz1qEoBfQ9qlF9IoHrJUN6nuOgYaL1G3JyAE8XWRd6f3npzlQBzZqhCRNNwS4EjXI+QyUmq5s7hGnH4AL1fgCY/X2G5YEn2YFg4DxrL+GmKMHjq++SIOo8p70pRg9UBe7PamyVcA718wOJKSYwqzAwifmOqmVdYhVInuu/Lojev8gf94/ymjf1WjPLGr32QuYWQkSannX/3UAlf1mHEol7Dca3iEAlR18bMzy09Q+Hr/Pxq9W+lgV7uxRcdEIBiaBGSe2wynAkpeiDzppsWUaN5C+Q7ZCGAfW3wPdQDIMAfAcv/Lyqza/tw9wwpnYSJ6uz7c5DfmWknCqkeWytY4Zcp2iRgN6+3om6OTPlA7IJzmM+A7mL+bpIGBMosL8x7LTkFBvr4q3ue+/4HC9lGL6NoOq7TPhQNDzWvEWAoV/l5cN3jz8T3pwtYDl0c9kuBxMWJUJIb26Ir3xO27m767o1YpuvmoaMXvg/j+kT+946JNEbpF5cyIXd4UNXCjqS/S6D4=
真实服务器后,在不修改数据报文的情况下,将数据帧的MAC地址修改为选出的真实服务器的MAC地址,通过交换机将该数据帧发给真实服务器。整个过程中,真实服务器的VIP不需要对外界可见。