集群概念
1、 集群(cluster)技术是一种较新的技术,通过集群技术,可以在付出较低成本的情况下获得在性能、可靠性、灵活性方面的相对较高的收益,其任务调度则是集群系统中的核心技术。
2、 集群是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。一个客户与集群相互作用时,集群像是一个独立的服务器。
3、 集群组成后,可以利用多个计算机和组合进行海量请求处理(负载均衡),从而获得很高的处理效率,也可以用多个计算机做备份(高可用),使得任何一个机器坏了整个系统还是能正常运行。集群在目前互联网公司是必备的技术,极大提高互联网业务的可用性和可缩放性。
负载均衡集
负载均衡集群为企业需求提供了可解决容量问题的有效方案,使负载可以在计算机集群中尽可能平均地分摊处理。
负载通常包括应用程序处理负载和网络流量负载。这样的系统非常适合向使用同一组应用程序的大量用户提供服务。每个节点都可以承担一定的处理负载,并且可以实现处理负载在节点之间的动态分配,以实现负载均衡。对于网络流量负载,当网络服务程序接受了高入网流量,以致无法迅速处理,这时,网络流量就会发送给在其它节点上运行的网络服务程序。也可根据服务器的承载能力,进行服务请求的分发,从而使用户的请求得到更快速的处理。
负载均衡技术类型:基于 4 层负载均衡技术和基于 7 层负载均衡技术
负载均衡实现方式:硬件负载均衡设备或者软件负载均衡
硬件负载均衡产品:F5 BIG-IP 、Citrix Netscaler 、深信服 、Array 、Radware
软件负载均衡产品:LVS(Linux Virtual Server)、 Haproxy、Nginx、Ats(apache traffic server)
1、实现效果图
2、负载均衡分类
负载均衡根据所采用的设备对象(软/硬件负载均衡),应用的OSI网络层次(网络层次上的负载均衡),及应用的地理结构(本地/全局负载均衡)等来分类。本文着重介绍的是根据应用的 OSI 网络层次来分类的两个负载均衡类型。
我们先来看一张图,相信很多同学对这张图都不陌生,这是一张网络模型图,包含了 OSI 模型及 TCP/IP 模型,两个模型虽然有一点点区别,但主要的目的是一样的,模型图描述了通信是怎么进行的。它解决了实现有效通信所需要的所有过程,并将这些过程划分为逻辑上的层。层可以简单地理解成数据通信需要的步骤。
根据负载均衡所作用在 OSI 模型的位置不同,负载均衡可以大概分为以下几类:
二层负载均衡(mac)
三层负载均衡(ip)
四层负载均衡(tcp)
在三层负载均衡的基础上,用ip port接收请求,再转发到对应的机器。
七层负载均衡(http)
根据虚拟的url或IP,主机名接收请求,再转向相应的处理服务器。
在实际应用中,比较常见的就是四层负载及七层负载。这里也重点说下这两种负载。
3、四层负载均衡
基于IP 端口的负载均衡
layer4
4、七层的负载均衡
基于虚拟的URL或主机IP的负载均衡
所谓七层负载均衡,也称为“内容交换”,也就是主要通过报文中的真正有意义的应用层内容,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。
layer7
在四层负载均衡的基础上(没有四层是绝对不可能有七层的),再考虑应用层的特征,比如同一个Web服务器的负载均衡,除了根据VIP加80端口辨别是否需要处理的流量,还可根据七层的URL、浏览器类别、语言来决定是否要进行负载均衡。举个例子,如果你的Web服务器分成两组,一组是中文语言的,一组是英文语言的,那么七层负载均衡就可以当用户来访问你的域名时,自动辨别用户语言,然后选择对应的语言服务器组进行负载均衡处理。以常见的TCP为例,负载均衡设备如果要根据真正的应用层内容再选择服务器,只能先代理最终的服务器和客户端建立连接(三次握手)后,才可能接受到客户端发送的真正应用层内容的报文,然后再根据该报文中的特定字段,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。负载均衡设备在这种情况下,更类似于一个代理服务器。负载均衡和前端的客户端以及后端的服务器会分别建立TCP连接。所以从这个技术原理上来看,七层负载均衡明显的对负载均衡设备的要求更高,处理七层的能力也必然会低于四层模式的部署方式。对应的负载均衡器称为七层交换机(L7 switch),除了支持四层负载均衡以外,还有分析应用层的信息,如HTTP协议URI或Cookie信息,实现七层负载均衡。此种负载均衡器能理解应用协议。实现七层负载均衡的软件有:haproxy:天生负载均衡技能,全面支持七层代理,会话保持,标记,路径转移;nginx:只在http协议和mail协议上功能比较好,性能与haproxy差不多;apache:功能较差Mysql proxy:功能尚可。
5、四层负载与七层负载的区别
四层负载均衡就像银行的自助排号机,每一个达到银行的客户根据排号机的顺序,选择对应的窗口接受服务;而七层负载均衡像银行大堂经理,先确认客户需要办理的业务,再安排排号。这样办理理财、存取款等业务的客户,会根据银行内部资源得到统一协调处理,加快客户业务办理流程。
四层负载均衡(layer 4)七层负载均衡(layer 7)基于基于IP PortURL类似于路由器代理服务器握手次数1 次2 次复杂度低高性能高;无需解析内容中;需要算法识别 URL,Cookie 和 HTTP head 等信息安全性低,无法识别 DDoS等攻击高, 可以防御SYN cookie以SYN flood等额外功能无会话保持,图片压缩,防盗链等
从上面的对比看来四层负载与七层负载最大的区别就是效率与功能的区别。四层负载架构设计比较简单,无需解析具体的消息内容,在网络吞吐量及处理能力上会相对比较高,而七层负载均衡的优势则体现在功能多,控制灵活强大。在具体业务架构设计时,使用七层负载或者四层负载还得根据具体的情况综合考虑。
LVS 实现四层负载均衡
1、LVS 介绍
(1)LVS 是Linux Virtual Server的简称,也就是 Linux 虚拟服务器, 是一个由章文嵩博士发起的自由软件项目,它的官方站点是**www.linuxvirtualserver.org。**现在LVS已经是 Linux标准内核的一部分,在Linux2.4内核以前,使用LVS时必须要重新编译内核以支持LVS功能模块,但是从Linux2.4内核以后,已经完全内置了LVS的各个功能模块,无需给内核打任何补丁,可以直接使用LVS提供的各种功能。
(2)LVS自从1998年开始,发展到现在已经是一个比较成熟的技术项目了。可以利用LVS技术实现高可伸缩的、高可用的网络服务,例如WWW服务、Cache服务、DNS服务、FTP服务、MAIL服务、视频/音频点播服务等等,有许多比较著名网站和组织都在使用LVS架设的集群系统,例如:Linux的门户网站(www.linux.com)、向RealPlayer提供音频视频服务而闻名的Real公司(www.real.com)、全球最大的开源网站(sourceforge.net)等。
(3)LVS软件作用:通过LVS提供的负载均衡技术和Linux操作系统实现一个高性能、高可用的服务器群集,它具有良好可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的服务性能。
2、LVS 优势与不足
1.优势
高并发连接:LVS基于内核网络层面工作,有超强的承载能力和并发处理能力。单台LVS负载均衡器,可支持上万并发连接。
稳定性强:是工作在网络4层之上仅作分发之用,这个特点也决定了它在负载均衡软件里的性能最强,稳定性最好,对内存和cpu资源消耗极低。
成本低廉:硬件负载均衡器少则十几万,多则几十万上百万,LVS只需一台服务器和就能免费部署使用,性价比极高。
配置简单:LVS配置非常简单,仅需几行命令即可完成配置,也可写成脚本进行管理。
支持多种算法:支持多种论调算法,可根据业务场景灵活调配进行使用
支持多种工作模型:**可根据业务场景,使用不同的工作模式来解决生产环境请求处理问题。
应用范围广:因为LVS工作在4层,所以它几乎可以对所有应用做负载均衡,包括http、数据库、DNS、ftp服务等等
2.不足
工作在4层,不支持7层规则修改,机制过于庞大,不适合小规模应用。
3、LVS 核心组件和专业术语
1.核心组件
LVS的管理工具和内核模块 ipvsadm/ipvs
ipvsadm:用户空间的命令行工具,用于管理集群服务及集群服务上的RS等;
ipvs:工作于内核上的netfilter INPUT钩子之上的程序,可根据用户定义的集群实现请求转发;
2.专业术语
VS:Virtual Server #虚拟服务
Director, Balancer #负载均衡器、分发器
RS:Real Server #后端请求处理服务器
CIP: Client IP #用户端IP
VIP:Director Virtual IP #负载均衡器虚拟IP
DIP:Director IP #负载均衡器IP
RIP:Real Server IP #后端请求处理服务器IP
4、LVS工作内核模型及工作模式·
当客户端的请求到达负载均衡器的内核空间时,首先会到达 PREROUTING 链。
最后经由POSTROUTING链发往后端服务器。
5、LVS负载均衡四种工作模式
1、NAT工作模式
1.LVS NAT 模式介绍
2.LVS NAT 模式工作流程
1、 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的 PREROUTING链。此时报文的源IP为CIP,目标IP为VIP
2、 PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
4、POSTROUTING链通过选路,将数据包发送给Real Server
5、Real Server比对发现目标为自己的IP,开始构建响应报文发回给Director Server。此时报文的源IP为RIP,目标IP为CIP
3.LVS NET 模式图解
6、DR 工作模式
1.LVS DR 模式介绍
Virtual Server via Direct Routing(VS-DR):用直接路由技术实现虚拟服务器??当参与集群的计算机和作为控制管理的计算机在同一个网段时可以用此方法,控制管理的计算机接收到请求包时直接送到参与集群的节点??直接路由模式比较特别,很难说和什么方面相似,前种模式基本上都是工作在网络层上(三层),而直接路由模式则应该是工作在数据链路层上(二层)。
2.LVS DR 模式工作原理
3.LVS DR 模式工作流程
1、 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。此时报文的源IP为CIP,目标IP为VIP
2、 PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
6、 响应报文最终送达至客户端
4.LVS DR 模式特点
3、 RS跟Director Server必须在同一个物理网络中
4、 所有的请求报文经由Director Server,但响应报文必须不能进过Director Server
6、 RS可以是大多数常见的操作系统
7、 RS的网关绝不允许指向DIP(因为我们不允许他经过director)
5.LVS DR 模式工作流程图解
7、LVS TUN 工作模式
1.LVS TUN 模式介绍
用IP隧道技术实现虚拟服务器??这种方式是在集群的节点不在同一个网段时可用的转发机制,是将IP包封装在其他网络流量中的方法??为了安全的考虑,应该使用隧道技术中的VPN,也可使用租用专线?? 集群所能提供的服务是基于TCP/IP的Web服务??Mail服务??News服务??DNS服务??Proxy服务器等等.
2.LVS TUN 模式工作流程
3.LVS TUN 模式图解
8、LVS full-nat 工作模式
lvs-fullnat(双向转换)
CIP –> DIP VIP –> RIP
架构特点:这是一种对nat模型的改进,是一个扩展,使得RS与Director可以处于不同网络。
(2)RIP和DIP可以不再同一个网络中,且RIP的网关未必需要指向DIP;
(3)支持端口映射;
(4)RS的OS可以使用任意类型;
(5)请求报文经由Director,响应报文也经由Director
assets/1216496-20171104195649951-2027809396.png)
9、四者的区别
机器名称IP配置服务角色备注lvs-serverVIP:172.16.100.1 DIP:192.168.100.1负载均衡器开启路由功能(VIP桥接、DIP仅主机)rs01RIP:192.168.100.2后端服务器网关指向DIP(仅主机)rs02RIP:192.168.100.3后端服务器网关指向DIP(仅主机)rs03RIP:192.168.100.4后端服务器网关指向DIP(仅主机)
lvs-nat与lvs-fullnat:请求和响应报文都经由Director
lvs-nat:RIP的网关要指向DIP
lvs-fullnat:RIP和DIP未必在同一IP网络,但要能通信
lvs-dr与lvs-tun:请求报文要经由Director,但响应报文由RS直接发往Client
lvs-dr:通过封装新的MAC首部实现,通过MAC网络转发
lvs-tun:通过在原IP报文外封装新IP头实现转发,支持远距离通信
10、LVS ipvsadm 命令的使用
1、LVS-server 安装 lvs 管理软件
[root@qfedu.com~]#yum-yinstallipvsadm
程序包:ipvsadm(LVS管理工具)
Unit File: ipvsadm.service
主程序:/usr/sbin/ipvsadm
规则保存工具:/usr/sbin/ipvsadm-save
规则重载工具:/usr/sbin/ipvsadm-restore
配置文件:/etc/sysconfig/ipvsadm-config
2、命令选项
11、实现 LVS 持久连接
1、定义
由于HTTP是一种无状态协议,每次请求完毕之后就立即断开了,当用户浏览购物网站挑选商品的时候,看到一件商品加入购物车,此过程被重定向到了REALSERVER1上面来,当把第二件商品加入购物车又被重定向到了REALSERVER2上面,最后结账的时候在REALSERVER2上面,只有一件商品,这显然是用户无法接受的,此时就需要一种持久连接机制,来把同一用户的HTTP请求在超时时间内都重定向到同一台REALSERVER,超时时间可以自己定义,比如说2个小时,在超时时间内服务器会不断追踪用户的访问请求,把某一用户的所有请求都转发到同一台REALSERVER上面
对于电子商务网站来说,用户在挑选商品的时候使用的是80端口来浏览的,当付款的时候则是通过443的ssl加密的方式,当然当用户挑选完商品付款的时候我们当然不希望https的443跳转到另外一台REALSERVER,很显然应该是同一REALSERVER才对,这时候就要用到基于防火墙标记的持久连接,通过定义端口的姻亲关系来实现
2、功能
[root@qfedu.com~]#iptables-tmangle-APREROUTING-d172.16.100.100-ptcp–dport80-jMARK–set-mark99
#在iptables 打上标记,把80端口标记为99
[root@qfedu.com~]#iptables-tmangle-APREROUTING-d172.16.100.100-ptcp–dport443-jMARK–set-mark99
#在iptables打上标记,把443端口标记为99
[root@qfedu.com~]#ipvsadm-A-f99-srr-p
在lvs上建立基于99号标记的虚拟服务
[root@qfedu.com~]#ipvsadm-a-f99-r172.16.100.2-g
[root@qfedu.com~]#ipvsadm-a-f99-r172.16.100.3-g
12、LVS的调度算法
LVS的调度算法分为静态与动态两类。
1、静态算法(4种)
只根据算法进行调度 而不考虑后端服务器的实际连接情况和负载情况
1、RR:轮叫调度(Round Robin)
调度器通过”轮叫”调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载??
2、WRR:加权轮叫(Weight RR)
调度器通过“加权轮叫”调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
2、动态算法(6种)
前端的调度器会根据后端真实服务器的实际连接情况来分配请求
1、LC:最少链接(Least Connections)
调度器通过”最少连接”调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用”最小连接”调度算法可以较好地均衡负载。
2、WLC:加权最少连接(默认采用的就是这种)(Weighted Least Connections)
在集群系统中的服务器性能差异较大的情况下,调度器采用“加权最少链接”调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载??调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
3、SED:最短期望延迟调度(Shortest Expected Delay )
在WLC基础上改进,Overhead = (ACTIVE 1)*256/加权,不再考虑非活动状态,把当前处于活动状态的数目 1来实现,数目最小的,接受下次请求, 1的目的是为了考虑加权的时候,非活动连接过多缺陷:当权限过大的时候,会倒置空闲服务器一直处于无连接状态。
4、NQ:永不排队/最少队列调度(Never Queue Scheduling NQ)
无需队列。如果有台 realserver的连接数=0就直接分配过去,不需要再进行sed运算,保证不会有一个主机很空间。在SED基础上无论 几,第二次一定给下一个,保证不会有一个主机不会很空闲着,不考虑非活动连接,才用NQ,SED要考虑活动状态连接,对于DNS的UDP不需要考虑非活动连接,而httpd的处于保持状态的服务就需要考虑非活动连接给服务器的压力。
5、LBLC:基于局部性的最少链接(locality-Based Least Connections)
6、LBLCR:带复制的基于局部性最少连接(Locality-Based Least Connections with Replication)
推荐阅读
Linux云计算小白到架构师教程
Linux系统服务管理
MySQL数据库管理
Shell脚本自动化运维