34323 发表于 2016-8-5 08:49:31

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:


1
2
3
4
5
6
7
###配置IP地址和网关,网关指向DIP:
# route add default gw 192.168.100.100

###配置一个httpd测试网页:
# yum -y install httpd
# echo "Rserver 1" >/var/www/html/index.html
# systemctl start httpd.service




RS2

1
2
3
4
5
6
7
###配置IP地址和网关,网关指向DIP:
# route add default gw 192.168.100.100

###配置一个httpd测试网页:
# yum -y install httpd
# echo "Rserver 2" >/var/www/html/index.html
# systemctl start httpd.service





配置Director

1
2
3
4
5
6
7
8
##配置IP地址省略:
##配置路由转发功能:
# echo 1 > /proc/sys/net/ipv4/ip_forward
###测试下我们环境是否正常:
# curl http://192.168.1.10
Rserver 1
# curl http://192.168.1.20
Rserver 2




添加规则:

1
2
3
# ipvsadm -A -t 172.16.100.1:80 -s rr
# ipvsadm -a -t 172.16.100.1:80 -r 192.168.1.10:80 -m -w 1
# ipvsadm -a -t 172.16.100.1:80 -r 192.168.1.20:80 -m -w 1




查看规则信息:


1
2
3
4
5
6
7
# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port         Forward Weight ActiveConn InActConn
TCP172.16.100.1:http rr
-> 192.168.1.10:http             Masq    100         
-> 192.168.1.20:http             Masq    100






基于LVS-DR模型的web负载

配置Director

1
2
3
4
5
6
# ifconfig eno16777736:1 192.168.1.100/32 broadcast 192.168.1.100 up
# route add -host 192.168.1.100 dev eno16777736:1

# ipvsadm -A -t 192.168.1.100:80 -s rr
# ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.105:80 -g -w 1
# ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.106:80 -g -w 2




配置RealServer1

1
2
3
4
5
6
7
#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
#echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
#echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

# ifconfig lo:0 192.168.1.100/32 broadcast 192.168.1.100 up
# route add -host 192.168.1.100 dev lo:0




配置RealServer2


1
2
3
4
5
6
7
#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
#echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
#echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

# ifconfig lo:0 192.168.1.100/32 broadcast 192.168.1.100 up
# route add -host 192.168.1.100 dev lo:0



页: [1]
查看完整版本: LVS负载均衡使用详解