高峰之巅 发表于 2019-1-5 12:37:17

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负载:
  http://s5.运维网.com/wyfs02/M02/85/6D/wKiom1ei9szgvfG3AACijp5GnzY629.png
  

  配置Real Server
  RS1:

###配置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
###配置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
##配置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  添加规则:
# 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  查看规则信息:

# 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负载

http://s3.运维网.com/wyfs02/M00/85/70/wKiom1ejL6DAI916AACfB5vf0t0495.png配置Director
# 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
#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

#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负载均衡使用详解