主流负载均衡器比较lvs nginx dns
阅读数:109 评论数:0
跳转到新版页面分类
架构学
正文
lvs
IP负载均衡服务是工作在网络层(修改IP)和传输层(修改端口,第四层),比起工作在应用层(第七层)性能要高出非常多。常见的负载方式是LVS和IPVS(IP Virtual Server)
LVS (Linux Virtual Server),它是一种集群技术。
1、组成部分
(1)Load balancer/Director(负载调度器),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称为虚拟IP地址)上的。
(2)server pool/realserver(服务器池),是一组真正执行客户请求的服务器。
(3)shared storage(共享存储),它为服务器池提供一个共享的存储区。
2、lvs负载均衡方式
(1)vs/nat( virtual server via network address translation)
最简单的方式,所有的RealServer只需将自己的网关指向Director即可。客户端可以是任意操作系统,但此方式下,一个Director能够带动的RealServer比较有限。Director也可以兼为一台RealServer。
(2)vs/tun(virtual server via ip tunneling)
IP隧道(IP tunneling)是将一个IP报文封装在另一个IP报文的技术,这可以使得目标为一个IP地址的数据报文能被封装和转发到另一个IP地址。IP隧道技术亦称为IP封装技术。
(3)vs/dr(virtual server via direct routing)
这种方式是通过改写请求报文中的mac地址部分来实现的。
nginx
正向代理用于保护和限制真实的客户端,从结构上来看,客户端和代理服务器可以划为组成一部分,而反向代理一般用于web服务提供方提供保护,从结构上看,代理服务器和外网资源组成一部分。
反向代理服务的核心主要是转发HTTP请求,因为它工作在HTTP层(应用层),也就是网络七层结构中的第七层,因此敢被称为“七层负载均衡”。可以做反向代理的软件很多,比较常见的一种是nginx。
nginx可以自由定制转发策略,分配服务器流量的权重等。反向代理中,常见的一个问题,就是同一个登录用户的请求,无法保证一定分配到相同的web机器上,会导制无法找到session的问题。
解决方案:
1、配置转发规则,让同一个用户的请求一定落到同一台机器上(通过分析cookie),复杂的转发规则将会消耗更的的cpu,也增加了代理服务器的负担。
2、将session这类的信息,专门用某个独立服务来存储,例如redis/memchache,这个方案是比较推荐的。
这种负载均衡的实现的部署非常简单,而且性能表现也比较好。但是,它有“单点故障”的问题。而且,到了后期web服务器继续增加,它本身可能成为系统的瓶颈。
所谓的单点故障是,某台节点服务器挂了,但是nginx仍然会可能选中这个出故障的机器,然后就一直连接着。
dns
一个域名是可以配置成多个对应IP的,因此,dns也就可以作为负载均衡服务,这种负载均衡策略,配置简单,性能极佳,但是,不能自由定义规则,而且,变更被映射的Ip或者机器故障时很麻烦,还存在dns生效延迟的问题。
在同一个域名映射多ip的基础上更进一步,通过gslb(global server load balance)规则映射域名iip,一般情况况下都是按照地理位置,将离用户近的ip返回给用户,减少网络传输中的路由节点之间的跳跃消耗。