LVS负载均衡

简介: lvs负载均衡原理与实践

什么是LVS
LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。是LB(load balance)负载均衡的解决方案。
常见的LB有F5、LVS、nginx等,其中F5为硬件解决方案,LVS与nginx都是软件负载均衡解决方案。
LVS工作在四层,nginx工作在七层

LVS的工作模式
LVS的工作模式大致分为4种:NAT(地址转换)、IP TUN(IP隧道)、DR(直接路由)、FULL-NAT

LVS-NAT
网络拓扑
screenshot
原理
1、用户请求到达director之后,director将请求报文的目的地址(即VIP)改成选定的realserver地址,同时将报文的目标端口也改成选定的realserver的相应端口,最后将报文请求发送到指定的realserver。
2、realserver接收到报文后,进行业务处理,在服务器端得到数据后,realserver将数据返给director,而director将报文的源地址和源端口改成VIP地址和相应端口,然后把数据发送给用户,完成整个负载调度过程。
特点
1、所有的realserver和director要在同一个网段内
2、RIP是私有地址,仅用于集群节点之间进行通信
3、director同时处理请求和应答数据包
4、realserver的网关要指向DIP
5、可以实现端口映射
6、readlserver可以是任意操作系统
7、director很可能成为系统性能瓶颈
IP规划
screenshot
DR虚拟机
screenshot
screenshot
RS虚拟机
RS配置相当简单,只需要将网关配置为DIP
screenshot
DR配置脚本

#!/bin/bash 
VIP=192.168.54.200
DIP=192.168.54.201
RIP1=192.168.54.202 
RIP2=192.168.54.203
NETWORK=enp0s3
 
case "$1" in 
start) 
           echo "start LVS of DirectorServer NAT" 
           echo 1 > /proc/sys/net/ipv4/ip_forward #开启路由转发
           /sbin/ifconfig $NETWORK:0 $VIP netmask 255.255.255.0 up  #配置VIP
           /sbin/ipvsadm -C 
           /sbin/ipvsadm -A -t $VIP:80 -s rr 
           /sbin/ipvsadm -a -t $VIP:80 -r $RIP1 -m 
           /sbin/ipvsadm -a -t $VIP:80 -r $RIP2 -m 
           /bin/touch /var/lock/subsys/ipvsadm.lock
           /sbin/ipvsadm 
       ;; 
stop) 
           echo "stop LVS of DirectorServer NAT" 
           echo 0 >/proc/sys/net/ipv4/ip_forward 
           /sbin/ipvsadm -C 
           /sbin/ifconfig $NETWORK:0 down 
           rm -rf /var/lock/subsys/ipvsadm.lock
           ;; 
status) 
  [ -e /var/lock/subsys/ipvsadm.lock ] && echo "ipvs is running..." || echo "ipvsadm is stopped..."
                ;; 
*) 
          echo "Usage: $0 {start|stop}" 
          exit 1 
esac

注:测试使用的nginx作为http服务器进行测试
当前DR模式按照上面的配置,一直存在一个问题,在DR主机上可以正常负载,但是在宿主机上也就是192.168.54.240这台机器上却无法正常负载。

LVS-DR模式
网络拓扑
screenshot
原理
1、DR模式将报文直接路由给目标真实服务器。在DR模式中,调度器根据各个真实服务器的负载情况,连接数多少等,动态地选择一台服务器,不修改目标IP地址和目标端口,也不封装IP报文,而是将请求报文的数据帧的目标MAC地址改为真实服务器的MAC地址。然后再将修改的数据帧在服务器组的局域网上发送。因为数据帧的MAC地址是真实服务器的MAC地址,并且又在同一个局域网。那么根据局域网的通讯原理,真实复位是一定能够收到由LB发出的数据包。
2、真实服务器接收到请求数据包的时候,解开IP包头查看到的目标IP是VIP。(此时只有自己的IP符合目标IP才会接收进来,所以我们需要在本地的回环借口上面配置VIP。另:由于网络接口都会进行ARP广播响应,但集群的其他机器都有这个VIP的lo接口,都响应就会冲突。所以我们需要把真实服务器的lo接口的ARP响应关闭掉。)然后真实服务器做成请求响应,之后根据自己的路由信息将这个响应数据包发送回给客户,并且源IP地址还是VIP。
特点:
1、通过在调度器LB上修改数据包的目的MAC地址实现转发。注意源地址仍然是CIP,目的地址仍然是VIP地址。
2、请求的报文经过调度器,而RS响应处理后的报文无需经过调度器LB,因此并发访问量大时使用效率很高(和NAT模式比)
3、因为DR模式是通过MAC地址改写机制实现转发,因此所有RS节点和调度器LB只能在一个局域网里面
4、RS主机需要绑定VIP地址在LO接口上,并且需要配置ARP抑制。
5、RS节点的默认网关不需要配置成LB,而是直接配置为上级路由的网关,能让RS直接出网就可以。
6、由于DR模式的调度器仅做MAC地址的改写,所以调度器LB就不能改写目标端口,那么RS服务器就得使用和VIP相同的端口提供服务。
IP规划
screenshot
DR配置脚本

#!/bin/bash
# 
# LVS script for VS/DR


VIP=192.168.54.200
DIP=192.168.54.201
RIP1=192.168.54.202
RIP2=192.168.54.203
NETWORK=enp0s3
PORT=80 

case "$1" in
start) 
  
  /sbin/ifconfig $NETWORK:0 $VIP broadcast $VIP netmask 255.255.255.255 up
  /sbin/route add -host $VIP dev $NETWORK:0
  echo 1 > /proc/sys/net/ipv4/ip_forward
  
  /sbin/ipvsadm -C
  /sbin/ipvsadm -A -t $VIP:80 -s wrr
  /sbin/ipvsadm -a -t $VIP:80 -r $RIP1 -g -w 1
  /sbin/ipvsadm -a -t $VIP:80 -r $RIP2 -g -w 1
  /sbin/ipvsadm -Ln
  
  /bin/touch /var/lock/subsys/ipvsadm &> /dev/null
;; 
  
stop) # Stop forwarding packets
  echo 0 > /proc/sys/net/ipv4/ip_forward
 # Reset ipvsadm
  /sbin/ipvsadm -C
 # Bring down the VIP interface
  /sbin/ifconfig $NETWORK:0 down
  /sbin/route del $VIP
  
  /bin/rm -f /var/lock/subsys/ipvsadm
  
  echo "ipvs is stopped..."
;; 
  
status) 
  if [ ! -e /var/lock/subsys/ipvsadm ]; then
    echo "ipvsadm is stopped ..."
  else
    echo "ipvs is running ..."
    ipvsadm -L -n
  fi
;; 
*) 
  echo "Usage: $0 {start|stop|status}"
;; esac

RS配置脚本

#!/bin/bash
# 
# Script to start LVS DR real server.
# description: LVS DR real server

VIP=192.168.54.200
DIP=192.168.54.201
RIP1=192.168.54.202
RIP2=192.168.54.203
NETWORK=enp0s3
PORT=80 

case "$1" in
start) 
       # Start LVS-DR real server on this machine.
        /sbin/ifconfig lo down
        /sbin/ifconfig lo up
        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
  
        /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
        /sbin/route add -host $VIP dev lo:0

        systemctl start nginx  
;; 
stop) 
  
        # Stop LVS-DR real server loopback device(s).
        /sbin/ifconfig lo:0 down
        echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
        echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
        echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
        echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce

        systemctl stop nginx
;; 
*) 
            # Invalid entry.
            echo "$0: Usage: $0 {start|status|stop}"
            exit 1
;; esac

结果:
在cip上可以正常负载
screenshot
screenshot
两次响应的结果不同

相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
6月前
|
负载均衡 应用服务中间件 Linux
企业实战(13)LVS负载均衡NAT(网络地址转换)模式实战详解(一)
企业实战(13)LVS负载均衡NAT(网络地址转换)模式实战详解(一)
|
6月前
|
存储 负载均衡 网络协议
企业实战(13)LVS负载均衡DR(直接路由)模式实战详解(二)
企业实战(13)LVS负载均衡DR(直接路由)模式实战详解(二)
108 0
|
5月前
|
负载均衡 应用服务中间件 Linux
Nginx系列教程(14) - LVS+KeepAlived+Nginx实现高性能负载均衡集群
Nginx系列教程(14) - LVS+KeepAlived+Nginx实现高性能负载均衡集群
183 0
|
7月前
|
存储 负载均衡 应用服务中间件
LVS负载均衡群集——NAT模式实操
LVS负载均衡群集——NAT模式实操
200 0
|
3月前
|
缓存 负载均衡 应用服务中间件
【分布式技术专题】「分析Web服务器架构」Tomcat服务器的运行架构和LVS负载均衡的运行机制(修订版)
在本章内容中,我们将深入探讨 Tomcat 服务器的运行架构、LVS 负载均衡的运行机制以及 Cache 缓存机制,并提供相应的解决方案和指导。通过理解这些关键概念和机制,您将能够优化您的系统架构,提高性能和可扩展性。
207 4
【分布式技术专题】「分析Web服务器架构」Tomcat服务器的运行架构和LVS负载均衡的运行机制(修订版)
|
5月前
|
负载均衡 算法 网络协议
Keepalived+LVS搭建高可用负载均衡
Keepalived+LVS搭建高可用负载均衡
182 1
|
6月前
|
负载均衡 应用服务中间件 nginx
71分布式电商项目 - nginx高可用以及lvs+nginx负载均衡(资料)
71分布式电商项目 - nginx高可用以及lvs+nginx负载均衡(资料)
41 0
|
7月前
|
存储 负载均衡 网络协议
LVS负载均衡群集—DR直接路由
LVS负载均衡群集—DR直接路由
65 0
|
7月前
|
域名解析 负载均衡 网络协议
keepalived+vip+lvs高可用负载均衡服务演化
keepalived+vip+lvs高可用负载均衡服务演化
322 0
|
10月前
|
存储 负载均衡 网络协议
LVS负载均衡群集
LVS负载均衡群集
128 0