标签:lvs
一、基本概览介绍
二、LVS的类型及原理
三、LVS调度算法
四、利用DR及NAT实现web负载均衡
一、基本概览介绍
LVS是一个工作在传输层面上的一个负载均衡软件,它是由用户空间的ipvsadm和内核空间的ipvs两个组件组成。其中ipvsadm是用户空间的命令行工具,主要是用于管理集群服务及集群服务上的RS。ipvs是工作与内核上的netfilter的INPUT链上的程序,可以根据用户事先定义的集群实现转发。
二、LVS的类型及原理
LVS的类型可以分为:NAT、DR、TUN、FULLNAT四中类型
LVS-NAT模型:需要将RS的网关指向LVS的DIP地址
原理: 通过将请求报文中的目标地址和目标端口修改为挑选出来的某RS的RIP和PORT,从而实现转发
流程:①客户端将请求发往前端的负载均衡器,请求报文的源地址是CIP,目标地址是VIP
②负载均衡器收到报文后,正常情况报文是进入用户空间的,但是发现请求是规则里面存在的地址,那么将
报文的目标地址改为后端RS服务器的RIP地址,原CIP不变,然后将报文发走。
③报文送到RS服务器后,由于报文的目标地址是自己,所有会响应客户端的请求,并将包文返回给调度器,
此时原地址为RIP,目标地址为CIP
④ 调度器收到报文后,将此报文的源地址改为VIP,然后将报文返回给客户端。
LVS-DR模型:
原理:源和目标的ip及端口都不发送改变,通过将请求报文重新封装一个MAC首部进行转发,源MAC是DIP接口的
MAC,目标MAC是RS服务器的RIP接口的MAC
流程: ①客户端将请求报文发往lvs调度器,请求报文源地址是CIP,目标地址为VIP,源MAC是CMAC,目标MAC
是LVS的VIP接口的MAC
②LVS收到报文后,发现请求是定义规则中的,那么它将客户端的请求报文的源MAC地址重新封装为自己DI
P,目标MAC 改为挑选出来的RS的VIP接口的MAC地址。
③RS收到报文后,发现报文中目的MAC是自己VIP接口的MAC,就会接下报文出来后,将直接回应给客户端
LSV-TUN模型:
原理:不修改请求报文中的IP首部(源ip为CIP,目标IP为VIP),而是在原IP首部之外再封装一个IP首部(源ip为
DIP,目标IP为挑选出来的RS的RIP),然后将报文发往挑选出来的目标RS
LSV-FULLNAT模型:
原理:通过同时修改请求报文中的源IP地址和目标IP地址进行转发
三、LVS调度算法
根据其调度时是否考虑后端主机的当前负载情况,可以分为静态方法和动态方法:
静态算法:调度器仅仅是根据算法本身来进行调度,而不考虑后的那RS的实际连接和负载情况,注重的是起点公平
RR:轮询调度
WRR:加权轮询
SH:源地址哈希,将来自同一IP地址的请求始终发往第一次挑中的Rs中,可以实现会话绑定
DH:目标地址哈希:将发往同一个目标地址的请求,始终转发到第一次挑中的Rs
动态算法:
LC:最少连接
WLC:加权最少连接
SED:最短期望延迟
NQ:永不排队的连接
LBLC:基于本地最少连接,动态DH算法
LBLCR:带复制功能的LBLC
四、利用DR及NAT实现web负载均衡
基于NAT模型的web负载:
配置Real Server
RS1:
###配置IP地址和网关,网关指向DIP: [root@pxe132 ~]# route add default gw 192.168.100.100 ###配置一个httpd测试网页: [root@pxe132 ~]# yum -y install httpd [root@pxe132 ~]# echo "Rserver 1" >/var/www/html/index.html [root@pxe132 ~]# systemctl start httpd.service
RS2
###配置IP地址和网关,网关指向DIP: [root@pxe132 ~]# route add default gw 192.168.100.100 ###配置一个httpd测试网页: [root@pxe132 ~]# yum -y install httpd [root@pxe132 ~]# echo "Rserver 2" >/var/www/html/index.html [root@pxe132 ~]# systemctl start httpd.service
配置Director
##配置IP地址省略: ##配置路由转发功能: [root@localhost ~]# echo 1 > /proc/sys/net/ipv4/ip_forward ###测试下我们环境是否正常: [root@localhost ~]# curl http://192.168.1.10 Rserver 1 [root@localhost ~]# curl http://192.168.1.20 Rserver 2
添加规则:
[root@localhost ~]# ipvsadm -A -t 172.16.100.1:80 -s rr [root@localhost ~]# ipvsadm -a -t 172.16.100.1:80 -r 192.168.1.10:80 -m -w 1 [root@localhost ~]# ipvsadm -a -t 172.16.100.1:80 -r 192.168.1.20:80 -m -w 1
查看规则信息:
[root@localhost ~]# ipvsadm -L IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 172.16.100.1:http rr -> 192.168.1.10:http Masq 1 0 0 -> 192.168.1.20:http Masq 1 0 0
基于LVS-DR模型的web负载
[root@bogon ~]# ifconfig eno16777736:1 192.168.1.100/32 broadcast 192.168.1.100 up [root@bogon ~]# route add -host 192.168.1.100 dev eno16777736:1 [root@bogon ~]# ipvsadm -A -t 192.168.1.100:80 -s rr [root@bogon ~]# ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.105:80 -g -w 1 [root@bogon ~]# ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.106:80 -g -w 2
配置RealServer1
[root@bogon ~]#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore [root@bogon ~]#echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore [root@bogon ~]#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce [root@bogon ~]#echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce [root@rs1 ~]# ifconfig lo:0 192.168.1.100/32 broadcast 192.168.1.100 up [root@rs1 ~]# route add -host 192.168.1.100 dev lo:0
配置RealServer2
[root@bogon ~]#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore [root@bogon ~]#echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore [root@bogon ~]#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce [root@bogon ~]#echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce [root@rs1 ~]# ifconfig lo:0 192.168.1.100/32 broadcast 192.168.1.100 up [root@rs1 ~]# route add -host 192.168.1.100 dev lo:0
标签:lvs
原文地址:http://maweijun.blog.51cto.com/8654192/1834541