博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LVS负载均衡
阅读量:6477 次
发布时间:2019-06-23

本文共 4712 字,大约阅读时间需要 15 分钟。

什么是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.200DIP=192.168.54.201RIP1=192.168.54.202 RIP2=192.168.54.203NETWORK=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/DRVIP=192.168.54.200DIP=192.168.54.201RIP1=192.168.54.202RIP2=192.168.54.203NETWORK=enp0s3PORT=80 case "$1" instart)     /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 serverVIP=192.168.54.200DIP=192.168.54.201RIP1=192.168.54.202RIP2=192.168.54.203NETWORK=enp0s3PORT=80 case "$1" instart)        # 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
两次响应的结果不同

转载地址:http://lbqko.baihongyu.com/

你可能感兴趣的文章
CISCO 路由器(4)
查看>>
网络服务搭建、配置与管理大全(Linux版)
查看>>
Silverlight 5 Beta新特性[4]文本缩进控制
查看>>
springMVC多数据源使用 跨库跨连接
查看>>
Git服务端和客户端安装笔记
查看>>
Spring Security(14)——权限鉴定基础
查看>>
IntelliJ IDEA快捷键
查看>>
【iOS-cocos2d-X 游戏开发之十三】cocos2dx通过Jni调用Android的Java层代码(下)
查看>>
MongoDB的基础使用
查看>>
进程间通信——命名管道
查看>>
LINUX 重定向的知识
查看>>
ssh登陆不需要密码
查看>>
ARP
查看>>
java mkdir()和mkdirs()区别
查看>>
桌面支持--excel自动换行
查看>>
虚拟化--003 vcac licence -成功案例
查看>>
windows server 2003各版本及2008各版本的最大识别内存大小
查看>>
OSChina 周六乱弹 ——揭秘后羿怎么死的
查看>>
centos查找未挂载磁盘格式化并挂载
查看>>
IT人员的职业生涯规划
查看>>