使用 LVS 实现负载均衡

使用 LVS 实现负载均衡,第1张

在实际应用中,在Web服务器集群之前总会有一台负载均衡服务器,负载均衡设备的任务就是作为Web服务器流量的入口,挑选最合适的一台Web服务器,将客户端的请求转发给它处理,实现客户端到真实服务端的透明转发:

LVS 是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是由章文嵩博士发起的自由软件项目,现在LVS已经是 Linux标准内核的一部分,从Linux2.4内核以后,已经完全内置了LVS的各个功能模块.

LVS是四层负载均衡,也就是说建立在OSI模型的第四层——传输层之上,即熟悉的TCP/UDP,因为LVS是四层负载均衡,因此它相对于其它高层负载均衡的解决办法,比如DNS域名轮流解析、应用层负载的调度、客户端的调度等,它的效率是非常高的。

CIP:client ip 客户端的ip

VIP:Virtual IP LVS实例IP,一般是暴露在公网中的地址;向外部直接面向用户请求,作为用户请求的目标的IP地址

DS:Director Server 指的是前端负载均衡器节点

RS:Real Server 后端真实的工作服务器

实验在docker 中进行:

关于LVS负载均衡

一、什么是负载均衡:

    负载均衡集群提供了一种廉价、有效、透明的方法,来扩展网络设备和

服务器的负载、带宽、增加吞吐量、加强网络数据处理能力,提高网络的灵活性

和可用性。

二、搭建负载均衡服务的需求:

1)把单台计算机无法承受的大规模的并发访问或者数据流量分担到多台节点设备上

分别处理,减少用户等待响应的时间,提升用户体验。

2)单个重负载的运算分担到多台节点设备上做并行处理,每个节点设备结束后,

将结果汇总,返回给用户,系统处理能力得到大幅度提升。

3)7*24的服务保证,任意一个或多个有限节点设备宕机,要求不能影响业务。

三、LVS的介绍:

    LVS是Linux Virtual Server的简写,即Linux虚拟服务器,是一个虚拟的服务器

集群系统,可以在UNIX/LINUX平台下实现负载均衡集群功能。

    该项目是在1998年5月由章文嵩博士组织成立的,是中国国内最早出现的自由

软件项目之一。

四、关于LVS的配置使用:

    LVS负载均衡调度技术是在Linux内核中实现的,因此,被称为Linux

虚拟服务器。我们使用该软件配置LVS时候,不能直接配置内核中的ipvs,

而需要使用ipvs的管理工具ipvsadm进行管理,ipvs的管理工具ipvsadm管理ipvs。

五、LVS技术点小结:

1)真正实现负载均衡的工具是ipvs,工作在linux内核层面。

2)LVS自带的ipvs管理工具是ipvsadm。

3)keepalived实现管理ipvs及对负载均衡器的高可用。

4)Red hat工具Piranha WEB管理实现调度的工具ipvs。

六、LVS体系结构与工作原理:

1)LVS集群负载均衡接收服务的所有入站客户端计算机请求,并根据调度算法决定哪个集群节点应该处理回复请求。

负载均衡(LB)有时也被称为LVS Director(简称 Director).

2)LVS虚拟服务器的体系结构如下图,一组服务器通过高速的局域网或者地理分布

的广域网相互连接,在他们的前端有一个负载调度器(Load Balancer)。负载调度器能

无缝地将网络请求调度到真正的服务器上,从而使得服务器集群的结构对客户是透明的,

客户访问集群系统提供的网络服务就像访问一台高性能、高可用的服务器一样。客户程序

不受服务器集群的影响不需做任何修改。系统的伸缩性通过在服务集群中透明地加入和删除

一个节点来达到,通过检测节点或服务进程故障和正确的重置系统达到高可用性。由于我们的负载调度技术在

linux内核中实现的,我们称之为linux虚拟服务器(Linux Virtual Server)。

七、LVS社区提供了一个命名的约定:

名称:                              缩写         

虚拟IP地址(Virtual IP Address)    VIP

说明:VIP为Director用于向客户端计算机提供服务的ip地址,

比如:www.etiantian.org 域名就解析到vip上提供服务。

-------------------------------------------------------------------------------

真实ip地址(Real Server ip Address)    缩写:VIP

说明:在集群下面节点上使用的ip地址,物理ip地址。

-----------------------------------------------------------------------------------

Director的ip地址(Director ip Adress)  缩写:DIP

说明:Director用于连接内外网络的ip地址,物理网卡上的IP地址,

是负载均衡上的ip。

-------------------------------------------------------------------------------------

客户端主机IP地址(Client IP Address)  缩写:CIP

说明:客户端用户计算机请求集群服务器的IP地址,该地址用作发送

给集群的请求的源ip地址。

----------------------------------------------------------------

LVS集群内部的节点称为真实服务器(Real server),也叫做集群节点。请求集群服务的

计算机称为客户端计算机。

与计算机通常在网上交换数据包的方式相同,客户端计算机、Director

和真实服务器使用IP地址彼此进行通信。

------------------------------------------------------------------------------------------

八、LVS集群的3种工作模式介绍与原理讲解

1)IP虚拟服务软件ipvs,在调度器的实现技术中,IP负载均衡技术是

效率最高的。在已用的ip负载均衡技术中有通过网络地址转换

(Network Address Translation)将一组服务器构成一个高性能的、高可用的虚拟服务器,

我们称之为VS、NAT技术(Virtual Server Network Adress Translation)。

2)在分析VS/NAT的缺点和网络服务的非对称性的基础上,我们提出通过IP隧道实现虚拟服务器的

方法VS/TUN(Virtual Server via IP Tunneling)和通过直接路由实现虚拟服务

器的方法VS/DR(Virtual Server via Director Routing),它们可以极大地提高系统的伸缩性。

3)淘宝开源的模式FULLNAT。

LVS的四种工作模式:

    缩写及全拼:

NAT(Network Adress Translation)、TUN(Tunneling)、

DR(Director Routing)、FULLNAT(FULL Network address Translation)

-------------------------------------------------------------------------------------------

九、什么是ARP协议:

1) ARP协议:全称"Address Resolution Protocol",中文名地址解析协议,使用ARP协议可

实现通过IP地址获得得对应主机的物理地址(MAC地址)。

  在TCP/IP的网络环境下,每个联网的主机都会被分配一个32位的ip地址,

  这种互联网地址是在网际范围标识主机的一种逻辑地址。为了让报文在

物理网路上传输,还必须要知道对方目的主机的物理地址(MAC)才行。这样就存在把IP地址变成

物理地址的地址转换的问题。

    在以太网环境,为了正确地目的主机传送报文,必须把目的主机的32位IP

地址转换成为目的主机48位以太网的地址(MAC地址)。这就需要在互联层有一个服务或功能将

IP地址转换为相应的物理地址(MAC地址),这个服务或者功能就是ARP协议。

    所谓的“地址解析”,就是主机在发送帧之前将目标IP地址转换成目标MAC地址的过程,

ARP协议的基本功能就是通过目标设备的ip地址,查询目标设备的MAC地址,以保证主机

间互相通信的顺利进行。

    ARP协议和DNS有点相像之处,不同点是:DNS是在域名和IP之间的解析,另外,ARP协议不需要

配置服务,而DNS要配置服务才行。

    ARP协议要求通信的主机双方必须在同一个物理网段(即局域网)!

2)关于ARP的小结:

1.ARP全称“Address Resolution Protocol”;

2.实现局域网内通过IP地址获取主机的MAC地址;

3.MAC地址48位主机的物理地址,局域网内唯一;

4.ARP协议类似DNS服务,但不需要配置服务。

5.ARP协议是三层协议。

--------------------------------------------------------------------------------------------------------

十、ARP缓存表:

1)每台安装有TCP/IP协议的电脑都会有一个ARP缓存表(windows 命令提示符里输入arp -a即可)。

  表里的ip地址与MAC地址是一一对应的。

arp常用命令:

    arp -a :查所有记录

    arp -d :清除

    arp -s :绑定IP和MAC

2)ARP缓存表是把双刃剑:

1.主机有了arp缓存表,可以加快ARP的解析速度,减少局域网内广播风暴。

2.正是有了arp缓存表,给恶意黑客带来了攻击服务器主机的风险,这个就是arp欺骗攻击。

3.切换路由器,负载均衡器等设备时,可能会导致短时网络中断。

3)为啥用ARP协议?

  OSI模型把网络工作分为七层,彼此不直接通信打交道,只通过接口。IP地址工作在第三层,

MAC地址工作在第二层。当协议在发送数据包时,需要先封装第三层IP地址,第二层MAC地址的报头,

但是协议只知道目的节点的ip地址,不知道目的节点的MAC地址,又不能跨第二、三层,所以得用ARP协议服务,

来帮助获取目的节点的MAC地址。

4)ARP在生产环境产生的问题及解决办法:

1.ARP病毒,ARP欺骗

2.高可用服务器对之间切换时要考虑ARP缓存的问题。

3.路由器等设备无缝迁移时需要考虑ARP缓存的问题,例如:更换办公室的路由器。

5)ARP欺骗原理:

  ARP攻击就是通过伪造IP地址和MAC地址对实现ARP欺骗的,如果一台主机中了ARP病毒,

那么它就能在网络中产生大量的ARP通信量,很快的进行广播以至于使网络阻塞,攻击者

只要持续不断的发出伪造的ARP响应就能更改局域网中目标主机ARP缓存中的IP-MAC条目,

造成网络中断或者中间人攻击。

lvs和nginx都可以用作多机负载的方案,它们各有优缺,在生产环境中需要好好分析实际情况并加以利用。 首先提醒,做技术切不可人云亦云,我云即你云;同时也不可太趋向保守,过于相信旧有方式而等别人来帮你做垫被测试。把所有即时听说到的好东西加以钻研,从而提高自己对技术的认知和水平,乃是一个好习惯。

下面来分析一下两者:

一、lvs的优势:

1、抗负载能力强,因为lvs工作方式的逻辑是非常之简单,而且工作在网络4层仅做请求分发之用,没有流量,所以在效率上基本不需要太过考虑。在我手里的lvs,仅仅出过一次问题:在并发最高的一小段时间内均衡器出现丢包现象,据分析为网络问题,即网卡或linux2.4内核的承载能力已到上限,内存和cpu方面基本无消耗。

2、配置性低,这通常是一大劣势,但同时也是一大优势,因为没有太多可配置的选项,所以除了增减服务器,并不需要经常去触碰它,大大减少了人为出错的几率。

3、工作稳定,因为其本身抗负载能力很强,所以稳定性高也是顺理成章,另外各种lvs都有完整的双机热备方案,所以一点不用担心均衡器本身会出什么问题,节点出现故障的话,lvs会自动判别,所以系统整体是非常稳定的。

4、无流量,上面已经有所提及了。lvs仅仅分发请求,而流量并不从它本身出去,所以可以利用它这点来做一些线路分流之用。没有流量同时也保住了均衡器的IO性能不会受到大流量的影响。

5、基本上能支持所有应用,因为lvs工作在4层,所以它可以对几乎所有应用做负载均衡,包括http、数据库、聊天室等等。

另:lvs也不是完全能判别节点故障的,譬如在wlc分配方式下,集群里有一个节点没有配置VIP,会使整个集群不能使用,这时使用wrr分配方式则会丢掉一台机。目前这个问题还在进一步测试中。所以,用lvs也得多多当心为妙。

二、nginx和lvs作对比的结果

1、nginx工作在网络的7层,所以它可以针对http应用本身来做分流策略,比如针对域名、目录结构等,相比之下lvs并不具备这样的功能,所以nginx单凭这点可利用的场合就远多于lvs了;但nginx有用的这些功能使其可调整度要高于lvs,所以经常要去触碰触碰,由lvs的第2条优点看,触碰多了,人为出问题的几率也就会大。

2、nginx对网络的依赖较小,理论上只要ping得通,网页访问正常,nginx就能连得通,nginx同时还能区分内外网,如果是同时拥有内外网的节点,就相当于单机拥有了备份线路;lvs就比较依赖于网络环境,目前来看服务器在同一网段内并且lvs使用direct方式分流,效果较能得到保证。另外注意,lvs需要向托管商至少申请多一个ip来做Visual IP,貌似是不能用本身的IP来做VIP的。要做好LVS管理员,确实得跟进学习很多有关网络通信方面的知识,就不再是一个HTTP那么简单了。

3、nginx安装和配置比较简单,测试起来也很方便,因为它基本能把错误用日志打印出来。lvs的安装和配置、测试就要花比较长的时间了,因为同上所述,lvs对网络依赖比较大,很多时候不能配置成功都是因为网络问题而不是配置问题,出了问题要解决也相应的会麻烦得多。

4、nginx也同样能承受很高负载且稳定,但负载度和稳定度差lvs还有几个等级:nginx处理所有流量所以受限于机器IO和配置;本身的bug也还是难以避免的;nginx没有现成的双机热备方案,所以跑在单机上还是风险较大,单机上的事情全都很难说。

5、nginx可以检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点。目前lvs中ldirectd也能支持针对服务器内部的情况来监控,但lvs的原理使其不能重发请求。重发请求这点,譬如用户正在上传一个文件,而处理该上传的节点刚好在上传过程中出现故障,nginx会把上传切到另一台服务器重新处理,而lvs就直接断掉了,如果是上传一个很大的文件或者很重要的文件的话,用户可能会因此而恼火。

6、nginx对请求的异步处理可以帮助节点服务器减轻负载,假如使用apache直接对外服务,那么出现很多的窄带链接时apache服务器将会占用大量内存而不能释放,使用多一个nginx做apache代理的话,这些窄带链接会被nginx挡住,apache上就不会堆积过多的请求,这样就减少了相当多的内存占用。这点使用squid也有相同的作用,即使squid本身配置为不缓存,对apache还是有很大帮助的。lvs没有这些功能,也就无法能比较。

7、nginx能支持http和email(email的功能估计比较少人用),lvs所支持的应用在这点上会比nginx更多。

在使用上,一般最前端所采取的策略应是lvs,也就是DNS的指向应为lvs均衡器,lvs的优点令它非常适合做这个任务。

重要的ip地址,最好交由lvs托管,比如数据库的ip、webservice服务器的ip等等,这些ip地址随着时间推移,使用面会越来越大,如果更换ip则故障会接踵而至。所以将这些重要ip交给lvs托管是最为稳妥的,这样做的唯一缺点是需要的VIP数量会比较多。

nginx可作为lvs节点机器使用,一是可以利用nginx的功能,二是可以利用nginx的性能。当然这一层面也可以直接使用squid,squid的功能方面就比nginx弱不少了,性能上也有所逊色于nginx。

nginx也可作为中层代理使用,这一层面nginx基本上无对手,唯一可以撼动nginx的就只有lighttpd了,不过lighttpd目前还没有能做到nginx完全的功能,配置也不那么清晰易读。另外,中层代理的IP也是重要的,所以中层代理也拥有一个VIP和lvs是最完美的方案了。

nginx也可作为网页静态服务器,不过超出了本文讨论的范畴,简单提一下。

具体的应用还得具体分析,如果是比较小的网站(日PV<1000万),用nginx就完全可以了,如果机器也不少,可以用DNS轮询,lvs所耗费的机器还是比较多的;大型网站或者重要的服务,机器不发愁的时候,要多多考虑利用lvs。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/58796.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-02-27
下一篇2023-02-27

发表评论

登录后才能评论

评论列表(0条)

    保存