LVS四层负载

1.jpg

四层负载与七层负载的区别

四层负载均衡七层负载均衡
基于IP PortUrl
类似路由器代理服务器
握手次数1次2次
复杂度
性能高 无需解析内容中 需要算法识别 URL,Cookie 和 HTTP head 等信息
安全性
额外功能会话保持,图片压缩,防盗链等

LVS 优点与不足

优点

1.高并发链接:基于内核网络层面工作,有超强的承载能力和并发处理能力。单台LVS负载均衡器,可支持上万并发连接。

2.稳定性强

3.成本低廉配置简单

4.支持多种工作模型

缺点

工作在4层,不支持7层规则修改,机制过于庞大,不适合小规模应用。

LVS 核心组件和名词

核心组件

ipvsadm:用于管理集群服务的RS等

ipvs:工作于内核上的netfilter INPUT钩子之上的程序,可根据用户定义的集群实现请求转发;

名词

VS:Virtual Server 虚拟服务

Director, Balancer 负载均衡器、分发器

RS:Real Server 后端请求处理服务器

CIP: Client IP 用户端IP

VIP:Director Virtual IP 负载均衡器虚拟IP

DIP:Director IP 负载均衡器IP

RIP:Real Server IP 后端请求处理服务器IP

LVS工作内核模型及工作模式

1、当客户端的请求到达负载均衡器的内核空间时,首先会到达 PREROUTING 链。

2、当内核发现请求数据包的目的地址是本机时,将数据包送往 INPUT 链。

3、LVS由用户空间的ipvsadm和内核空间的IPVS组成,ipvsadm用来定义规则,IPVS利用ipvsadm定义的规则工作,IPVS工作在INPUT链上,当数据包到达INPUT链时,首先会被IPVS检查,如果数据包里面的目的地址及端口没有在规则里面,那么这条数据包将被放行至用户空间。

4、如果数据包里面的目的地址及端口在规则里面,那么这条数据报文将被修改目的地址为事先定义好的后端服务器,并送往POSTROUTING链。

5、最后经由POSTROUTING链发往后端服务器。

LVS负载均衡四种工作模型

1.Nat

2.png

2.DR

3943d68d91eb12044.png

3.TUN

4.png

4.Full-Nat

5.png

四者的区别

lvs-nat与lvs-fullnat:请求和响应报文都经由Director

lvs-dr与lvs-tun:请求报文要经由Director,但响应报文由RS直接发往Client

lvs-nat:RIP的网关要指向DIP

lvs-fullnat:RIP和DIP未必在同一IP网络,但要能通信

lvs-dr:通过封装新的MAC首部实现,通过MAC网络转发

lvs-tun:通过在原IP报文外封装新IP头实现转发,支持远距离通信

Ipvsadm 命令

-A --add-service #在服务器列表中新添加一条新的虚拟服务器记录
-t #表示为tcp服务
-u #表示为udp服务
-s --scheduler #使用的调度算法, rr | wrr | lc | wlc | lblb | lblcr | dh | sh | sed | nq 默认调度算法是 wlc
例:ipvsadm -A -t 192.168.1.2:80 -s wrr

-a --add-server  #在服务器表中添加一条新的真实主机记录
-t --tcp-service #说明虚拟服务器提供tcp服务
-u --udp-service #说明虚拟服务器提供udp服务
-r --real-server #真实服务器地址
-m --masquerading #指定LVS工作模式为NAT模式
-w --weight #真实服务器的权值
-g --gatewaying #指定LVS工作模式为直接路由器模式(也是LVS默认的模式)
-i --ip #指定LVS的工作模式为隧道模式
-p #会话保持时间,定义流量被转到同一个realserver的会话存留时间
例:ipvsadm -a -t 192.168.1.2:80 -r 192.168.2.10:80 -m -w 1

-E -edit-service #编辑内核虚拟服务器表中的一条虚拟服务器记录。
-D -delete-service #删除内核虚拟服务器表中的一条虚拟服务器记录。
-C -clear #清除内核虚拟服务器表中的所有记录。
-R -restore #恢复虚拟服务器规则
-S -save #保存虚拟服务器规则,输出为-R 选项可读的格式
-e -edit-server #编辑一条虚拟服务器记录中的某条真实服务器记录
-d -delete-server #删除一条虚拟服务器记录中的某条真实服务器记录
-L|-l –list #显示内核虚拟服务器表

--numeric, -n:#以数字形式输出地址和端口号
--exact: #扩展信息,精确值 
--connection,-c: #当前IPVS连接输出
--stats: #统计信息
--rate : #输出速率信息

参数也可以从/proc/net/ip_vs*映射文件中查看
-Z –zero #虚拟服务表计数器清零(清空当前的连接数量等)

LVS 持久连接

iptables -t mangle -A PREROUTING -d 192.168.188.11 -p tcp --dport 80 -j MARK --set-mark 99   //在iptables 打上标记,把80端口标记为99
iptables -t mangle -A PREROUTING -d 192.168.188.11 -p tcp --dport 443 -j MARK --set-mark 99   //在iptables打上标记,把443端口标记为99
ipvsadm -A -f 99 -s rr -p  //在lvs上建立基于99号标记的虚拟服务
ipvsadm -a -f 99 -r 192.168.188.9 -g
ipvsadm -a -f 99 -r 192.168.188.10 -g   //设置后端服务地址

LVS的调度算法

静态

1.RR:轮转

2.WRR:加权轮转

3.DH:目标地址散列调度(Destination Hash )

4.SH:源地址 hash(Source Hash)

动态

1.LC:最少链接

调度器通过”最少连接”调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。

2.WLC:加权最少连接

具有较高权值的服务器将承受较大比例的活动连接负载。

3.SED:最短期望延迟调度

在WLC基础上改进,Overhead = (ACTIVE+1)*256/加权

4.NQ:永不排队

有台 realserver的连接数=0就直接分配

5.LBLC:基于局部性的最少链接

主要用于Cache集群系统。

6.LBLCR:带复制的基于局部性最少连接

主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个目标IP地址到一组服务器的映射

LVS DR 模式搭建

A:Load balancer 192.168.188.8

1.准备

setenforce 0
sed -i  's/^SELIUNX=.*/SELIUNX=disabled/g' /etc/selinux/config
systemctl stop firewalld
systemctl disable firewalld
yum install -y iptables-services
systemctl enable iptables
systemctl start iptables.service
iptables -F # 清空iptables规则
service iptables save 
yum -y install ipvsadm net-tools

2.创建DR规则脚本

vim /opt/lvs_dr.sh
#!/usr/bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
ipv=/usr/sbin/ipvsadm
vip=192.168.188.11
rs1=192.168.188.9
rs2=192.168.188.10
net="ens33"
ifdown $net
ifup $net
ifconfig $net:2 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip dev $net:2
$ipv -C
$ipv -A -t $vip:80 -s wrr
$ipv -a -t $vip:80 -r $rs1:80 -g -w 1
$ipv -a -t $vip:80 -r $rs2:80 -g -w 1

3.执行检查

chmod 755 /opt/lvs_dr.sh
sh /opt/lvs_dr.sh
route -n
ip a

B.C:Real server 192.168.188.9 192.168.188.10

1.B.C分别安装

yum -y install net-tools

2.创建转发脚本

vim /opt/lvs_rs
#!/usr/bin/bash
vip=192.168.188.11
ifdown lo
ifup lo
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip lo:0
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

3.执行检查

chmod 755 /opt/lvs_rs.sh
sh /opt/lvs_rs.sh
route -n
ip a

4.拷贝脚本至C并运行

scp /opt/lvs_rs.sh 192.168.188.10:/opt/lvs_rs.sh

5.检查

iptables -ln

发表评论