2019独角兽企业重金招聘Python工程师标准>>>
负载均衡解决方案
常见的解决方案
常见组合
LVS+keepalived
HAProxy+keepalived
nginx/tengine+keepalived
LVS优势:
a.负载能力强,lvs工作在网络层第4层,仅作请求分发。
b.无流量,lvs仅仅分发请求,而流量并不从它本身出去,所以可以利用它这点来做一些线路分流之用。没有流量同时也保住了均衡器的IO性能不会受到大流量的影响。
c.lvs基本上能支持所有应用。http、数据库、聊天室等。
LVS不足:
a.rs处理出错后,不能把请求重新提交到另一个节点。
b.不支持支持复杂均衡策略
c.不支持七层负载,不支持动静分离
Nginx优势:
a.nginx可以检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点。目
b.支持复杂均衡策略。
c.nginx也可以作为网页静态服务器,支持动静分离。
d.跨平台,内存消耗小
e.社区活跃,第三方补丁和模块很多
Nginx不足:
a.nginx工作在7层,仅能支持http和Email
b.不支持会话直接保持,可以使用iphash或tengine解决
c.异步转发,流量负担大
d.对后端服务器的健康检查,只支持通过端口来检测,不支持通过url来检测。
HAProxy优势:
a.HAProxy 支持两种代理模式 TCP(四层)和HTTP(七层),也是支持虚拟主机的。
b.HAProxy 的优点能够补充 Nginx 的一些缺点,比如支持 Session 的保持,Cookie 的引导;同时支持通过获取指定的 url 来检测后端服务器的状态。
c.性能优于nginx
HAProxy不足:
a.中庸
同步转发和异步转发
同步转发是在lvs服务器接收到请求之后,立即redirect到一个后端服务器,由客户端直接和后端服务器建立连接。异步转发是nginx在保持客户端连接的同时,发起一个相同内容的新请求到后端,等后端返回结果后,由nginx返回给客户端。
当做为负载均衡服务器的nginx和lvs处理相同的请求时,所有的请求和响应流量都会经过nginx;但是使用lvs时,仅请求流量经过lvs的网络,响应流量由后端服务器的网络返回。也就是,当作为后端的服务器规模庞大时,nginx的网络带宽就成了一个巨大的瓶颈。
一、基本概念
LVS是 Linux Virtual Server 的简称,也就是Linux虚拟服务器。
LVS架构从逻辑上可分为调度层、Server集群层和共享存储。
LVS 由2部分程序组成,包括ipvs和ipvsadm。
a.ipvs(ip virtual server):工作在内核空间,是真正生效实现调度的代码。ipvs会修改数据包里的目标IP地址及端口(NAT模式)或MAC地址(DR模式)
b.ipvsadm:工作在用户空间,负责为ipvs内核框架编写规则,定义谁是集群服务,而谁是后端真实的服务器(Real Server)
二、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地址。
三、三种工作模式 LVS/NAT LVS/DR LVS/TUN
https://blog.csdn.net/Ki8Qzvka6Gz4n450m/article/details/79119665
1.LVS/NAT
图
1)原理
入方向 IPVS将目的IP由VIP替换为RIP发送给real server。
出方向 将源IP由RIP替换为VIP发送给客户端。
2)特点
RS应该使用私有地址,RS的网关必须指向DIP
DIP和RIP必须在同一个网段内
支持端口映射
RS可以使用任意操作系统
缺陷:请求和响应报文都需要经过Director Server,高负载场景中,Director Server易成为性能瓶颈
2.LVS/DR
1)原理
入方向 IPVS 将VIP-MAC替换为RIP-MAC
(此时的源IP和目的IP均未修改,仅修改了MAC地址,由于DS和RS在同一个网络中,所以可以通过二层来传输)
出方向 ARP/RARP会将设置正确的MAC地址(VIP-MAC CIP-MAC),发送给客户端
2)特点
保证前端路由将目标地址为VIP报文统统发给Director Server,而不是RS
RS可以使用私有地址;也可以是公网地址,如果使用公网地址,此时可以通过互联网对RIP进行直接访问
RS跟Director Server必须在同一个物理网络中
所有的请求报文经由Director Server,但响应报文必须不能进过Director Server
不支持地址转换,也不支持端口映射
RS可以是大多数常见的操作系统
RS的网关绝不允许指向DIP(因为我们不允许他经过director)
RS上的lo接口配置VIP的IP地址
缺陷:RS和DS必须在同一机房中
lo接口(本地环路接口) 假如包是由一个本地进程为另一个本地进程产生的, 它们将通过外出链的’lo’接口,然后返回进入链的’lo’接口.
3.LVS/TUN
在原有的IP报文外再次封装多一层IP首部,内部IP首部(源地址为CIP,目标IIP为VIP),外层IP首部(源地址为DIP,目标IP为RIP)
RS接收到报文后发现是自己的IP地址,就将报文接收下来,拆除掉最外层的IP后,会发现里面还有一层IP首部,而且目标是自己的lo接口VIP,那么此时RS开始处理此请求,处理完成之后,通过lo接口送给eth0网卡,然后向外传递。 此时的源IP地址为VIP,目标IP为CIP
四、调度算法
1.轮询调度 rr
2.加权轮询调度 wrr
3.最少链接 lc
4.加权最少链接 wlc
5.基于局部性的最少连接调度算法 lblc
该算法先根据请求的目标 IP 地址寻找最近的该目标 IP 地址所有使用的服务器,如果这台服务器依然可用,并且有能力处理该请求,调度器会尽量选择相同的服务器,否则会继续选择其它可行的服务器。
6.复杂的基于局部性最少的连接算法 lblcr
记录的不是目标IP与一台服务器之间的连接记录,而是与一组服务器之间的映射关系,防止单点服务器负载过高。
7.目标地址散列调度算法 dh
8.源地址散列调度算法 sh
五、keepalived
1.VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)
几台路由设备联合组成一台虚拟路由设备,将虚拟路由设备的ip地址作为用户的默认网关地址实现与外部的通讯。当网关设备发生故障时,VRRP协议能够快速选举新的网关设备承担数据流量,保障网络的可靠通信。VRRP使用ip报文作为传输协议报文,协议号为112,使用固定的组播地址224.0.0.18进行发送,通过协议报文选举处一台路由器作为master,其他设备作为backup,来实现网关备份功能。
虚拟路由器:由一个Master路由器和多个Backup路由器组成。通俗讲就是一个路由器集群。
VRID:虚拟路由器标识,如果多个路由器有相同的VRID,那么这些路由器就组成了一个虚拟路由器。
Master路由器:虚拟路由器中真正承担报文转发的节点。
Backup路由器:虚拟路由器中某一时刻除Master路由器的其他都有节点。
虚拟IP(VIP):虚拟路由器的IP,VIP是用于客户接入的IP地址。
虚拟MAC地址:虚拟路由器拥有的MAC地址,其格式为00-00-5E-00-01-VRID。
优先级:VRRP根据每个节点的优先级确定节点在虚拟路由器中的地位。如果优先级相同,则根据节点的IP地址大小进行比较。
抢占方式和非抢占方式:抢占方式中只要优先级最高才会成为Master路由器,而非抢占方式中只要Master路由器没有出现故障,则Baskup路由器的优先级再高也不会成为Master路由器。
配置VRRP接口跟踪
VRRP接口跟踪机制就是检测接口故障的一种机制。配置了接口跟踪机制的路由器,当自己的接口发生故障时会将自己的路由器优先级降低,从而使自己从主路由器变为备份路由器,然后原来的备份路由器此时将成为主路由器。
VRRP负载均衡
VRRP负载均衡是通过实现将路由器加入到多个VRRP组实现的,使VRRP路由器在不同的组中担任不同的角色。
如:RA为组35的主路由器,同时又是组36的备份路由器
RB为组36的主路由器,同时又是组35的备份路由器。
在正常状态下,PC1、PC2走RA,PC3和PC4走RB,但是两个路由器一旦出现故障,就将网关切换到备份路由器。RA和RB可以说是相辅相成的。
2.keepalived的工作原理
图
Checkers:对后端服务器节点(RS)进行健康状态监测和故障隔离,我们知道,LVS本身是没有健康状态监测功能,keepalived起初就是为LVS生成ipvs规则和增加健康状态检测功能而设计的。
VRRP Stack:这是keepalived实现VRRP功能的模块,VRRP功能可以实现对前端调度器集群的故障切换(failover)。
SMTP:Checkers和VRRP Stack都是对节点进行状态监测,不同的是监测前端调度器和监测后端RS,但是这两个模块都可以通过SMTP通知管理员故障信息的邮件。
System Call:Checkers和VRRP Stack同样都可以调用系统内核功能完成故障隔离和故障切换。
IPVS wrapper:Checkers通过监测后端RS的工作状态得出信息,IPVS wrapper通过这些信息添加ipvs规则,内核中的IPVS则通过这些规则进行工作。
Netlink Reflector:在调度器发生故障切换的时候,该模块充当调用内核NETLINK的接口,完成虚拟IP的设置和切换。
Watch Dog:keepalived的核心模块就是Checkers和VRRP Stack,当这两个模块发生故障的时候怎么办呢,这时候Watch Dog就发生了作用,它是一个硬件检测工具,一旦Checkers和VRRP Stack发生故障,Watch Dog就能够检测到并采取恢复措施(重启)。
keepalived是以VRRP协议为实现基础的,通过VRRP协议结合LVS,对组群服务器监控情况,若master出现宕机情况,则将VIP漂移到backup机上。
VRRP的主从模式
在这种模式下,只有一个MASTER,其他的则作为BACKUP。其中MASTER负责数据转发和响应ARP请求。
keepalived双主模型
keepalived双主模型要求节点1在一个vrrp实例处于master状态,在另一个vrrp实例中处于backup状态;节点2在一个vrrp实例中处于backup状态,在另一个vrrp实例中处于master状态。