Linux中使用LVS实现负载均衡

时间:2022-07-11 03:11:36

什么是LVS

LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。同时LVS又被称为四层路由,工作于传输层上。

LVS技术简介

LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。为此,在设计时需要考虑系统的透明性、可伸缩性、高可用性和易管理性。

LVS的组成部分

LVS=ipvs+ipvsadm
ipvs:是一种内核框架,工作于input链上,相当于IPtables的netfilter框架,该框架根据定义在input链的上规则来进行数据包转发,试不能进入用户空间
ipvsadm:相当于iptabels命令,用于定义ipvs的规则

LVS的名词解释

CIP:客户端IP
VIP:虚拟IP,可以实现转移,配置负载均衡服务器,与CIP进行通信。
real server:正真实现响应的服务器
DS:LVS服务器
DIP:用于与real server服务器交互的ip,与RIP进行通信,位于进行负载均衡的机器上。
RIP:real server的IP。

Linux中使用LVS实现负载均衡

LVS的工作模型


1. NAT模式:
相当于DNAT:
特征:
a.RS的RIP为私有IP,且网关只想DIP
b.RS的RIP和DIP必修在一个网段内
C.请求和响应都进过LVS服务器
d.可以进行端口映射
2. DR模式:
请求进过LVS服务器,而响应不仅过LVS服务器,由RS直接响应给Client端。
过程:客户端发送DIP.VIP的数据包到达DS,DS进行原目标MAC地址转化,转化为RS服务器中某一台主机的MAC,然后通过VIP网卡广播出去,到达RSRS处理之后通过另外一个路由器发送出去,将数据包响应给客户端。
RS配置要求:
配置RIP和VIP,且VIP配置在IO上。RS和DS要在同一网段之中
特征:
RS的网关不能指向DIP,不支持端口映射
3. RUN模式:
使用IP隧道技术,在原有报文上进行再一次IP封装
机制:
客户端发送过来的CIP.VIP报文到达DS,DS将报文经二次封装变成CIP.VIP DIP.RIP的报文,进过DS进行转发从DIP接口出来发送值互联网,RS接受到报文之后,进行解析,发向目标ip伪RIP,进行接收,之后发向还有一层ip报文,再一次解析,发现目标IP为VIP,RS配置里VIP,所以接受进行响应,发送到互联网VIP.CIP的报文
特性:
1,RIP,DIP,VIP都比需全是公网地址
2RS的网关不指向DIP
3,不支持端口映射
4RS的OS必须支持隧道功能

Linux中使用LVS实现负载均衡

Linux中使用LVS实现负载均衡

LVS调度算法


1. 静态方法:
rr:轮询调度算法
wrr:加权轮询调度算法
sh:原地址hash,实现同一IP定向至同一服务器
dh:目标地址HASH
2. 动态方法:
lc:最少链接,RS的负载=活动链接数*256+非活动链接数
wrc:加权最少链接,RS的负载/权重
sed:最少期望延迟,改进版wrc,计算方法负载=(活动链接数+1*256/wight
nq:永不排队调度算法,开始时根据论寻将请求分给从大到小的。

ipvsadm命令编写规则


1. 添加一个服务集群:
ipvsadm -A|E -t|u|f VIP [-s scheduler] [-p [timeout]] [-M netmask] [--pe persistence_engine]
-A:添加一个服务集群
-t:TCP
-u:UDP
-f:防火墙标记
-s:调度算法
-E:修改服务器集群
2. 在服务集群中添加RS
ipvsadm -a|e -t|u|f VIP -r DIP [options]
-a:添加一个RS
-t:tcp
-u:udp
-f:防火墙
-r RIP
[option]:常用的
-g:DR模式(默认)
-m:nat模式
-e:修改
3. 删除
ipvsadm -D -t|u|f VIP //删除一个服务集群
ipvsadm -d -t|u|f VIP -r RIP

4. 清除所有规则
ipvsadm -C
5. 保存
ipvsadm -S [-n]
6. 重载
ipvsadm -R
7. 查看
ipvsadm -L|l [option]
option:
-n:数字格式显示IP地址
-c:显示连接数相关的信息
--stats:显示统计数据
--rate:每秒的平均速率
8. 计数器清零
ipvsadm -Z [-t|u|f VIP]

使用NAT模式实现LVS的负载均衡


1. 结构
DR:Clone1 192.168.80.150(VIP),192.168.100.1(DIP)
RS:Clone2 192.168.100.2
RS:Clone3 192.168.100.3
2. 步骤:
DS:
ifconfig eth1 DIP_GW up
ifconfig eth0:0 VIP
ipvsadm -A -t VIP -s rr
ipvsadm -a -t vip -r RIP -m
RS:
ifconfig eth0 RIP up
route add default gw DIP

Linux中使用LVS实现负载均衡

Linux中使用LVS实现负载均衡

使用DR模式实现LVS的负载均衡


1. 结构
DS:
192.168.80.150(VIP)
RS:
192.168.80.130
192.168.80.131
2. 步骤
DS配置:
ifconfig eth0:0 VIP up
route add -host VIP dev eth0:0

ipvsadm -A -t vip -s rr
ipvsadm -a -t vip -r rip -g -w wight
RS配置:
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce

ifconfig eth0 RIP
ifconfig lo:0 VIP netmask 255.255.255.255 broadcast VIP up
route add -host VIP dev lo:0

Linux中使用LVS实现负载均衡

Linux中使用LVS实现负载均衡

LVS的持久性


1. 持久客户端链接(PCC):在有效时间内,将来至同一客户端发往VIP的所有请求统统定向于统一RS。
添加规则时:ipvsadm -A -t ip:0 -s rr -p time
2. 持久端口链接(PPC):在有效时间内,将来自统一客户端发往VIP的某端口的所有请求统统定向于同一RS。ipvsadm默认是用ppc
3. 持久防火墙标记链接(PFMC):端口绑定,基于防火墙标记,将两个或者将两个或者两个以上的端口绑定为统一服务。
添加防火墙标记:(多个端口标记为统一标记码,使用多次一下语句)
#iptable -t mangel -A PREROUTING -d VIP -p tcp --dport RS_port -j MARK --set-mark 标记码{0-99}
mangel:修改报文首部,及打标记。在input之前打标记。
添加规则:
#ipvsadm -A -f 标记码 -s -p
#ipvsadm -a -f 标记码 -r ip -g