集群的种类
1.负载均衡(Load Balance)集群 LB
2.高可用(High Availability)集群 HA
3.高性能计算
一、BL实现手段
硬件 F5负载均衡器
软件 LVS(4层,传输层) Nginx(7层,应用层)
LVS(4层)模式: (LVS负载均衡的三种包转发方式)
1. VS NET
2. VS DR
3.VS TUN
lVS(Linux Virtual Server) Linux虚拟服务器
http://wwww.linuxvirtualserver.org
http://zh.linuxvirtualserver.org
LVS集群采用三层结构
第一层
负责调度器/分发器(load balancer)
它是整个集群对外的前端机,负责将客户的请求发送到一组服务器上执行,而客户端认为服务是来自一个IP地址服务器上的。
第二层
服务器池(server pool)
是一组真正执行客户请求的服务器,执行的服务器有WEB、Mail 、 FTP和DNS等
第三层
共享存储(shared storage)
它为服务池提供一个共享的存储区,这样很容易使服务器池拥有相同的内容,提供相同的服务。
LVS负载均衡的三种包转发方式,不同的转发模式决定了不同的cluster的网络结构
NAT(网络地址映射)
通过网络地址转换将一组服务器构成一个高性能的、高可用的、虚拟服务器。
NAT方式可支持任何操作系统,以及私有网络,并且只需要一个Internet IP地址,但是整个系统的性能受到限制。因为执行NAT每次需要重写包(如:公网IP数 据转向内网特定IP服务器上,需要ip的解包和装包过程),有一定的延时;另外,大部分应用有80%的数据是从服务器流向客户机,也就是用户的请求非常 短,而服务器的回应非常大,对负载均衡器形成很大压力,成为了新的瓶颈。
优点: 支持任何操作系统及私有网络,并且只需要一个Internet IP地址.
缺点:LVS本身很容易成为瓶颈,因为所有请求必须经过它,同时所有服务器返回的数据也必须结果它。
IP Tunneling(IP隧道)
director(分发器)分配不同的请求到不同的real server,real server处理请求后直接回应给用户客户机,这样director负载均衡器仅处理客户机与服务器的一半连接。 IP Tunneling技术极大的提高了 director的调度处理能力,同时也极大地提高了系统能容纳的最大节点数,可以超过100个节点。real server可以在任何LAN或 WAN上运行,这意味着运行地理上的分布,这在灾难恢复中有重要意义。服务器必须拥有正式的IP地址用于客户机直接通信,并且所有服务器器必须支持IP隧道 协议。
不足:返回的数据需要进行IP封装,必须拥有正式的IP地址。
Direct Routing(直接路由)
与IP Tunneling类似,负载均衡器仅处理一半的连接,避免了性能瓶颈,同样增加了系统的可伸缩性。Direct Routing与IP Tunneling相比,没有IP封装的开销,但是由于采用物理层(修改MAC地址)技术,所有服务器必须在一个物理网段。
不足:必须在一个局域网内(即同一个网段内),而且必须是公网地址(成本高)。
LVS NAT 模式工作原理:
客户端访问调度器时,调度器通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法将请求分派给后端的真实服务器;真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程。
步骤1: 客户端发送请求
步骤2: 分发器重写目标地址 DIP:目标地址 hub小型交互机
步骤3:服务器返回客户端,调度器重写服务器源地址
LVS DR 模式原理: MAC地址转换
LVS的调度模式: //通过ipvsadm 设置
-s rr 轮询法
round robin 在服务器池中无穷的循环中遍历
-s wrr 带权重的循环法
wighted round robin
-s lc 最少连接法
least connection
-s wlc 带权重的最少连接法
weighted least connection
-s lblc 基于本地的最少连接法
locality based least connection 基于局部的最小连接,当real server是缓存服务器时用的比较多。
-s dh 目标散列法
destination hashing
-s sh 源散列法
source hashing
同一个ip客户端总是分发给一个real server,可以让客户端总是访问自己的会话信息,这种机制叫会话保持。
基于IP地址标识客户端的缺点: 很多内网用户会伪装成公网IP来访问服务器,不能人为的控制负载均衡。
比较高级的方法是:
基于客户端提供我们的sessionid来实现会话保持。haproxy(负载均衡软件)可以实现基于会话信息来判断保持会话。
如何保持会话一致:
1.所有会话数据同步
2.所有会话信息保持到数据中(memcached).
-s sed 最短预期延迟法
shortest expected delay
-s nq 永不排列法
never queue