LVS负载均衡

200 阅读5分钟
原文链接: click.aliyun.com

LVS负载均衡

流浪的猪猪 2017-12-11 00:20:38 浏览14 评论0

nginx 服务器 配置 集群 负载均衡 lock ScreenShot network lvs loadbalance

摘要: 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
两次响应的结果不同 版权声明:本文内容由互联网用户自发贡献,本社区不拥有所有权,也不承担相关法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:yqgroup@service.aliyun.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

用云栖社区APP,舒服~

【云栖快讯】2017互联网超级工程阿里双11完美落幕,交易额突破1682亿,但阿里工程师如何玩转“超级工程”,背后黑科技又是如何?12月13-14日,12位大咖直播分享揭秘1682亿背后技术实践,马上预约  详情请点击 评论文章 (0) (0) (0)

相关文章

网友评论