一、lvs简介
Lvs:linux virtual server(linux虚拟服务器)是一个虚拟的服务器负载均衡系统。
目前有四种IP负载均衡技术:
NAT、DR、TUN、FNAT:FullNAT
十种调度算法:
静态四种:rr、wrr、SH、DH
动态六种:lc、wlc、sed、nq、lblc、lblcr
二、四种模型&&十种调度算法
1、四种模型拓扑及特点
<1>NAT模型
解析:客户端向Director(调度器)发出请求,调度器接到客户端请求,由调度器选择后端real_server回复客户端请求,回复报文经调度器返回给客户端。
特点及配置要点:
1>real_server应该使用私有IP地址
2>real_server的网关应该指向DIP
3>RIP和DIP应该在同一个网段内
4>进出的报文都要经过Director,在高负载下Director会成为系统性能的瓶颈
5>支持端口映射
6>real_server可以是任意OS
<2>DR模型DirectorRouting:直接路由
解析:客户端向Director(调度器)发出请求,调度器接到客户端请求,由调度器选择后端real_server回复客户端请求,回复报文不经过经调度器直接返回给客户端,由于回复报文不经过调度器,因此大大降低了调度器的压力,系统系能得到了大大的提升。
特点及配置要点:
1>real_server可以使用私有IP地址
2>real_server的网关一定不能指向DIP
3>RIP和DIP应该在同一个网段内
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>RIP和DIP应该在同一个网段内
4>进站的报文经过Director,出站则有real_server直接回应client
5>不支持端口映射
6>real_server必须支持IP隧道
2、十种调度算法及应用场景
静态四种:
rr:round-robin轮调;对待每一台服务器是均等的,而不管服务器上实际的连接数和系统负载。
wrr:weight加权轮调;根据真实服务器的不同处理能力来调度访问请求,可以保证处理能力强的服务器能处理更多的访问流量。
sh:source 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(前端调度器)
eth0:192.168.1.15(DIP)
eth1:172.16.15.15
eth1:0:172.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
四、LVS/DR实战
1.环境规划
Director(前端调度器)
eth1:172.16.15.15(DIP)
eth1:0:172.16.15.108(VIP)
#sysctl-wnet.ipv4.ip_forward=1#打开IP转发
Server1:(后端服务1)
IP:172.16.15.5
lo:0:172.16.15.108(VIP)
Server2:(后端服务2)
IP:192.168.1.6
lo:0:172.16.15.108(VIP)
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