一、lvs简介

Lvslinux virtual serverlinux虚拟服务器)是一个虚拟的服务器负载均衡系统。

目前有四种IP负载均衡技术:

NATDRTUNFNATFullNAT

十种调度算法:

静态四种:rrwrrSHDH

动态六种:lcwlcsednqlblclblcr

二、四种模型&&十种调度算法

1、四种模型拓扑及特点

<1>NAT模型

172624581.png

解析:客户端向Director(调度器)发出请求,调度器接到客户端请求,由调度器选择后端real_server回复客户端请求,回复报文经调度器返回给客户端。

特点及配置要点:

1>real_server应该使用私有IP地址

2>real_server的网关应该指向DIP

3>RIPDIP应该在同一个网段内

4>进出的报文都要经过Director,在高负载下Director会成为系统性能的瓶颈

5>支持端口映射

6>real_server可以是任意OS

<2>DR模型DirectorRouting:直接路由

172900701.png

解析:客户端向Director(调度器)发出请求,调度器接到客户端请求,由调度器选择后端real_server回复客户端请求,回复报文不经过经调度器直接返回给客户端,由于回复报文不经过调度器,因此大大降低了调度器的压力,系统系能得到了大大的提升。

特点及配置要点:

1>real_server可以使用私有IP地址

2>real_server的网关一定不能指向DIP

3>RIPDIP应该在同一个网段内

4>进站的报文经过Director,出站则有real_server直接回应client

5>不支持端口映射

6>real_server可以为大多数常见的OS

<3>TUN模型Tuneling:和DR模型相近,但必须支持IP隧道

解析:客户端向Director(调度器)发出请求,调度器接到客户端请求,由调度器选择后端real_server回复客户端请求,回复报文不经过经调度器直接返回给客户端,由于回复报文不经过调度器,因此大大降低了调度器的压力,系统系能得到了大大的提升。

特点及配置要点:

1>real_server不能是私有IP地址

2>real_server的网关一定不能指向DIP

3>RIPDIP应该在同一个网段内

4>进站的报文经过Director,出站则有real_server直接回应client

5>不支持端口映射

6>real_server必须支持IP隧道

2、十种调度算法及应用场景

静态四种:

rrround-robin轮调;对待每一台服务器是均等的,而不管服务器上实际的连接数和系统负载

wrrweight加权轮调;根据真实服务器的不同处理能力来调度访问请求可以保证处理能力强的服务器能处理更多的访问流量。

shsource hashing源地址哈希算法;根据请求的IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空

dh:目标地址哈希算法;根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。(主要用于缓存服务器)

动态六种:

lc:最少连接;Active(活动)+Inactive(非活动)=overload(负载);调度器动态地将网络请求调度到已建立的链接数最少的服务器上(用于系统性能相似的服务器)

wlc:加权最少连接;overload/weight具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值用于系统性能相差较大的服务器

sed:最短期望延迟;(Active+1)*256/weight

nq:永不排队;

lblc:基于本地的最少连接;dh+lc

lblcr:带复制的基于本地的最少连接;

三、LVS/NAT实战

1.环境规划

Director(前端调度器)

eth0192.168.1.15DIP

eth1172.16.15.15

eth1:0172.16.15.119(VIP)

# sysctl -w net.ipv4.ip_forward=1  #打开IP转发

Server1:(后端服务1

IP:192.168.1.5

GW:192.168.1.15(DIP)

Server2:(后端服务2

IP:192.168.1.6

GW:192.168.1.15(DIP)

2.安装ipvsadm添加规则

#yum -y install ipvsadm
#规则:调度算法rr
#ifconfig eth1:0 172.16.15.119
[root@stu_yxm15 ~]# ipvsadm -A -t 172.16.15.119:80 -s rr
[root@stu_yxm15 ~]# ipvsadm -a -t 172.16.15.119:80 -r 192.168.1.5 -m
[root@stu_yxm15 ~]# ipvsadm -a -t 172.16.15.119:80 -r 192.168.1.6 -m

查看状态

[root@stu_yxm15 ~]# ipvsadm -Ln --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes
-> RemoteAddress:Port
TCP  172.16.15.119:80                   28      129      128    13341    12547
-> 192.168.1.5:80                     14       57       57     5053     4779
-> 192.168.1.6:80                     14       72       71     8288     7768

调度算法wrr

[root@stu_yxm15 ~]# ipvsadm -A -t 172.16.15.119:80 -s wrr
[root@stu_yxm15 ~]# ipvsadm -a -t 172.16.15.119:80 -r 192.168.1.5 -m -w 2
[root@stu_yxm15 ~]# ipvsadm -a -t 172.16.15.119:80 -r 192.168.1.6 -m -w 3

查看状态

[root@stu_yxm15 ~]# ipvsadm -Ln --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes
-> RemoteAddress:Port
TCP  172.16.15.119:80                   20       96       94    10866     9800
-> 192.168.1.5:80                     12       58       57     6568     6154
-> 192.168.1.6:80                      8       38       37     4298     3646

183509779.png

四、LVS/DR实战

1.环境规划

Director(前端调度器)

eth1172.16.15.15DIP

eth1:0172.16.15.108(VIP)

#sysctl-wnet.ipv4.ip_forward=1#打开IP转发

Server1:(后端服务1

IP:172.16.15.5

lo:0172.16.15.108VIP

Server2:(后端服务2

IP:192.168.1.6

lo:0172.16.15.108VIP

2.配置

<1>后端Real_server

修改内核参数禁止Real_servers上的VIP和前端路由直接通信

#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
####配置VIP
#ifconfig lo:0 172.16.15.108 broadcast 172.16.15.108 netmask 255.255.255.255 up
####添加路由
#route add -host 172.16.15.108 dev lo:0

<2>Director(前端调度器)

##### 配置VIP
#ifconfig eth1:0 172.16.15.108 broadcast 172.16.15.108 netmask 255.255.255.255 up
#####添加路由
route add -host 172.16.15.108 dev eth1:0
####  打开路由转发
echo 1 > /proc/sys/net/ipv4/ip_forward
#### 添加规则:(调度算法wlc)
[root@stu_yxm15 ~]# ipvsadm -A -t 172.16.15.108:80 -s wlc
[root@stu_yxm15 ~]# ipvsadm -a -t 172.16.15.108:80 -r 172.16.15.5 -g -w 2
[root@stu_yxm15 ~]# ipvsadm -a -t 172.16.15.108:80 -r 172.16.15.6 -g -w 4


查看状态


[root@stu_yxm15 ~]# ipvsadm -Ln --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes
-> RemoteAddress:Port
TCP  172.16.15.108:80                  258     1272        0   143824        0
-> 172.16.15.5:80                     90      435        0    44927        0
-> 172.16.15.6:80                    168      837        0    98897        0

183601712.png