集群_LVS的介绍及原理

Linux集群

1.集群的特性

集群的可伸缩特性就是可以通过扩展的方式增加节点或优化硬件来提高集群的可用性

集群扩展的目的集群系统中的节点数目可以增加到几十到几千几万不等,其伸缩性远超过单台超级计算机,所以当服务器负载压力增长的时候,可以通过扩展的方式减少单台服务器的压力,系统可以通过扩展来满足高并发需求,也不会降低服务质量

1.1 系统扩展的方式:

  • scale up: 向上扩展,更换更高配置的主机
  • scale out:向外扩展,增加主机数量来处理相同问题

1.2 高可用

集群中的一个节点失效,它的任务可传递给其他节点。可以有效防止单节点失效

一般来说我们集群中工作在前端(分发器)的服务器都会对我们的后端服务器做一个健康检查,如果发现我们服务器当机就不会对其在做转发

1.3 高性能

一些需要很强的运算处理能力比如天气预报,核试验等。这就不是几台计算机能够搞定的。这需要上千台一起来完成这个工作的。访问量增加时,能够轻松扩展,提高性能。

2.集群的类型:

LB : 负载均衡集群,Load Ba lancing

  • 负载均衡集群中有一个调度器,称它为Director,Director处于多台服务器的上面,Director根据内部锁定义的规则或调度方式从下面的服务器群中选择一个用来响应客户端发送的请求。

HA : 高可用集群,High Availability

  • 高可用集群的可用性比较高,当我们集群中的某个节点服务器出现故障时不会造成我们的整体集群服务器不可用。
  • 其工作模式就是把一个出现故障的服务转发到另一个正常工作的服务器,从而达到服务不会中断。

He:高性能集群,High Performancing

  • 高性能的集群是当任务量极大的时候,我们做一个集群来共同完成这一个任务,这种处理方式我们称之为并行处理集群,并行处理集群是将大任务处理为小任务,分别进行处理的机制。

  • 一般这样的集群用来研究与大数据和科学研究运算,特殊政府部门等方面的工作

LB集群的实现:

软件 lvs
haproxy
nginx
ats (apache traffic server)
perlbal
硬件 F5 BIG-IP
Citrix NetScaler
A10
Array
Redware

基于工作的协议层次划分:

  • 传输层: lvs, haproxy (mode tcp)

  • 应用层: haproxy, nginx, ats, perlbal

3.LVS 介绍及原理

3.1 LVS简介

LVS是Linux Virtual Server的缩写,从字面意思上翻译,LVS应该译为"Linux虚拟服务器"

如果一台服务器承受过多的压力,那么服务可能会崩溃,所以,我们应该让一台服务器承受的压力在合理范围内,但是如果服务端必须要承受较大的压力,那么一台服务器可能无法满足我们的要求,所以我们可以使用多台服务器分摊这些压力,当一定数量的服务器作为一个整体对外提供服务,并且分摊压力时,那么我们可以称这些服务器为"负载均衡集群"。使用 LVS 即可实现"负载均衡集群"。

LVS有多种模式,在不同的模型下,LVS实现负载均衡的方式也不同,也就是说,我们可以通过不同的方案来配置LVS

3.2.LVS体系架构

使用LVS架设的服务器集群系统有三个部分组成:

  • 最前端的负载均衡层(Loader Balancer)
  • 中间的服务器群组层(Server Array)
  • 最底层的数据共享存储层(Shared Storage)

在用户看来所有的应用都是透明的,用户只是在使用一个虚拟服务器提供的高性能服务。

LVS的体系架构图:

集群_LVS的介绍及原理

LVS的各个层次的详细介绍:

Load Balancer层:位于整个集群系统的最前端,有一台或者多台负载调度器(Director Server)组成,LVS模块就安装在Director Server上,而Director的主要作用类似于一个路由器,它含有完成LVS功能所设定的路由表,通过这些路由表把用户的请求分发给Server Array层的应用服务器(Real Server)上。同时,在Director Server上还要安装对Real Server服务的监控模块Ldirectord,此模块用于监测各个Real Server服务的健康状况。在Real Server不可用时把它从LVS路由表中剔除,恢复时重新加入。

Server Array层:由一组实际运行应用服务的机器组成,Real Server可以是WEB服务器、MAIL服务器、FTP服务器、DNS服务器、视频服务器中的一个或者多个,每个Real Server之间通过高速的LAN或分布在各地的WAN相连接。

Shared Storage层:是为所有Real Server提供共享存储空间和内容一致性的存储区域,在物理上一般有磁盘阵列设备组成,为了提供内容的一致性,一般可以通过NFS网络文件系统共享数据,但是NFS在繁忙的业务系统中,性能并不是很好,此时可以采用集群文件系统。

3.3 LVS基本工作原理

集群_LVS的介绍及原理

LVS工作原理步骤:

1、当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发往至内核空间

2、 PREROUTING链首先会接收到用户请求,判断目标IP确定是本机IP,将数据包发往INPUT链

3、 IPVS是工作在INPUT链上的,当用户请求到达INPUT时,IPVS会将用户请求和自己已定义好的集群服务进行比对,如果用户请求的就是定义的集群服务,那么此时IPVS会强行修改数据包里的目标IP地址及端口,并将新的数据包发往POSTROUTING链

4、 POSTROUTING链接收数据包后发现目标IP地址刚好是自己的后端服务器,那么此时通过选路,将数据包最终发送给后端的服务器

LVS相关名词解释

1、 DS:Director Server。指的是前端负载均衡器节点。

2、 RS:Real Server。后端真实的工作服务器。

3、 VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址。

4、 DIP:Director Server IP,主要用于和内部主机通讯的IP地址。

5、 RIP:Real Server IP,后端服务器的IP地址。

6、 CIP:Client IP,访问客户端的IP地址

3.4 LVS四种模式及原理

3.4.1 LVS-NAT原理和特性

多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发

集群_LVS的介绍及原理

  1. 客户端打包了一个CIP+VIP(客户端+调度器)的请求报文向调度器发起任务请求
  2. 调度器查看后台真实工作的主机谁比较闲,就把任务发给闲的真实工作主机
  3. 调度器把带有CIP+RIP(客户端+真实工作主机)标签报文发给了真实工作主机
  4. 真实工作主机完成任务后就把带有CIP+RIP(客户端+真实工作主机)标签的任务报文反还给调度器
  5. 调度器再用VIP+CIP(调度器+客户端)的标签打包已经完成的任务报文,反还给客户端
LVS-NAT模式的特性:
  • RS应该和DIP应该使用私网地址,且RS的网关要指向DIP

  • 请求和响应报文都要经由director转发;极高负载的场景中,director可能会成为系统瓶颈

  • 支持端口映射

  • RS可以使用任意OS

  • RS的RIP和Director的DIP必须在同一IP网络

3.4.2 LVS-DR原理和特性

lvs-dr(direct routing):lvs的默认模式,gateway, lvs-dr模式通过修改请求报文的目标MAC地址进行转发

集群_LVS的介绍及原理

  1. 客户端打包了一个CIP+VIP的标签请求报文给调度器,发起任务请求
  2. 因为调度器和真实工作主机都VIP,所以调度器需要通过查找MAC地址来分配任务
  3. 调度器通过Mac地址找到了真实工作主机,把任务打包成了CIP+VIP(加上了mac地址)标签报文发给了真实主机
  4. 真实工作主机完成任务后,直接把完成的任务打包成CIP+VIP标签报文,反还给客户端
LVS-DR模式的特性:
  • 确保前端路由器将目标IP为VIP的请求报文发往Director:

    • 在前端网关做静态绑定;

    • 在RS上使用arptables;

    • 在RS上修改内核参数以限制arp通告及应答级别;修改RS上内核参数(arp_ignore级别为1和arp_announce级别为2)

      修改级别详情将RS上的VIP配置在lo接口的别名上,并限制其不能响应对VIP地址解析请求。

  • RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络

  • RIP的网关不能指向DIP,以确保响应报文不会经由Director

  • RS跟Director要在同一个物理网络

  • 请求报文要经由Director,但响应不能经由Director,而是由RS直接发往Client

  • 不支持端口映射

  • RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络

  • RIP的网关不能指向DIP,以确保响应报文不会经由Director

  • RS跟Director要在同一个物理网络

  • 请求报文要经由Director,但响应不能经由Director,而是由RS直接发往Client

  • 不支持端口映射