我个人的分布式集群问题集锦,nginx/lvs/dns/cdn(★firecat推荐★)

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: 我个人的分布式集群问题集锦,nginx/lvs/dns/cdn(★firecat推荐★)

image.png

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。

image.png



 对于一般业务开发人员来说,我们只需要关心到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均可关闭,当然,端口开放越少越好。




---


https://www.haproxy.com/


http://nginx.org/


http://www.linuxvirtualserver.org/


http://www.keepalived.org/


相关实践学习
Serverless极速搭建Hexo博客
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
相关文章
|
3月前
|
负载均衡 网络协议 关系型数据库
一口把LVS、Nginx及HAProxy工作原理讲清楚了。(附图)
一口把LVS、Nginx及HAProxy工作原理讲清楚了。(附图)
|
5月前
|
缓存 负载均衡 应用服务中间件
深入解析Nginx配置文件
Nginx是一个高性能HTTP服务器和反向代理,其配置文件`nginx.conf`包含全局、事件、HTTP、Server和Location块。全局块设置如用户和工作进程数,事件块设定连接数,HTTP块涉及MIME类型、日志和包含其他配置。Server块定义虚拟主机,Location块处理URI匹配。Nginx常用于反向代理和负载均衡,如`proxy_pass`指令转发请求至后端服务器组。理解这些配置有助于服务器优化和测试。
|
1月前
|
应用服务中间件 测试技术 nginx
Nginx入门 -- 解析Nginx中的基本概念:Keepalive
Nginx入门 -- 解析Nginx中的基本概念:Keepalive
101 0
|
2月前
|
开发框架 安全 应用服务中间件
【文件上传绕过】——解析漏洞_IIS7.0 | IIS7.5 | Nginx的解析漏洞
【文件上传绕过】——解析漏洞_IIS7.0 | IIS7.5 | Nginx的解析漏洞
142 9
|
3月前
|
负载均衡 监控 应用服务中间件
在Linux中,lvs/nginx/haproxy 优缺点?
在Linux中,lvs/nginx/haproxy 优缺点?
|
3月前
|
负载均衡 应用服务中间件 Linux
在Linux中,LVS、Nginx、HAproxy有什么区别?工作中怎么选择?
在Linux中,LVS、Nginx、HAproxy有什么区别?工作中怎么选择?
|
4月前
|
缓存 负载均衡 应用服务中间件
nginx.conf 配置解析及常用配置
nginx.conf 配置解析及常用配置
104 6
|
3月前
|
缓存 负载均衡 应用服务中间件
在Linux中,LVS与nginx有何区别?
在Linux中,LVS与nginx有何区别?
|
3月前
|
Ubuntu 应用服务中间件 nginx
Docker 解析:如何将 Nginx 容器化并用作代理
Docker 解析:如何将 Nginx 容器化并用作代理
203 0
|
3月前
|
域名解析 缓存 负载均衡
深度解析Nginx正向代理的原理与实现
Nginx虽然主要被用作反向代理,但也可以通过一些特殊配置用作正向代理。虽然不是它的主流用途,但它仍能以其高性能和高稳定性为用户提供代理服务。不过,出于安全性和匿名性的考虑,在使用它作为正向代理时须谨慎配置,并根据实际需求做出调整。
113 0

相关产品

  • 云解析DNS
  • 推荐镜像

    更多