19个心得 明明白白说Linux下的负载均衡

    前言:做为一名Linux/unix系统工程师,这几年一直在涉及到对外项目,经手过许多小中型网站的架构,F五、LVS及Nginx接触的都比较多,我想一种比较通俗易懂的语气跟你们说明下何谓负载均衡,何谓Linux集群,帮助你们走出这个误区,真正意义上来理解它们,项目施工案例请参考我在network.51cto.com上的同类文章。前端

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

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

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

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

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

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

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

    8、Nginx对网络的依赖性小,并且它的正则强大而灵活,强悍的特色吸引了很多人,并且配置也是至关的方便和简约,小中型项目实施中我基本是考虑它的;固然,若是资金充足,F5是不二的选择。后端

    9、大型网站架构中其实能够结合使用F五、LVS或Nginx,选择它们中的二种或三种所有选择;若是由于预算的缘由不选择F5,那么网站最前端的指向应该是LVS,也就是DNS的指向应为lvs均衡器,lvs的优势令它很是适合作这个任务。重要的ip地址,最好交由lvs托管,好比数据库的ip、webservice服务器的ip等等,这些ip地址随着时间推移,使用面会愈来愈大,若是更换ip则故障会接踵而至。因此将这些重要ip交给lvs托管是最为稳妥的。tomcat

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

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

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

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

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

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

    十6、如今受张宴的影响,你们都去玩Nginx了(尤为是做web),其实在服务器性能优异,内存足够的状况下,Apache的抗并发能力并不弱,整个网站的瓶颈应该仍是在数据库方面;我建议能够双方面了解Apache和Nginx,前端用Nginx做负载均衡,后端用Apache做web,效果也是至关的好。

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

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

    十9、至少网站的安全性问题,我建议用硬件防火墙,比较推荐的是华赛三层防火墙+天泰web防火墙,DDOS的安全防御必定要到位;Linux服务器自己的iptables和SElinux都可关闭,固然,端口开放越少越好。

    补充说明:测试网站的响应时间是用http://tools.pingdom.com,发现上了LVS+Keepalived、Nginx+Keepalived后并不影响速度,这一点你们就不要多虑了,Nginx如今做反向加速也日趋成熟了。

相关文章
相关标签/搜索