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地址重新封装为自己DIP,目标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负载:

wKiom1ei9szgvfG3AACijp5GnzY629.png


配置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负载

wKiom1ejL6DAI916AACfB5vf0t0495.png配置Director

[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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章