1、问:我有一个疑问,使用了nginx或者haproxy真的能提升性能吗?那nginx或haproxy本身服务器岂不是压力山大,所有数据都要经过它转发。
答:它不需要处理,仅仅是转发。但是nginx不行,性能比较好的软件负载均衡是LVS。如果软件性能那么好,F5就不会卖那么贵了。还有,4层负载,DR模式回包不用经过负载,这在下行流量大的业务场景里性能不错了。
2、nginx+web服务器可以实现负载均衡,但是一台nginx也是有限的,如果并非量高的话,在他的上层如何实现负载均衡?
答:(1)Nginx前端加LVS集群或者是DNS负载都可以。DNS轮询:通过在DNS-server上对一个域名设置多个ip解析,来扩充web-server性能及实施负载均衡的技术。
(2)Keepalived是解决单点故障的,LVS是集群的,如果仅仅解决单点故障的话,用nginx+keepalived就够了,但是如果Nginx需要集群的话,nginx+lvs+keepalived才可行。
(3)对于一般应用来说,有Nginx就可以了。但Nginx一般用于七层负载均衡,其吞吐量是有一定限制的。为了提升整体吞吐量,会在DNS和Nginx之间引入接入层,如使用LVS(软件负载均衡器)、F5(硬负载均衡器)可以做四层负载均衡,即首先DNS解析到LVS/F5,然后LVS/F5转发给Nginx,再由Nginx转发给后端Real Server。
对于一般业务开发人员来说,我们只需要关心到Nginx层面就够了,LVS/F5一般由系统/运维工程师来维护。Nginx目前提供了HTTP(ngx_http_upstream_module)七层负载均衡,而1.9.0版本也开始支持TCP(ngx_stream_upstream_module)四层负载均衡。
(4)这方面的资料,基本都是一块一块不完整的。我大概跟你说一个基本架构:
DNS服务器,如果资金充足的话,建议使用BGP机房,2-3台DNS服务器均衡,通常使用bind软件。如果资金紧的话,可以购买专业的DNS服务,比如国内的dnspod。
CDN服务器,一开始如果想省事,可以买专业公司的服务,如chinacache,但随着发展成本会越来越高。自建的话,可能分别搭建,放电信、联通、移动等不同机房的服务器,通过DNS做动态解析。超大网站的话,可以用Squid,普通中至大型用Nginx,内部玩玩用Varnish。
前端均衡,资金充足的话,可以使用硬件设备,几十万一台。自已有技术队伍的话,就用Nginx/Haproxy+Keepalived等自已组建前端。均衡的方式都比较灵活,随机、权重、IP、URL都有。
同步的问题要看同步什么东西,普通的可以实时文件同步。但数据库的话,要看具体类型选择同步方式了。
后端的应用服务器和数据库集群,要看流量规划了。
多台Nginx实现均衡,有几种方法:
a、每台Nginx都有公网地址,在域名处设置同个域名多个指向,最简单实现轮洵。但故障切负会慢一点。
b、一台公网Nginx通过upstream功能,轮洵、IP、url多方式分发到内网多台nginx。但公网的nginx如果Down机的话,内网全断。
c、一对公网Nginx加三个公网IP,通过Keepalive实现高可用,再upstream到内网。
d、一台硬件均衡服务器在前端,再通过硬件均衡到内容的其它服务器。
你所说的那个假如,可以通过 b 、c、 d的方法实现。
3、既然lvs可以实现负载均衡,那还要nginx干嘛?
答:适用的场景不同,lvs是linux内核的功能,等于在操作系统层面做的负载。nginx只是一个应用程序,相当于业务系统的一个前置负载。nginx和haproxy的处理速度都远不及lvs,因为他们是工作在用户空间的,而lvs是工作在内核空间的。如果仅仅lvs能够满足你的需求,确实可以不要nginx,但是lvs配置难度比nginx大多了。
Nginx负载均衡和LVS负载均衡的比较分析
4、DNS负载怎么实现?自己写代码实现?还是找第三方?
答:DNS负载均衡技术的实现原理是在DNS服务器中为同一个主机名配置多个IP地址,在应答DNS查询时,DNS服务器对每个查询将以DNS文件中主机记录的IP地址按顺序返回不同的解析结果,将客户端的访问引导到不同的机器上去,使得不同的客户端访问不同的服务器,从而达到负载均衡的目的。
说白了,DNS负载就是同个域名绑定多个ip,同个域名,多个指向。比如:你在联通网络访问的百度,和你在电信网络访问的百度,肯定不是同个服务器。
第三方的话,你随便找个CDN或服务商都有这个服务,充钱就好了!自己做还费钱,10块钱就能搞定!
5、如果是DNS或者CDN的话,建多个机房,势必有多个机房数据同步的问题。 有什么这方面的好的资料吗?
答:?
6、nginx作为四层负载时,它与client,上游服务器都是维持tcp长连接吗?是否client每来一个,nginx就分别与client和上游连接一次?两边连接数目相同?那这样,nginx主动连接上游岂不是会有tcp端口数的限制,65535?
答:这个看配置,默认是随机分发,也是真正的负载均衡,所以要用共享session。会话都是短连接,如果请求一次连接一次,1:1这样资源太浪费。具体要看 nginx连接池的概念,有短连接和长连接之说。
--好像不对。我实测用client向nginx服务器发起100个tcp连接,nginx也会相应与上游real server建立100个tcp连接。另外,发起1万个,2万个和4万个,结论一致。
7、lvs集群和dns哪个好?都支持无限数目扩容吗?
答:这个不能说哪个好,得看你们架构。还有不要想到无限扩展,任何架构达到一定量后,再扩展就性能反而不好。集群并不是越大性能就越好,最后解决性能的都得靠架构。
8、网络安全
答:无论设计的方案是多么的成熟,还是建议要配置Nagios监控机来实时监控我们的服务器情况;邮件和短信报警都可以开启,毕竟手机可以随身携带嘛;有条件的还可以购买专门的商业扫描网站服务,它会每隔一分钟扫描你的网站,如果发现没有alive会向你的邮件发警告信息或直接电话联系。至少网站的安全性问题,我建议用硬件防火墙,比较推荐的是华赛三层防火墙+天泰web防火墙,DDOS的安全防护一定要到位;Linux服务器本身的iptables和SElinux均可关闭,当然,端口开放越少越好。
---
http://www.linuxvirtualserver.org/