四层负载均衡——LVS
LVS
realserver:也称为真实内部服务器,是真正在提供服务的;
VIP:对外公布的IP,即客户请求进来的IP地址;
DIP:调度器和realserver之间通信的地址;
LVS的三种工作方式
LVS-NAT:
这个方法的思路是实施网络层(IP层)数据欺骗,它把客户端发送到redirector数据IP包的目标地址进行了替换。

realserver处理完请求生成了返回数据包,返回数据IP包的源地址是realserver的IP地址,目标地址是客户服务端IP地址。由于realserver的默认网关是redirector,因此尽管返回IP数据包的目标地址是客户端的ip地址,返回数据包仍然首先被发回到redirector上。redirector再次实施欺骗,把返回的IP 数据包的源地址改成自己的IP。然后再转发到交换机上返回给客户端。

LVS-DR:
这个方法的思路是实施数据链路层数据欺骗,修改网络帧数据的Mac地址。
1、网络环境
一台director + N台realserver,director和realserver都拥有公共IP,都暴露在广域网上,此外realserver还有一个和director ip地址一样的ip别名。
realserver还需要做一个配置,使它们忽略所有的针对公用IP的ARP广播,当系统arp广播询问哪个mac地址拥有公用IP时,就只有调度服务器会响应,外界发送的数据就不会发给实际服务器。
2、客户端请求
客户端请求先到公用IP(director),由于网络环境已配置为只有director响应过ARP广播,因此请求报文的mac地址会被改为realserver的mac地址。
3、realserver响应
realserver收到mac帧,然后将mac帧组装成ip包,发现ip包中的目标地址和自己的ip别名相同,没有问题,继续处理,(这就是要求ip别名相同的原因,如果不同,操作系统可能会直接忽略)生成响应数据,发送回去。这时候由于redirector不是默认网关,因此这些数据会直接发到广域网上,广域网会把数据送到客户端。
4、优点:返回数据包无需经过redirector,没有redirector带宽瓶颈。原则上集群的带宽是所有实际服务器带宽之和,当然他们不可能超过连接的广域网交换机的带宽。
5、限制:需要购买多个公共IP,director和realserver必须在同一个 WAN网段,也就是要在同一个交换机上。
LVS-TUN:
这个方法是为了突破LVS-DR同一网段内的限制所提出来的。它不做任何欺骗,而是光明正大的交流,在网络层进行了二次包装。
一台director + N台realserver,director 和realserver都拥有公共IP,都暴露在广域网上。公共ip互不相同,没有别名限制,也无需在同一网段。
客户端发送数据到redirector,redirector把IP包作为有效负载放到一个新的IP包中去,并根据调度策略确定一个特定realserver的ip作为新的IP包得目的地址。这些新的IP包完全符合网络协议,也没有任何欺骗的勾当,因此这些ip包光明正大得穿过wan网段,达到指定的realserver。
3、realserver响应
realserver拿到数据后,它需要做一个事情,把ip包的有效载荷提取出来,然后把这些载荷再作为ip包组成TCP,再向上组成最后的请求数据。根据请求数据,realserver生成返回数据后,光明正大返回给客户端。
LVS配置
ipvsadm安装
yum -y install ipvsadm
LVS-NAT的配置
配置内部私网地址,默认网关指向调度服务器
2、Directer配置要求 基本配置:
调度服务器需要2块网卡(一块网卡对外,一块网卡对内。1块也可以,配置子接口,对外的VIP和DIP都配置在同一网卡上,不过这样会更加的降低调度器的性能,建议还是双网卡)
关闭selinux和iptables,并打开包转发功能:
setenforce
service iptables stop
echo "1" > /proc/sys/net/ipv4/ip_forward
(为了避免不必要的麻烦,在每台服务器上都关闭这2个服务)
ipvsadm -A –t $VIP:$Port -s rr
解释:-A表示添加一个集群服务(可以添加多个,比如添加一个web的80和一个https的443);
-t表示是tcp协议;
-s表示调度算法是轮询(一共有10种调度算法,可以按照自己实际需要选择)
ipvsadm -a –t $VIP:$Port -r $DIP:$Port -m
解释:-a表示添加一个realserver,后面跟上之前定义的集群服务的地址端口,-r表示增加具体realserver的地址,-m表示模式为NAT模式
LVS-DR的配置
1、Realserver配置要求 基本配置
首先先配置限制arp,不然等配置好地址后就产生地址冲突了,通过修改内核参数来实现。
在linux中 ,默认在接口上通告所有接口上IP的arp广播,在接口上应答所有接口上IP的arp请求
arp_announce 限制arp通告
限制等级
0:在接口上通告所有接口上IP的arp广播
1:对于其它设备的arp请求,在接口上尽量限制广播通告应答(不够严格)
2:只通告本接口上IP的arp广播
arp_ignore 限制arp应答
限制等级
0:对于其它设备 的arp请求,应答所有其它接口的上IP的arp应答
1:对于其它设备的arp请求,只应答本接口上IP的arp应答
echo "" > /proc/sys/net/ipv4/conf/lo/arp_ignore echo "" > /proc/sys/net/ipv4/conf//lo/arp_announce echo "" > /proc/sys/net/ipv4/conf/all/arp_ignore echo "" > /proc/sys/net/ipv4/conf/all/arp_announce
在realserver上的lo口配置VIP,这样配置就限制了VIP不会在物理交换机上产生MAC地址表,从而避免IP冲突
ifconfig lo: $VIP broadcast $VIP netmask 255.255.255.255 ifconfig eth0 $DIP up
注意此VIP的接口的广播地址仍然为VIP,限制其广播,子网掩码是32位,下面调度器上的配置也注意此项
配置特殊路由,使目标为VIP的包的以源地址为VIP的lo口出去
route add –host $VIP dev lo:
Directer配置要求
配置VIP和DIP,VIP配置在物理网卡的子接口上
ifconfig eth0 $DIP broadcast $VIP netmask 255.255.255.0 up ifconfig eth0: $VIP broadcast $VIP netmask 255.255.255.255 up
配置特殊路由,目标是VIP的包从配置了VIP的物理子接口上出去
route add –host $VIP dev eth0:
集群配置
ipvsadm -A –t $VIP:$Port-s rr
解释:-A表示添加一个集群服务(这里和NAT中的配置一样)
ipvsadm -a –t $VIP:$Port -r $DIP:$Port-g
解释:其它和NAT也差不多,在最后的模式改为-g,即DR模式
LVS调度算法
-s 指定服务采用的算法,常用的算法参数如下:
rr 轮叫(Round Robin)
调度器通过”轮叫”调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务 器,而不管服务器上实际的连接数和系统负载。
wrr 加权轮叫(Weighted Round Robin)
调度器通过”加权轮叫”调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
lc 最少链接(Least Connections)
调度器通过”最少连接”调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用”最小连接”调度算法可以较好地均衡负载。
wlc 加权最少链接(Weighted Least Connections)
在集群系统中的服务器性能差异较大的情况下,调度器采用”加权最少链接”调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
lblc 基于局部性的最少链接(Locality-Based Least Connections)
“基于局部性的最少链接”调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用”最少链接” 的原则选出一个可用的服务器,将请求发送到该服务器。
lblcr 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication)
”带复制的基于局部性最少链接”调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按”最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器,若服务器超载;则按”最小连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。
dh 目标地址散列(Destination Hashing)
“目标地址散列”调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
sh 源地址散列(Source Hashing)
“源地址散列”调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
四层负载均衡——LVS的更多相关文章
- MGW——美团点评高性能四层负载均衡
转自美团点评技术博客:https://tech.meituan.com/MGW.html 前言 在高速发展的移动互联网时代,负载均衡有着举足轻重的地位,它是应用流量的入口,对应用的可靠性和性能起着决定 ...
- LVS 原理(调度算法、四种模式、四层负载均衡和七层 的区别)
参考文档:http://blog.csdn.net/ioy84737634/article/details/44916241 目录 lvs的调度算法 lvs的四种模式 四层均衡负载和七层的区别 1.l ...
- Nginx基于TCP/UDP端口的四层负载均衡(stream模块)配置梳理
通过我们会用Nginx的upstream做基于http/https端口的7层负载均衡,由于Nginx老版本不支持tcp协议,所以基于tcp/udp端口的四层负载均衡一般用LVS或Haproxy来做.至 ...
- Nginx四层负载均衡概述
目录 Nginx四层负载均衡概述 什么是负载均衡 负载均衡应用场景 四层,七层集群架构 四层负载均衡总结 Nginx如何配置四层负载均衡 nginx四层负载均衡端口转发 Nginx四层负载均衡概述 什 ...
- 14、Nginx四层负载均衡
1.Nginx四层负载均衡基本概述 1.1.什么是四层负载均衡 四层负载均衡基于传输层协议包来封装的(如:TCP/IP),那我们前面使用到的七层是指的应用层,它的组装在四层基础之上,无论四层还是七层都 ...
- Nginx四层负载均衡
目录 Nginx四层负载均衡概述 Nginx如何配置四层负载均衡 使用nginx四层负载均衡实现tcp的转发 Nginx四层负载均衡概述 什么是四层负载均衡 四层负载均衡是基于传输层协议包来封装的(如 ...
- nginx四层负载均衡配置
nginx四层负载均衡配置代理Mysql集群 环境如下: ip 192.168.6.203 Nginx ip 192.168.6.*(多台) Mysql 步骤一 查看Nginx是否安装stream模块 ...
- 安装Nginx四层负载均衡
Nginx1.9开始支持tcp层的转发,通过stream实现的,而socket也是基于tcp通信. stream模块默认不安装的,需要手动添加参数:–with-stream,官方下载地址:downlo ...
- 服务器负载均衡lvs(Linux Virtual Server)
服务器负载均衡lvs(Linux Virtual Server) 一.总结 LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统. 三.Linu ...
随机推荐
- SOAP和WSDL的一些必要知识(转)
原文地址:SOAP和WSDL的一些必要知识 SOAP和WSDL对Web Service.WCF进行深入了解的基础,因此花一些时间去了解一下是很有必要的. 一.SOAP(Simple Object Ac ...
- XPath 详解,总结
XPath简介 XPath是W3C的一个标准.它最主要的目的是为了在XML1.0或XML1.1文档节点树中定位节点所设计.目前有XPath1.0和XPath2.0两个版本.其中Xpath1.0是199 ...
- Linux内核分析——第八周学习笔记20135308
第八周 进程的切换和系统的一般执行过程 一.进程切换的关键代码switch_to分析 1.进程调度与进程调度的时机分析 (1)进程分类 第一种分类 I/O-bound:等待I/O CPU-bound: ...
- c#中的var优缺点和适用场景
var是c# 3.0新加的特性,叫做隐式类型局部变量,大家都知道c#其实是一种强类型的语言,为什么会引入匿名类型呢? 我猜测是因为linq的原因吧,因为感觉var在linq中被大量使用.下面说下var ...
- Cannot Change Opencv Webcam Setting
I have encountered a problem that when I use opencv API, I cannot change the width and height of Web ...
- 证书与keytool
证书的来源与使用: 对数据进行签名是我们在网络中最常见的安全操作.签名有双重作用,作用一就是保证数据的完整性,证明数据并非伪造,而且在传输的过程中没有被篡改,作用二就是防止数据的发布者否认其发布了该数 ...
- CAS自定义登录验证方法
一.CAS登录认证原理 CAS认证流程如下图: CAS服务器的org.jasig.cas.authentication.AuthenticationManager负责基于提供的凭证信息进行用户认证.与 ...
- Pjax.js防刷新技术
自我感觉良好,所以拿出现在自己用的 Pjax.js 分享给大家 当然 这个版本是 经过本人修改后的版本,跟其它 拿过来就用的 不一样 而且区别还不小 大多的 Pjax 都是 跟后台无关的,而这个版本是 ...
- C#异步编程一
前几天把Code First系列总结完,想着下步总结什么,原本想着XML,不过XML的内容比较多,还有3天班就中秋节了,想在中秋节前在完成一个系列,所以决定把异步这块总结下.说起异步可能会认为就是多线 ...
- IT男的”幸福”生活"续6
新的一年飘了一下,就过来了. 在过去的一年,大家都找到了自已的幸福吗? 时间在继续,人生得幸福.. 看了前面大家的回复,感觉挺开心的.像我们code Man,不可能总是coding.总得要一些生活调味 ...