最近在思考物联网平台的架构,然后之前对IM系统又很感兴趣,就想着一台服务器能连接的客户端也是有限的,那如果客户端突破这个限制了呢?所以自然而然就想到了负载均衡,比如Gateway、Nginx等等,有些不可以实现,有些可以实现,最终经过比较发现LVS可能对服务器集群的压力小一些(但是会暴露真实服务器的IP地址,如果有大神有更好的方案,感谢指点一下)。

然后考虑到服务器可能不是都在一个局域网的,例如异地灾备之类的,所以LVS的NET模式和DR模式就不符合我们的需求了。由此先拿TUN模式试试水。

LVS-TUN模式

在TUN工作模式下,Client向Director server 发送请求报文,报文到达Director 内核空间不修改请求报文的ip首部,而是通过在原有ip首部[CIP-VIP]之外,再封装一个ip首部[DIP-RIP],RS收到报文后发现是自己的IP地址,就会将报文接受下来,拆除最外层的IP后,会发现里面还有一层IP首部,而且目标地址是自己的lo接口VIP,那么此时RS开始处理此请求,处理完成滞后,通过lo接口送给eth0网卡,然后向外传递。此时的源IP地址为VIP,目标IP为CIP。

LVS-TUN模型运行原理

TUN模式工作流程

1、当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP 。
2、 PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
3、IPVS比对数据包请求的服务是否为集群服务,若是,在请求报文的首部再次封装一层IP报文,封装源IP为为DIP,目标IP为RIP。然后发至POSTROUTING链。 此时源IP为DIP,目标IP为RIP
4、POSTROUTING链根据最新封装的IP报文,将数据包发至RS(因为在外层封装多了一层IP首部,所以可以理解为此时通过隧道传输)。 此时源IP为DIP,目标IP为RIP
5、RS接收到报文后发现是自己的IP地址,就将报文接收下来,拆除掉最外层的IP后,会发现里面还有一层IP首部,而且目标是自己的lo接口VIP,那么此时RS开始处理此请求,处理完成之后,通过lo接口送给eth0网卡,然后向外传递。 此时的源IP地址为VIP,目标IP为CIP

TUN模型特点

1、RIP、VIP、DIP全是公网地址
2、RS的网关不会也不可能指向DIP
3、所有的请求报文经由Director Server,但响应报文必须不能进过Director Server
4、不支持端口映射,
5、RS的系统必须支持隧道

LVS调度算法

1.四种静态算法,不考虑后端服务器实际负载情况:

  • RR
    根据规则依次论调,不考虑RS的性能。轮到谁就转发给谁。

  • WRR
    加权轮询,加入了weight(权重),可以根据RS的性能为其设置权重值,权重越大功能越强,但是无法发现当前的服务器的运行情况如何。

  • DH
    目标地址hash,适用于前端是一个director后端是几个缓存服务器的情况,当客户端第一次访问到的是RS1的时候,DH这种算法能保证在客户端刷新后还是访问的RS1。

  • SH
    源地址hash,用于保证响应的报文和请求的报文是同一个路径。

2.六种动态算法,考虑后端服务器当前负载后再进行分配:

  • LC
    leastconnection,当一个用户请求过来的时候,Director会计算一下哪台RS的连接数最小,那么这台RS就获得了下次响应客户端请求的机会,计算的方法Overhead=active*256+inactive,如果两者的结果是相同的则从LVS中的规则依次往下选择RS。这种算法也是不考虑服务器的性能的。

  • WLC
    这个就是加了权重的LC,考虑了RS的性能,即性能好的就给的权重值大一些,性能差的给的权重值小一些。缺点就是如果Overhead相同,则会按规则表中的顺序,由上而下选择RS,Overhead=(active*256+inactive)/weight

  • SED
    就是对WLC的情况的补充,Overhead=(active+1)*256/weight,加1,就是为了让其能够比较出大小。

  • NQ
    即neverqueue,基本和SED相同,避免了SED当中的性能差的服务器长时间被空闲的弊端,它是将第一个请求给性能好的服务器,第二个请求一定是给空闲的服务器不论它的性能的好与坏。之后还是会把请求给性能好的服务器。

  • LBLC
    它就是动态DH和LC的组合,适用于cache集群,对于从来没有来过的那些新的请求会分给当前连接数较少的那台服务器。

  • LBLCR
    带有复制功能的LBLC,它的适用场景这里举例说明一下,比如说现在有RS1和RS2,第一次访问RS1的5个请求第二次又来了,理所
    应到Director将会将其交给RS1,而此时在RS2是非常闲的,所以此时最好的处理方法就是可以将后来的这5个请求分别交给RS1和RS2,所以此时就需要把客户端第一次请求的资源复制下来。(特殊情况)

配置实例

服务器 IP1 IP2
服务器DR 172.16.69.15/24 172.16.29.6/24
服务器B 172.16.197.3/24
服务器C 192.168.134.5/24

调度服务器 Director

ipvsadm  -Cipvsadm -A -t 172.16.29.6:9001 -s rr
ipvsadm -a -t 172.16.29.6:9001 -r 172.16.197.3:9001 -i
ipvsadm -a -t 172.16.29.6:9001 -r 192.168.134.5:9001 -iecho 1 > /proc/sys/net/ipv4/ip_forwardvi /etc/sysctl.conf
net.ipv4.ip_forward = 1vi /etc/sysconfig/network-scripts/ifcfg-ens34TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens34
UUID=8fd48a4d-b484-4acb-aa27-5bc7939f28f0
DEVICE=ens34
ONBOOT=yes
IPADDR="172.16.29.6"
NETMASK="255.255.255.0"
GATEWAY="172.16.29.6"systemctl restart network

后端服务器 RS1、RS2

TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="dhcp"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
DEVICE="ens33"
ONBOOT="yes"modprobe ipip
ifconfig tunl0 172.16.29.6 netmask 255.255.255.255 up
systemctl restart networkvi /etc/sysctl.confnet.ipv4.conf.tunl0.rp_filter = 0
net.ipv4.conf.tunl0.arp_ignore = 1
net.ipv4.conf.tunl0.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0sysctl -p

Linux的rp_filter用于实现反向过滤技术,也即uRPF,它验证反向数据包的流向,以避免伪装IP攻击。然而,在LVS TUN 模式中,数据包是有问题的,因为从real server ens33出去的IP数据包的源IP地址应该为RIP,而不是VIP地址。所以必须关闭这一项功能。

检验结果WEB和TCP Server(截图的地址原来是在局域网的基础上配置的TUN模式,所以用的还是局域网地址,但是不影响确认配置生效)


这里断开再连接会轮询到另外一台机器上

局域网配置TUN模式(需要虚拟出来一个内网IP)

LVS负载均衡-TUN模式(模拟不同网段)相关推荐

  1. LVS负载均衡DR模式安装和配置过程详解

    ===============================为什么使用LVS负载均衡============================= **nginx反向代理** 用作负载均衡优点: 工作在 ...

  2. LVS负载均衡DR模式实现

    LVS负载均衡之DR模式配置 DR 模式架构图: 操作步骤 实验环境准备:(centos7平台) 所有服务器上配置 # systemctl stop firewalld //关闭防火墙 # sed - ...

  3. LVS负载均衡——NAT模式

    LVS负载均衡群集--NAT地址转换 一.集群与分布式 1.1 集群的含义 1.2 LVS模型 1.3系统性能扩展方式 1.4 群集的三种类型 1.4.1 负载均衡群集 1.4.2高可用群集 1.4. ...

  4. LVS负载均衡DR模式+keepalived

    实验拓扑: 实验准备: CentOS6.5-x86-64 node1 10.0.0.11    软件:ipvsadm+keepalived    角色:Director1 node2 10.0.0.1 ...

  5. Lvs负载均衡 ——NET模式群集部署

    一,集群介绍 集群通信的最大特点是话音通信采用PTT(Push To Talk),以一按即通的方式接续,被叫无需摘机即可接听,且接续速度较快,并能支持群组呼叫等功能,它的运作方式以单工.半双工为主,主 ...

  6. lvs负载均衡—DR模式

    lvs介绍: 1 . LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统.LVS集群采用IP负载均衡技术和基于内容请求分发技术.调度器具有很好 ...

  7. LVS负载均衡--NAT模式

    目录 一.NAT地址转换模式 1.实验环境 2.实验部署 一.NAT地址转换模式 1.实验环境 分析: 客户端的请求经过LVS后负载均衡,分配到指定服务器处理,处理结果返回时还是会经过LVS负载均衡器 ...

  8. linux tunl0 ip,Centos7下lvs负载均衡lvs-tun模式配置

    一.架构 director:172.28.18.69 vip:172.28.18.70 real server1:172.28.18.71 real server2:172.28.18.78 二.两台 ...

  9. lvs负载均衡—NAT模式

    NAT模式原理图 Virtual Server via NAT : 用地址翻译实现虚拟服务器,地址转换器有能被外界访问到的合法IP地址,它修改来自专有网络的流出包的地址,外界看起来包是来自地址转换器本 ...

最新文章

  1. RDKit | 基于RDKit通过SMARTS定义反应模式来生成反应产物
  2. linux下如何更新镜像源(ubuntu 10.04 为例),Ubuntu 10.04 更新源补充
  3. html之属性的定义
  4. vb.net 的 openFileDialog 控件文件筛选器使用
  5. os.path.join()函数用法
  6. Soda PDF Desktop Pro(电脑版pdf编辑器软件)官方正式版V12.0.283.16292 | 电脑pdf编辑器哪个好用?
  7. bpsk调制rician_fading信道的simulink仿真
  8. Matplotlib入门详细教程
  9. 菜鸟教程 linux ubuntu,菜鸟教程 Ubuntu 11.0下搭建Web服务器
  10. 计算机内存一代,内存条一代二代三代的区别
  11. 亚马逊森林大火----- 我也来评论一下
  12. 剑指offer_3 -- 构建乘积数组
  13. 利用sqlmap注入获取网址管理员账号密码
  14. 低功耗设计及其UPF实现第四节(最后一节)
  15. 一位高人隐士传授的炼精化气秘法 透彻之极!
  16. 开源项目学习:cJSON库的学习和使用(上)---以天气JSON数据为例
  17. 最全最细的零知识 (ZK) 证明解读
  18. 破解仓储难题?看WMS如何解决
  19. H3C防火墙基础配置操作
  20. 用python代码做一个爬虫软件,给出完整代码

热门文章

  1. linux使用docker安装wordpress
  2. matlab中mean 函数的用法
  3. 数据库服务器物理内存是8g,数据库服务器 8g内存
  4. URI malformed
  5. 分词,词性标注,和命名实体识别,有什么区别?
  6. 中国艺术《无善恶》孙溟㠭篆刻
  7. Java变量在内存_Java变量在内存中的存储
  8. iMac 2021概念机
  9. 数据结构之python实现循环单链表实例
  10. W: Possible missing firmware /lib/firmware/rtl_nic/rtl8125a-3.fw for module r8169