Linux下的负载均衡

一、目前网站架构一般分成负载均衡 层、web层和数据库层,我其实一般还会多加一层,即文件服务器层,因为现在随着网站的PV越来越多,文件服务器的压力也越来越大;不过随着moosefs、DRDB+Heartbeat的日趋成熟,这问题也不大了.网站最前端的负载均衡 层称之为Director,它起的是分摊请求的作用,最常见的就是轮询。


二、F5是通过硬件的方式来实现负载均衡 ,它较多应用于CDN系统,用于squid反向加速集群的负载均衡 ,是专业的硬件负载均衡 设备,尤其适用于每秒新建连接数和并发连接数要求高的场景;LVS和Nginx是通过软件的方式来实现的,但稳定性也相当强悍,在处理高并发的情况也有相当不俗的表现。


三、Nginx对网络的依赖较小,理论上只要ping得通,网页访问正常,nginx就能连得通,nginx同时还能区分内外网,如果是同时拥有内外网的节点,就相当于单机拥有了备份线路;lvs就比较依赖于网络环境,目前来看服务器在同一网段内并且lvs使用direct方式分流,效果较能得到保证。


四、目前较成熟的负载均衡 高可用技术有LVS+Keepalived、Nginx+Keepalived,以前Nginx没有成熟的双机备份方案,但通过shell脚本监控是可以实现的,有兴趣的可具体参考我在51cto上的项目实施方案;另外,如果考虑Nginx的负载均衡 高可用,也可以通过DNS轮询的方式来实现,有兴趣的可以参考张宴的相关文章。


五、集群是指负载均衡 后面的web集群或tomcat集群等,但现在的集群意义泛指了整个系统架构,它包括了负载均衡 器以及后端的应用服务器集群等,现在许多人都喜欢把Linux 集群指为LVS,但我觉得严格意义上应该区分开。


六、负载均衡 高可用中的高可用指的是实现负载均衡 器的HA,即一台负载均衡 器坏掉后另一台可以在<1s秒内切换,最常用的软件就是Keepalived和Heatbeat,成熟的生产环境下的负载均衡 器方案有Lvs+Keepalived、Nginx+Keepalived。


七、LVS的优势非常多:①抗负载能力强;②工作稳定(因为有成熟的HA方案);③无流量;④基本上能支持所有的应用,基于以上的优点,LVS拥有不少的粉丝;但世事无绝对,LVS对网络的依赖性太大了,在网络环境相对复杂的应用场景中,我不得不放弃它而选用Nginx。


八、Nginx对网络的依赖性小,而且它的正则强大而灵活,强悍的特点吸引了不少人,而且配置也是相当的方便和简约,小中型项目实施中我基本是考虑它的;当然,如果资金充足,F5是不二的选择。


九、大型网站架构中其实可以结合使用F5、LVS或Nginx,选择它们中的二种或三种全部选择;如果因为预算的原因不选择F5,那么网站最前端的指向应该是LVS,也就是DNS的指向应为lvs均衡器,lvs的优点令它非常适合做这个任务。重要的ip地址,最好交由lvs托管,比如数据库的ip、 webservice服务器的ip等等,这些ip地址随着时间推移,使用面会越来越大,如果更换ip则故障会接踵而至。所以将这些重要ip交给lvs托管是最为稳妥的。


十、VIP地址是Keepalived虚拟的一个IP,它是一个对外的公开IP,也是DNS指向的IP;所以在设计网站架构时,你必须向你的IDC多申请一个对外IP


十一、在实际项目实施过程中发现,Lvs和Nginx对https的支持都非常好,尤其是LVS,相对而言处理起来更为简便。


十二、在LVS+Keepalived及Nginx+Keepalived的故障处理中,这二者都是很方便的;如果发生了系统故障或服务器相关故障,即可将DNS指向由它们后端的某台真实web,达到短期处理故障的效果,毕竟广告网站和电子商务网站的PV就是金钱,这也是为什么要将负载均衡 高可用设计于此的原因;大型的广告网站我就建议直接上CDN系统了。


十三、现在Linux 集群都被大家神话了,其实这个也没多少复杂;关键看你的应用场景,哪种适用就选用哪种,Nginx和LVS、F5都不是神话,哪种方便哪种适用就选用哪种。


十四、另外关于session共享的问题,这也是一个老生长谈的问题了;Nginx可以用ip_hash机制来解决session的问题,而F5和 LVS都有会话保持机制来解决这个问题,此外,还可以将session写进数据库,这也是一个解决session共享的好办法,当然这个也会加重数据库的负担,这个看系统架构师的取舍了。


十五、我现在目前维护的电子商务网站并发大约是1000左右,以前的证券资讯类网站是100左右,大型网上广告大约是3000,我感觉web层的并发越来越不是一个问题;现在由于服务器的强悍,再加上Nginx作web的高抗并发性,web层的并发并不是什么大问题;相反而言,文件服务器层和数据库层的压力是越来越大了,单NFS不可能胜任目前的工作,现在好的方案是moosefs和DRDB+Heartbeat+NFS;而我喜欢的Mysql服务器,成熟的应用方案还是主从,如果压力过大,我不得不选择oracle的RAC双机方案。


十六、现在受张宴的影响,大家都去玩Nginx了(尤其是作web),其实在服务器性能优异,内存足够的情况下,Apache的抗并发能力并不弱,整个网站的瓶颈应该还是在数据库方面;我建议可以双方面了解Apache和Nginx,前端用Nginx作负载均衡 ,后端用Apache作web,效果也是相当的好。


十七、Heartbeat的脑裂问题没有想象中那么严重,在线上环境可以考虑使用;DRDB+Heartbeat算是成熟的应用了,建议掌握。我在相当多的场合用此组合来替代EMC共享存储,毕竟30万的价格并不是每个客户都愿意接受的。


十八、无论设计的方案是多么的成熟,还是建议要配置Nagios监控机来实时监控我们的服务器情况;邮件和短信报警都可以开启,毕竟手机可以随身携带嘛;有条件的还可以购买专门的商业扫描网站服务,它会每隔一分钟扫描你的网站,如果发现没有alive会向你的邮件发警告信息或直接电话联系。


十九、至少网站的安全性问题,我建议用硬件防火墙,比较推荐的是华赛三层防火墙+天泰web防火墙,DDOS的安全防护一定要到位;Linux 服务器本身的iptables和SELinux 均可关闭,当然,端口开放越少越好。




在调度器的实现技术中,IP 负载均衡技术是效率最高的。在已有的IP 负载均衡技术中有通过网络地址转换(Network Address Translation )将一组服务器构成一个高性能的、高可用的虚拟服务器,我们称之为VS/NAT 技术(Virtual Server via Network Address Translation ),大多数商品化的IP 负载均衡调度器产品都是使用此方法,如CiscoLocalDirectorF5Big/IP AlteonACEDirector 。在分析VS/NAT 的缺点和网络服务的非对称性的基础上,我们提出通过IP 隧道实现虚拟服务器的方法VS /TUNVirtual Server via IP Tunneling ),和通过直接路由实现虚拟服务器的方法VS/DRVirtual Server via Direct Routing ),它们可以极大地提高系统的伸缩性。所以,IPVS 软件实现了这三种IP 负载均衡技术,它们的大致原理如下

1) Virtual Server via Network Address Translation VS/NAT
通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器;真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程。

2)Virtual Server via IP Tunneling VS/TUN
采 用NAT 技术时,由于请求和响应报文都必须经过调度器地址重写,当客户请求越来越多时,调度器的处理能力将成为瓶颈。为了解决这个问题,调度器把请求报文通过IP 隧道转发至真实服务器,而真实服务器将响应直接返回给客户,所以调度器只处理请求报文。由于一般网络服务应答比请求报文大许多,采用VS/TUN 技术后,集群系统的最大吞吐量可以提高10 倍。

3)Virtual Server via Direct Routing VS/DR
VS/DR
通过改写请求报文的MAC 地址,将请求发送到真实服务器,而真实服务器将响应直接返回给客户。同VS/TUN 技术一样,VS/DR 技术可极大地提高集群系 统的伸缩性。这种方法没有IP 隧道的开销,对集群中的真实服务器也没有必须支持IP 隧道协议的要求,但是要求调度器与真实服务器都有一块网卡连在同一物理网段上。

针对不同的网络服务需求和服务器配置,IPVS 调度器实现了如下八种负载调度算法, 这里我只介绍前四种, 因为后面的基本不常用:

1) 轮叫(Round Robin
调度器通过" 轮叫" 调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。

2) 加权轮叫(Weighted Round Robin
调度器通过" 加权轮叫" 调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

3) 最少链接(Least Connections
调度器通过" 最少连接" 调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用" 最小连接" 调度算法可以较好地均衡负载。

4) 加权最少链接(Weighted Least Connections
在集群系统中的服务器性能差异较大的情况下,调度器采用" 加权最少链接" 调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

 

 

参考:

http://blog.ixpub.net/9727518/viewspace-421176

http://haoyi.blog.51cto.com/207720/53328

http://net.zdnet.com.cn/network_security_zone/2010/0809/1841724.shtml

你可能感兴趣的:(Linux下的负载均衡)