四层负载均衡——LVS

LVS

 

参考:http://zh.linuxvirtualserver.org/

几个术语:

Director:也可以称为调度器,LVS前端设备;

realserver:也称为真实内部服务器,是真正在提供服务的;

VIP:对外公布的IP,即客户请求进来的IP地址;

DIP:调度器和realserver之间通信的地址;

LVS的三种工作方式

LVS实现服务器集群负载均衡有三种方式,NAT,DR和TUN,下面简单谈谈这三种方式的区别:

 

LVS-NAT:

这个方法的思路是实施网络层(IP层)数据欺骗,它把客户端发送到redirector数据IP包的目标地址进行了替换。

1、网络环境

一台director + N台realserver,director和realserver在同一个私有网段,director是realserver的默认网关。只有director拥有公共IP,可以暴露在广域网上。

2、客户端请求

客户端请求先到公用IP(director),请求报文中的IP包目标地址被替换成了一个director据负载均衡策略选择的一个realserver的IP。

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

整个过程redirector的任务是实施了2次IP层欺骗修改,一次是修改了请求数据包得目标地址,这次修改的目的是为了实现数据的负载均衡的分发。另一次是修改了响应数据包的源地址,目的是为了隐藏realserver,使用户感觉不到realserver的存在。

3、限制:整个集群的吞吐量受到redirector的带宽限制(主要是出口带宽)。

LVS-DR:

这个方法的思路是实施数据链路层数据欺骗,修改网络帧数据的Mac地址。
1、网络环境
一台director + N台realserver,director和realserver都拥有公共IP,都暴露在广域网上,此外realserver还有一个和director ip地址一样的ip别名。

也就是说realserver有2个ip,一个真实的ip地址,一个和direcotr地址一样的IP别名(即公用IP),公用IP就是开放给客户端访问的IP地址。
realserver还需要做一个配置,使它们忽略所有的针对公用IP的ARP广播,当系统arp广播询问哪个mac地址拥有公用IP时,就只有调度服务器会响应,外界发送的数据就不会发给实际服务器。

2、客户端请求
客户端请求先到公用IP(director),由于网络环境已配置为只有director响应过ARP广播,因此请求报文的mac地址会被改为realserver的mac地址。

也就是说redirector实施链路层欺骗,将帧数据的目标mac地址替换成根据负载均衡策略决定的某一realserver的mac地址。

3、realserver响应
realserver收到mac帧,然后将mac帧组装成ip包,发现ip包中的目标地址和自己的ip别名相同,没有问题,继续处理,(这就是要求ip别名相同的原因,如果不同,操作系统可能会直接忽略)生成响应数据,发送回去。这时候由于redirector不是默认网关,因此这些数据会直接发到广域网上,广域网会把数据送到客户端。

4、优点:返回数据包无需经过redirector,没有redirector带宽瓶颈。原则上集群的带宽是所有实际服务器带宽之和,当然他们不可能超过连接的广域网交换机的带宽。

5、限制:需要购买多个公共IP,director和realserver必须在同一个 WAN网段,也就是要在同一个交换机上。

为什么一定要在同一网段呢?很简单,如果realserver在另外一个网段,redirector把整个数据包和mac帧修改完之后再发送到交换机上,交换机发现自己的wan内找不到这个mac地址,无法进行转发。

LVS-TUN:

这个方法是为了突破LVS-DR同一网段内的限制所提出来的。它不做任何欺骗,而是光明正大的交流,在网络层进行了二次包装。

1、网络环境

一台director + N台realserver,director 和realserver都拥有公共IP,都暴露在广域网上。公共ip互不相同,没有别名限制,也无需在同一网段。

2、客户端请求
客户端发送数据到redirector,redirector把IP包作为有效负载放到一个新的IP包中去,并根据调度策略确定一个特定realserver的ip作为新的IP包得目的地址。这些新的IP包完全符合网络协议,也没有任何欺骗的勾当,因此这些ip包光明正大得穿过wan网段,达到指定的realserver。

3、realserver响应
realserver拿到数据后,它需要做一个事情,把ip包的有效载荷提取出来,然后把这些载荷再作为ip包组成TCP,再向上组成最后的请求数据。根据请求数据,realserver生成返回数据后,光明正大返回给客户端。

4、优点:和LVS-DR一样,没有redirector出口带宽瓶颈。

5、缺点:需要额外的打包和解包,有一定的开销。

LVS配置

ipvsadm安装

yum -y install ipvsadm

LVS-NAT的配置

1、realserver配置要求:

配置内部私网地址,默认网关指向调度服务器

2、Directer配置要求 基本配置:

调度服务器需要2块网卡(一块网卡对外,一块网卡对内。1块也可以,配置子接口,对外的VIP和DIP都配置在同一网卡上,不过这样会更加的降低调度器的性能,建议还是双网卡)

关闭selinux和iptables,并打开包转发功能:

setenforce 0
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 "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore

echo "2" > /proc/sys/net/ipv4/conf//lo/arp_announce

echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore

echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce

在realserver上的lo口配置VIP,这样配置就限制了VIP不会在物理交换机上产生MAC地址表,从而避免IP冲突

ifconfig lo:1 $VIP broadcast $VIP netmask 255.255.255.255

ifconfig eth0 $DIP up

注意此VIP的接口的广播地址仍然为VIP,限制其广播,子网掩码是32位,下面调度器上的配置也注意此项

配置特殊路由,使目标为VIP的包的以源地址为VIP的lo口出去

route add –host $VIP dev lo:1

Directer配置要求

配置VIP和DIP,VIP配置在物理网卡的子接口上

ifconfig eth0 $DIP broadcast $VIP netmask 255.255.255.0 up

ifconfig eth0:1 $VIP broadcast $VIP netmask 255.255.255.255 up

配置特殊路由,目标是VIP的包从配置了VIP的物理子接口上出去

route add –host $VIP dev eth0:1

集群配置

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)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

时间: 2024-12-12 10:00:51

四层负载均衡——LVS的相关文章

四层负载均衡LVS/DR模式的配置

1.环境准备准备 3 台纯净的虚拟机,两台 web 服务器,并关闭所有的防火墙和selinux 2.部署说明:? 网络使用NAT模式 ? DR模式要求Director DIP 和 所有RealServer RIP必须在同一个网段及广播域 ? 所有节点网关均指定真实网关 3.LVS-server 安装lvs管理软件 yum -y install ipvsadm 4.需要手动生成ipvsadm文件否则启动会报错 [[email protected] ~]# ipvsadm --save > /etc

企业级开源四层负载均衡解决方案--LVS

第1章 课程简介课程内容的概要介绍,包括需要具备的知识前提.课程内容.面向用户.课程的价值意义及学习目标 1-1 LVS导学视频1-2 LVS课程概述第2章 网络基础重点讲解网络核心基础知识,包括OSI七层模型.TCP四层模型.详解三次握手和四次挥手.数据包在服务器内部拆包解析全流程剖析.应用服务概念.iptables原理和常见命令编写 2-1 网络基础知识讲解2-2 OSI七层网络模型2-3 TCP/IP协议基础讲解2-4 TCP/IP四层模型2-5 iptables基础原理2-6 iptab

nginx1.9基于端口的四层负载均衡实践,基于端口的转的负载均衡

在大型项目四层负载有LVS,但在中小型项目或者内部有很多应用需要做TCP四层基于端口转,以前我们采用Socat,后面也尝试使用iptables来做四层的端口转发,同样HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,但由于其配置相对复杂,在实际生产项目中还是以Nginx为主, Nginx1.9的推出不使用使之支持HTTP2.0,另外一上更加让人兴奋的就是默认支持TCP端口的四层负载均衡能力,话多多说直接看实例代码 server {     listen 127.0.0.1:

Linux集群-负载均衡lvs介绍及lvs-nat实现https

一.Linux集群 Linux集群系统保护集群管理器和集群节点两部分组成.集群节点简称为节点.服务器或服务器节点,是用来提供资源,进行集群的实际工作.一般来说,它必须进行配置后才能称为集群的一部分,同时也要运行集群用到的应用程序.Linux集群管理器再将各节点捆绑在一起,它用于将任务分解到所有的节点.简单的说,就是按照某种方式把服务器连起来来完成一种特定的任务,提高服务器的响应能力. scale on 在单台主机上提高服务器性能, scale out 增加服务器的数量来提高,负载均衡的集群. 二

四层负载均衡与七层负载均衡区别

四层负载均衡:仅仅建立一次TCP连接 七层负载均衡:负载均衡器与客户端及后端的服务器会分别建立一个TCP连接.即两次TCP连接. (一) 简单理解四层和七层负载均衡: ① 所谓四层就是基于IP+端口的负载均衡:七层就是基于URL等应用层信息的负载均衡:同理,还有基于MAC地址的二层负载均衡和基于IP地址的三层负载均衡. 换句换说,二层负载均衡会通过一个虚拟MAC地址接收请求,然后再分配到真实的MAC地址:三层负载均衡会通过一个虚拟IP地址接收请求,然后再分配到真实的IP地址:四层通过虚拟IP+端

Nginx基于TCP/UDP端口的四层负载均衡(stream模块)配置梳理

Nginx基于TCP/UDP端口的四层负载均衡(stream模块)配置梳理 通常我们会用Nginx的upstream做基于http/https端口的7层负载均衡,由于Nginx老版本不支持tcp协议,所以基于tcp/udp端口的四层负载均衡一般用LVS或Haproxy来做.至于4层负载均衡和7层负载均衡的区别,可以参考:http://www.cnblogs.com/kevingrace/p/6137881.html.然而Nginx从1.9.0版本开始,新增加了一个stream模块,用来实现四层协

linux 下Haproxy实现简单四层负载均衡

HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案. Haproxy的四层负载均衡搭建 主机规划: server 192.168.1.148  提供haproxy服务 后台  web1  192.168.1.150 web2  192.168.1.136 使用源码包安装 解压: tar -zxvf haproxy-1.4.24.tar.gz 进入到解压目录: cd  haproxy-1.4.24 编译: make TARGE

nginx四层负载均衡配置

nginx四层负载均衡配置代理Mysql集群 环境如下: ip 192.168.6.203 Nginx ip 192.168.6.*(多台) Mysql 步骤一 查看Nginx是否安装stream模块 没安装则进行安装 操作步骤如下 至此 已保证在没中断服务的情况下成功添加stream模块 步骤二 配置 mysql负载均衡案例 修改Nginx配置文件nginx.conf 内容如下图 测试步骤如下 后端Mysql需做好读写分离 创建好相应权限的用户 到客户端连接Nginx创建wuguiyunwei

负载均衡--LVS+Keepalived

利用LVS+Keepalived 实现高性能高可用负载均衡    背景: 随着你的网站业务量的增长你网站的服务器压力越来越大?需要负载均衡方案!商业的硬件如F5又太贵,你们又是创业型互联公司如何有效节约成本,节省不必要的浪费?同时实现商业硬件一样的高性能高可用的功能?有什么好的负载均衡可伸张可扩展的方案吗?答案是肯定的!有!我们利用LVS+Keepalived基于完整开源软件的架构可以为你提供一个负载均衡及高可用的服务器. 一.LVS+Keepalived 介绍 1. LVS LVS是Linux