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

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

hot3.png

     首先,了解下LVS的工作原理,LVS有三种工作模式,分别是NAT, TUN和DR,调度算法上LVS有十种调度算法,分别是rr, wrr, lc, wlc, lblc, lblcr, dh, sh, sed, nq,工作模式和调度算法可以根据自己需求进行设置。

LVS三种工作模式:

  1. NAT 地址转换
    原理:就是把客户端发来的数据包的IP头的目的地址,在负载均衡器上换成其中一台RS的IP地址,并发至此RS来处理,RS处理完成后把数据交给经过负载均衡器,负载均衡器再把数据包的原IP地址改为自己的IP,将目的地址改为客户端IP地址即可。期间,无论是进来的流量,还是出去的流量,都必须经过负载均衡器。优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,只有负载均衡器需要一个合法的IP地址。
    缺点:扩展性有限。当服务器节点(普通PC服务器)增长过多时,负载均衡器将成为整个系统的瓶颈,因为所有一的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时,大量的数据包都交汇在负载均衡器那,速度就会变慢。
     
  2. TUN 隧道
    原理:隧道模式就是,把客户端发来的数据包,封装一个新的IP头标记(仅目的IP)发给RS,RS收到后,先把数据包的头解开,还原数据包,处理后接返回给客户端,不需要再经过负载均衡器。注意,由于RS需要对负载均衡器发过来的数据包进行还原,所以说必须支持IP Tunneling协议。所以,在RS的内核中,必须编译支持IPTUNNEL这个选项。
    优点:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,就能处理很巨大的请求量,这种方式,一台负载均衡器能够为很多RS进行分发。而且跑在公网上就能进行不同地域的分发。
    缺点:隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持IP Tunneling(IP Encapsulation)协议,服务器可能只局限在部分Linux系统上。
     
  3. DR 直接路由
    原理:负载均衡器和RS都使用同一个IP对外服务。但只有DR对ARP请求(根据IP获取Mac地址请求)进行响应,所有RS对本身这个IP的ARP请求保持静默。也就是说,网关会把对这个服务IP的请求全部定向给DR,而DR收到数据包后根据调度算法,找出对应的RS,把目的MAC地址改为RS的MAC(因为IP一致)并将请求分发给这台RS。这时RS收到这个数据包,处理完成之后,由于IP一致,可以直接将数据返给客户,则等于直接从客户端收到这个数据包无异,处理后直接返回给客户端。由于负载均衡器要对二层包头进行改换,所以负载均衡器和RS之间必须在一个广播域,也可以简单的理解为在同一台交换机上。
    优点:和TUN(隧道模式)一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端。与TUN相比,DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器。
    缺点:要求负载均衡器的网卡必须与物理网卡在一个物理段上。

     三种工作模式中,NAT限制最小,同时效率也是最低的,TUN和DR两种效率比较高,DR效率最高,不过DR要求在局域网中,一般推荐使用DR模式。

LVS提供和十种调度算法:

  1. rr 轮询(Round Robin)
    调度器通过“轮询”调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。
     
  2. wrr 加权轮询(Weighted Round Robin)
    调度器通过“ 加权轮询”调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
     
  3. lc 最少链接(Least Connections)
    调度器通过“最少连接”调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用"最小连接"调度算法可以较好地均衡负载。
     
  4. wlc 加权最少链接(Weighted Least Connections)
    在集群系统中的服务器性能差异较大的情况下,调度器采用“加权最少链接”调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
     
  5. lblc 于局部性的最少链接(Locality-Based Least Connections)
    “基于局部性的最少链接” 调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用"最少链接"的原则选出一个可用的服务器,将请求发送到该服务器。
     
  6. lblcr 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication)
    “带复制的基于局部性最少链接”调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按"最小连接"原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器,若服务器超载;则按"最小连接"原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。
     
  7. dh 目标地址散列(Destination Hashing)
    “目标地址散列”调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
     
  8. sh 源地址散列(Source Hashing)
    “源地址散列”调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
     
  9. sed 最短期望延迟 (Shortest Expected Delay)
    sed算法基于wlc算法,只是在wlc上做了微调,(活动连接数 + 1)x 256 / 权重。
     
  10. nq 永不排队(never queue)
    无需队列,如果有台realserver的连接数=0就直接分配过去,不需要在进行sed运算。

管理集群服务:

  1. 添加或者修改配置
    -A|E -t|u|f service-address [-s scheduler]
    -t:tcp协议的集群服务 -u:udp协议的集群  -f:FWM:防火墙标记
    -s: rrr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq
    ipvsadm -A t 192.168.1.100:80  –s  rr
    ipvsadm -E t 192.168.1.100:80  –s  rr
     
  2. 删除配置
    -D -t|u|f service-address
    ipvsadm -D -t 192.168.100:80
     
  3. 清除配置
    ipvsadm -C
     
  4. 保存配置
    ipvsadm -S > file
     
  5. 载入配置
    ipvsadm -R < file
     
  6. 查看配置
    ipvsadm -L

管理集群服务中的RS:

  1. 添加或者修改RS
    -a|e virtual-service -r server-address   [-g|i|m] [-w weight] [-x upper] [-y lower]
    -g: DR  -i: TUN  -m: NAT
    ipvsadm -a -t 192.168.1.100 -r 192.168.1.101 -g
    ipvsadm -a -t 192.168.1.100 -r 192.168.1.102 -g
     
  2. 删除RS
    -d -t|u|f service-address -r server-address
    ipvsadm -d -t 192.168.1.100 -r 192.168.1.101

搭建过程:

     首先,我们选择DR工作模式和rr调度算法。Linux内核从2.6.x起已经支持LVS,所以只需要安装ipvsadm管理即可,具体步骤如下:

  1. 安装配置ipvsadm
    apt-get install ipvsadm
    dpkg–reconfigure ipvsadm
     
  2. 创建vip进行广播
    vip = 192.168.100 (用于广播)
    dip = 192.168.101 (用于实现HA)
    rip = 192.168.1.102
    ifconfig eth0:0 192.168.1.100 netmask 255.255.255.0
    // 配置虚拟外网网卡,并设置vip和netmask,正常对外工作
     
  3. 创建集群
    ipvsadm -A -t 192.168.1.100:80  –s  rr
    ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.102:80 -g
    ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.103:80 -g
    ipvsadm -S
     
  4. 修改sysctl.conf
    net.ipv4.ip_forward=0
    net.ipv4.conf.all.send_redirects=1
    net.ipv4.conf.default.send_redirects=1
    net.ipv4.conf.eth0.send_redirects=1
    sysctl -p 生效
     
  5. RS配置
    sudo ifconfig lo:0 192.168.1.100 netmask 255.255.255.255
    // 配置虚拟网卡,网卡必须是lo,netmask必须为255.255.255.255,否则会响应客户端的arp 
    修改/etc/sysctl.conf
    // DR的原理就是限制RS ARP响应,ARP用到就是广播
    net.ipv4.conf.all.arp_ignore=1       // 只对自己网卡地址做ARP响应
    net.ipv4.conf.all.arp_announce=2  // 只携带外网网卡地址作为原地址发送ARP请求
    sysctl –p 生效

转载于:https://my.oschina.net/u/2950586/blog/779779

你可能感兴趣的文章
datepicker
查看>>
我的友情链接
查看>>
如何在FalconStor中为主机分配磁盘
查看>>
Linux常用命令
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
Java AES算法和UNIX下openssl之间的加解密
查看>>
我的友情链接
查看>>
基于vCenter/ESXi平台CentOS 6.8系统虚拟机Oracle 12c RAC双节点数据库集群搭建
查看>>
HashMap要点
查看>>
CentOS 7输入startx无法启动图形化界面
查看>>
#51CTO学院四周年# 终于在这里遇到你
查看>>
2018-4-10
查看>>
Linux配置raid1+0阵列磁盘
查看>>
百度首次公布云业务收入,同比增长超100%,跻身国内第三
查看>>
iOS之UI--CAShapeLayer
查看>>
Java学习笔记 1—命名规则、数据类型、运算符
查看>>
7个python案例中的数据思维
查看>>
蛋花花分析人工智能就业前景究竟如何
查看>>
FusionCharts入门教程,使用指南
查看>>