博客引用处(以下内容在原有博客基础上进行补充或更改,谢谢这些大牛的博客指导):
负载均衡原理与技术实现
一 服务器负载均衡
服务器负载均衡根据LB设备处理到的报文层次,分为四层服务器负载均衡和七层负载均衡,四层处理到IP包的IP头,不解析报文四层以上载荷(L4 SLB);七层处理到报文载荷部分,比如HTTP,RTSP,SIP报文头,有时也包括报文内容部分(L7 SLB)。
1.四层服务器负载均衡技术
客户端将请求发送给服务器群前端的负载均衡设备,负载均衡设备上的虚服务接收客户端请求,通过调度算法,选择真实服务器,再通过网络地址转换,用真实服务器地址重写请求报文的目标地址后,将请求发送给选定的真实服务器;真实服务器的响应报文通过负载均衡设备时,报文的源地址被还原为虚服务的VSIP,再返回给客户,完成整个负载调度过程。报文交互流程如下:
NAT方式的服务器负载均衡报文交互流程图报文交互流程说明:
(1)Host发送服务请求报文,源IP为Host IP、目的IP为VSIP
(2)LB Device接收到请求报文后,借助调度算法计算出应该将请求分发给哪台Server
(3)LB Device使用DNAT技术分发报文,源IP为Host IP、目的IP为Server IP
(4)Server接收并处理请求报文,返回响应报文,源IP为Server IP、目的IP为Host IP
(5)LB Device接收响应报文,转换源IP后转发,源IP为VSIP、目的IP为Host IP
2.七层服务器负载均衡技术
七层负载均衡和四层负载均衡相比,只是进行负载均衡的依据不同,而选择确定的实服务器后,所做的处理基本相同,下面以HTTP应用的负载均衡为例来说明。
由于在TCP握手阶段,无法获得HTTP真正的请求内容,因此也就无法将客户的TCP握手报文直接转发给服务器, 必须由负载均衡设备先和客户完成TCP握手,等收到足够的七层内容后,再选择服务器,由负载均衡设备和所选服务器建立TCP连接。
七层负载均衡组网和四层负载均衡组网有一个显著的区别:四层负载均衡每个虚服务对应一个实服务组,实服务组内的所有实服务器提供相同的服务;七层负载均衡每个虚服务对应多个实服务组,每组实服务器提供相同的服务。根据报文内容选择对应的实服务组,然后根据实服务组调度算法选择某一个实服务器。
上图中描述了基于HTTP的URI目录信息进行的七层负载均衡部署,报文交互流程图如下:
七层负载均衡报文交互流程图报文交互流程说明:
(1)-(3):Client和LB建立TCP连接;
(4):Client发送HTTP请求,目的IP为虚IP;
(5):LB设备分析报文,根据调度算法选择实服务器,注意此时会缓存该报文;
(6):LB设备向实服务器发Syn报文,序列号为Client的Syn报文序列号
(7):Server发送Syn/Ack报文,目的IP为Client;
(8):LB接收Server的Syn/Ack报文后,回应ACK报文
(9):修改步骤(5)中缓存的报文目的IP和TCP序列号,然后发给Server;
(10):Server发送响应报文到LB;
(11):LB修改步骤(9)中的报文的源地址和TCP序列号后转发给Client。