【负载均衡】2.Keepalived+Lvs介绍

内容来自:

一、LVS介绍

LVS(Linux Virtual Server,即 Linux 虚拟服务器 ) ,集成于Linux内核模块中,在Linux内核中实现了基于IP的数据请求负载均衡调度方案。
LVS相关术语:
    DS:Director Server。指的是前端负载均衡器节点。
    RS:Real Server。后端真实的工作服务器。
    VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址。
    DIP:Director Server IP,主要用于和内部主机通讯的IP地址。
    RIP:Real Server IP,后端服务器的IP地址。
    CIP:Client IP,访问客户端的IP地址。

1、LVS的两个部件:

ipvs: 工作于内核空间,主要用于使用户定义的策略生效;基于linux内核的netfilter机制,工作在netfilter的input链。ipvs工作于内核空间的INPUT链上,当收到用户请求某集群服务时,经过PREROUTING链,经检查本机路由表,送往INPUT链;在进入netfilter的INPUT链时,ipvs强行将请求报文通过ipvsadm定义的集群服务策略的路径改为FORWORD链,将报文转发至后端真实提供服务的主机。
ipvsadm : 工作于用户空间,主要用于用户定义和管理集群服务的工具。

2、基本工作原理

 (1)当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发往至内核空间
 (2)PREROUTING链首先会接收到用户请求,判断目标IP确定是本机IP,将数据包发往INPUT链
 (3)IPVS是工作在INPUT链上的,当用户请求到达INPUT时,IPVS会将用户请求和自己已定义好的集群服务进行比对,如果用户请求的就是定义的集群服务,那么此时IPVS会强行修改数据包里的目标IP地址及端口,并将新的数据包发往POSTROUTING链
 (4)POSTROUTING链接收数据包后发现目标IP地址刚好是自己的后端服务器,那么此时通过选路,将数据包最终发送给后端的服务器。

3、Lvs的工作模式:NAT模式,DR模式,TUN模式,FullNAT模式

(1)NAT模式:

nat模式,网络地址转换,本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发。
工作过程:
     1、client请求资源,当报文到达director时,源和目标IP是CIP-VIP,IPVS会强行修改目标地址为RIP,将报文从INPUT发向POSTROUTING,源和目标IP修改为CIP-RIP,RS验证目标地址是本地地址,则接受报文并处理请求。
     2、RS响应请求,由于请求报文源IP是CIP,所以响应报文的目标IP是CIP;将响应报文发送给网关director后,director会通过SNAT将源IP修改为VIP,这样client才可以明确是响应它请求报文的数据包。
特点:
* director与RS必须在同一个局域网。
* RS的网关必须指向director的私网DIP。
* 请求和响应报文都需要director转发,会成为整个系统的瓶颈。
* 支持端口映射,client访问80端口,director可以映射到RS的8080端口上。
* rs可以是任意操作系统。

(2)DR模式:

Direct Routing,直接路由,LVS默认模式,应用最广泛,通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变。
工作过程:
    1、client请求资源,请求报文经过路由到达交换机,然后交换机查看目标IP为VIP,则修改源和目标MAC后再封装报文发送给director,IPVS则将报文源MAC修改为DIP的MAC地址,目标MAC修改为RIP的MAC地址,然后经POSTROUTING链发送出去,通过交换机转送给RS。DR模式会lo接口上配置一个虚拟地址VIP,当RS收到报文拆封发现目标MAC地址是自己,目标IP地址也是自己的lo地址VIP,就会处理请求。
    2、RS响应请求,由于请求报文的目标IP是VIP,所以响应报文就通过lo接口传送到eth0网卡发出。
特点:
* 保证前端路由将目标地址为VIP的报文全部发送给DS,而不是RS
* RS上的lo接口配置VIP的IP地址
* RS的RIP可以使用私有地址,但也可以使用公网地址
* RS和director必须在同一物理网络中
* 请求报文有director调度,响应报文则由real server直接发往客户端
* 不支持端口映射
* RS的网关不能指向DIP
特点1解决方案:
  • arptables,在arp的层次上实现在ARP解析时做防火墙规则,过滤RS响应ARP请求,这是由iptables提供的;
  • 修改RS上内核参数(arp_ignore=1和arp_announce=2)将RS上的VIP配置在lo接口的别名上,并限制其不能响应对VIP地址解析请求。
     限制响应级别:arp_ignore
       0:默认值,表示可使用本地任意接口上配置的任意地址进行响应
       1:只响应目的IP地址为接收网卡上的本地地址的arp请求。
     限制通告级别:arp_announce,对网络接口上本地IP地址发出的ARP报文作出相应级别的限制。
       0:默认值,本机所有IP地址都向任何一个接口通告ARP报文。
       1:尽量仅向该网卡回应与该网段匹配的ARP报文。
       2:只向该网卡回应与该网段匹配的ARP报文。

(3)TUN模式:

IP隧道技术又称IP封装,在源和目标IP地址的基础上,利用新的源和目标IP地址对数据报文进行第二次封装。
工作过程:
    1、client请求资源,源和目标IP为CIP-VIP的报文到达director,IPVS会利用隧道技术将DIP-RIP封装在请求报文中,经POSTROUTING链发送至RS,RS本地需要配置tunl0地址为VIP,当RS接收到报文,二次封装的目标地址RIP为本地eth0地址,原始目标地址VIP为本地tunl0地址,所以RS就会认定是发送给自己的数据包,就会处理请求。
    2、RS响应请求,由于请求报文源和目标IP是CIP-VIP,所以响应报文的源和目标地址应为VIP-CIP;此时报文会经由RS的网关路由一直送达client。
特点:
* VIP、DIP、RIP都是公网IP。
* RS网关不会也不能指向DIP。
* 请求报文经过director,响应报文直接由RS发送给client,director不再成为系统瓶颈。
* RS必须支持隧道技术。
* 不支持端口映射。
补充:
所有主机在同一物理网络的Tun模式下,会出现ARP问题,rs也需要配置arp抑制(内核参数arp_ignore=1和arp_announce=2)。

(4)FULLNAT模式

通过同时修改请求报文的源IP地址和目标IP地址进行转发。内核默认不支持。
特点:
1. VIP是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络;因此,RIP的网关一般不会指向DIP
2. RS收到的请求报文源地址是DIP,因此,只需响应给DIP;但Director还要将其发往Client
3. 请求和响应报文都经由Director
4. 支持端口映射

4、Lvs的调度算法:

轮询(Round-Robin Scheduling)
加权轮询(Weighted Round-Robin Scheduling)
最少连接(Least-Connection Scheduling)
加权最少连接(Weighted Least-Connection Scheduling)
源地址散列(Source Hashing Scheduling):简称'SH',算法先根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且并未超载,将请求发送到该服务器,否则返回空。
目的地址散列(Destination Hashing Scheduling):简称'DH',算法先根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且并未超载,将请求发送到该服务器,否则返回空。将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡。
永不排队(Never Queue Scheduling)
最短期望延迟(Shortest Expected Delay Scheduling)
基于局部性的最少连接(Locality-Based Least-Connection Scheduling)
带复制的基于局部性最少连接(Locality-Based Least-Connection with Replication Scheduling)

二、keepalived

keepalived是集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防止单点故障。
keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。
虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。
keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议的。 

猜你喜欢

转载自www.cnblogs.com/cmxu/p/12363056.html