负载均衡
负载均衡(Load Balance):建立在现有网络结构之上,提供了一种廉价有效透明的方法扩展网络设备和服务器带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。
云存储中的需求:
云存储中,一个典型的特点是将海量的请求在系统内部实现负载均衡。
在传统的负载均衡中,处于网络边缘设备的负载均衡设备,会将来自不同地址的请求按照负载均衡设备的设置均匀地、最优化的发送到各个承载设备上。
而云存储的负载均衡,不仅仅包括了这种网络边缘的负载均衡设备,来实现DNS的动态均衡解析,还要包括云存储内部的负载均衡机制。
云存储内部的负载均衡机制可以简单地理解为在节点资源之间的负载均衡。
节点的负载均衡可以更好地实现系统的动态远程扩展。不同的节点相应不同的请求,每个节点只需执行分配到它身上的请求即可。
软/硬件负载均衡
软件负载均衡:在一台或多台服务器的操作系统上安装一个或多个附加软件来实现负载均衡,如DNS Load Balance,他的优点是基于特定环境,配置简单,使用灵活,成本低廉,可以满足一般的负载均衡需求。
软件解决方案缺点:
需额外消耗系统资源,当连接请求特别大的时候,软件本身会成为服务器工作成败的一个关键
软件可扩展性不是很好,受到操作系统的限制,由于操作系统本身的Bug,往往会引起安全问题
硬件负载均衡:直接在服务器和外部网络间安装负载均衡设备,这种设备通常称之为负载均衡器,由于是专门的设备,独立于操作系统,整体性能得到大量提高,加上多样化的负载均衡策略,智能化的流量管理,可达到最佳的负载均衡需求。
负载均衡器形式多样,除了独立的负载均衡器外,有些负载均衡器集成在交换设备上,置于服务器与Internet链接之间,有些则以两块网络适配器将这一功能集成到PC上,一块连接到Intetnet上,一块连接到后端服务器群的内部网络上。
硬件负载均衡在功能、性能上优于软件方式,但成本昂贵。
本地/全局负载均衡
负载均衡从其应用的地理结构上分为本地负载均衡、全局(地域)负载均衡,本地负载均衡是指本地的服务器群做负载均衡,全局负载均衡是指分别放置在不同的地址位置、由不同的网络结构的服务器间作负载均衡。
本地负载均衡:能有效地解决数据流量过大、网络负载过重的问题,不需要购置性能卓越的服务器,充分利用现有设备,避免服务器单点故障造成数据流量的损失。其有灵活多样的均衡策略吧数据流量合理地分配给服务器群内的服务器共同负担。即使服务器扩充升级,也是简单地增加一个新的服务器到集群中,而无需改变现有网络结构、停止现有服务。
全局负载均衡:主要用于在一个多区域拥有自己服务器的站点,为使全球用户只以一个IP地址或域名就能访问到离自己最近的服务器,从而获得最快的访问速度。
全局负载均衡有以下特点:
实现地理位置无关性,能够远距离为用户提供完全的透明服务
除了能避免服务器、数据中心等单点失效,也能避免由于ISP专线故障引起的单点失效
解决网络拥塞问题,提高服务器响应速度,服务就仅提供,达到更好的访问质量
实施方法
HTTP重定向
浏览器请求摸个URL后,服务器通过HTTP响应头信息中的Location标记返回一个新的URL,这样浏览器会继续请求这个新的URL,完成自动跳转。正因为HTTP重定向有请求转移和自动跳转的能力,所以我们就可以用它来实现负载均衡以实现Web扩展。
DNS负载均衡
DNS负责域名解析,通过DNS服务器获取域名指向的IP,DNS服务器完成了域名到IP的映射,这个映射可以是一对多的,DNS可以把对域名的请求按照一定的策略分配到不同的服务器上,这样就可以实现负载均衡。貌似和HTTP重定向很像,但实现的机制却完全不同。
反向代理负载均衡
反向代理服务器可以作为调度器来实现负载均衡系统。反向代理服务器核心工作室转发HTTP请求,它工作在HTTP层面,就是TCP七层中的应用层(第七层),因此基于反向代理的负载均衡系统也称为七层负载均衡。web服务器都支持基于反向代理的负载均衡。
IP负载均衡
基于IP负载均衡的系统工作在传输层,会对数据包中的IP地址和端口信息进行修改,所以也称为四层负载均衡。它会在数据到达应用层之前,已完成转发,因这些工作都是由系统内核来完成,应用程序对此无能为力,当然性能来说也会很大的提升。
直接路由
不同于IP负载均衡,直接接路由负载均衡器工作在数据链路层,它通过修改数据包的目标MAC地址,将数据包转发到实际服务器,不同的是,这些处理的结果直接发送给客户,不再经过调度器。这时我们的实际服务器必须直接连接到外网,并且不再以调度服务器为默认网关。
IP隧道
简单的说就是调度器将收到的数据报封装到一个新的IP数据包中,转交给显示服务器,然后实际服务器可以处理数据包直接响应客户端。
主要应用
1.DNS负载均衡
最早的负载均衡技术是通过DNS来实现的,在DNS中为多个地址配置同一个名字,因而查询这个名字的客户机将得到其中一个地址,从而使得不同的客户访问不同的服务器,达到负载均衡的目的。DNS是一种简单有效的方法,但它不能区分服务器的差异,也不能反映服务器的当前运行状态。
2.反向服务器负载均衡
使用代理服务器,可以将请求转发给内部的服务器,这种方式可以提升静态网页的访问。也可使用代理服务器将请求均匀转发给多台服务器,从而达到负载均衡的目的。
3.地址转换网关负载均衡
支持负载均衡的地址转换网关,可以将一个外部IP地址映射为多个内部IP地址,对每次TCP
连接请求动态使用其中一个内部地址,达到负载均衡的目的。
4.协议内部支持负载均衡
除了三种负载均衡方式之外,有的协议内部支持与负载均衡相关的功能,例如HTTP协议中的重定向能力等,HTTP运行于TCP连接的最高层。
5.NAT负载均衡(Network Address Translation网络地址转换)
简单的说就是将一个IP地址转换为另一个IP地址,一般用于内部地址与合已注册的Internet IP地址进行转换。适用于解决IP地址紧张、不想让网络外部知道内部网络结构等的场合下。
6.反向代理负载均衡
普通代理服务器,代理内部网络用户访问Internet上服务器的连接请求,客户端必须指定代理服务器,并将本来要直接发送到Internet上服务器的连接请求发送给代理服务器处理。
反向代理(Reverse Proxy)方式是指以代理服务器来接受Internet上的链接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。反向代理负载均衡技术是把来自Internet上的连接请求以反向代理的方式动态地转发给内部网络上的多台服务器进行处理,从而达到负载均衡的目的。、
7.混合负载均衡
在有些大型网络,由于由于多个服务器内各种差异,可以考虑给每个服务器群采用最合适的负载均衡方式,然后又在这多个服务器群间再一次负载均衡或集群起来以一个整体向外提供服务(即把多个服务器群当做一个新的服务器群),从而达到最佳的性能。
常用软件负载均衡服务器:
LVS(Linux虚拟服务器):Linux虚拟服务器,是一个虚拟的服务器集群系统
HAProxy: C编写的开源软件,提供高可用性、负载均衡,以及基于TCP/HTTP的应用程序代理。
Nginx: 高性能的HTTP和反向代理服务器。
LVS:使用集群技术和Linux操作系统实现的一个高性能、高可用的服务器,具有很好的可伸缩性、可靠性和可管理性。
LVS特点:
1、抗负载能力强,因为是工作在网络4层之上仅作为分发之用,没有流量的产生,这个特点也决定了它在负载均衡软件里的性能是最强的。
2、配置性比较低,有利有弊,不需要太多接触,大大减少认为出错的几率
3、工作稳定,自身有完整的双机热备方案,如LVS+Keepalived和LVS+Heartbeat。
4、无流量,保证了均衡器IO的性能不会受到大流量的影响
5、应用范围比较广,可以对所有应用作负载均衡
6、软件本身不支持正则,不能做动静分离,因此许多网站用Nginx/HAProxy+Keepalived。
Nginx特点:
1、工作在网络的七层之上,可以针对http应用做一些分流的策略,比如域名、目录结构,它的正则规则比HAProxy强大和灵活。
2、Nginx对网络的依赖非常小,基本能ping通就能进行负载功能。
3、安装配置比较简单,测试起来方便。
4、可承担高的负载压力且稳定
5、Nginx可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等,并且会把返回错误的请求重新提交到另一个节点,缺点是不支持url来检测。
6、Nginx仅能支持http、Email,这样适用范围小很多,这是它的弱势。
7、Nginx不仅是优秀的负载均衡/反向代理软件,同时也是功能强大的Web应用服务器。
HAProxy特点:
1、HAProxy支持虚拟主机
2、能够补充Nginx的一些缺点,比如Session的保持,Cookie的引导等工作。
3、支持url检测后端的服务器
4、它跟LVS一样,本身仅仅是一款负载均衡软件,效率、并发处理比Nginx更好。
5、HAProxy可以对Mysql读进行负载均衡,对后端的Mysql节点进行检测和负载均衡,一般推荐LVS+Keepalived。