LVS总结

LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。

LVS为了在不同场景中使用而提供了4种实现模型: 分别为
    NAT         -m 
    DR          -g 
    Tunnel      -i 
    FULLNAT     -b 
   
LVS的用到几个IP缩写
    CIP: 用户的IP
    VIP: LVS虚拟的IP,用于用户访问
    DIP: LVS Director调度器自已的IP
    RID: Real server 的IP
    LIP: LVS Director调度器指定的local address,FULLNAT模式下专用的

NAT模型工作流程
    1、客户端请求VIP(Virtual IP Address)
    2、Director接受到请求, 根据连接调度算法从一组真实服务器中选出一台服务器, 将报文的目标地址VIP(Virtual IP Address)改写成选定服务器的地址,报文的目标端口改写成选定服务器的相应端口,最后将修改后的报文发送给选出的服务器。
    3、调度器在连接Hash 表中记录这个连接,当这个连接的下一个报文到达时,从连接Hash表中可以得 到原选定服务器的地址和端口,进行同样的改写操作,并将报文传给原选定的服务 器。当来自真实服务器的响应报文经过调度器时,调度器将报文的源地址和源端口改为Virtual IP Address和相应的端口,再把报文发给用户

不同的报文会使得连接处于不同的状态,不同的状态有不同的超时值。在TCP 连接中,根据标准的TCP有限状态机进行状态迁移;在UDP中,只设置一个UDP状态。
不同状态的超时值是可以设置的,在缺省情况下:
    SYN状态的超 时为1分钟
    ESTABLISHED状态的超时为15分钟
    FIN状态的超时为1分钟
    UDP状态的超时为5分钟
    当连接终止或超时,调度器将这个连接从 连接Hash表中删除。

实现NAT模型有几点需要注意的:
    1、RS和Director可以不在同一IP网段中
    2、可以实现端口映射
    3、请求报文和响应报文都必须经过Director
   
    在一些网络服务中,它们将IP地址或者端口号在报文的数据中传送,若只对报文头的IP地址和端口号作转换,这样就会出现不一致性,服务会中断。 所以,针对这些服务,需要编写相应的应用模块来转换报文数据中的IP地址或者端口号。现已经知道有这个问题的网络服务有FTP、IRC、H.323、 CUSeeMe、Real Audio、Real Video、Vxtreme/Vosiac、VDOLive、VIVOActive、True Speech、RSTP、PPTP、StreamWorks、NTT AudioLink、NTT SoftwareVision、Yamaha MIDPlug、iChat Pager、Quake和Diablo。

DR模型工作流程
    1、客户端请求VIP
    2、Director接收到请求报文,不修改也不封装IP报文,而是将数据帧的MAC地址改为选出服务器的 MAC地址,再将修改后的数据帧在与服务器组的局域网上发送。因为数据帧的MAC地址是选出的服务器,所以交换机会将数据帧发送给选出的服务器,服务器从中可以获得该IP报文。
    3、RIP接收到DIP发过来的报文后,发现报文的目标地址VIP是在本地的网络设备上,服务器处理这个报文,然后根据路由表将响应报文直接返回给客户。

因为VIP分别存在于Director和RS,造成IP冲突,解决方法:
    1、网络设备中设置VIP地址和DIrector的MAC地址进行绑定
    2、Linux系统中有一个软件可以实现对ARP广播进行过滤, arptables
    3、可以修改内核参数来实现, arp_ignore, arp_announce

实现DR模型需要注意的:
    1、RS和Director必须要在同一个二层网段中,中间没有隔有路由器(MAC地址无法穿越三层设备)
    2、请求报文必须经过Director, 但是响应报文一定不能通过Director
    3、不能实现端口映射

三种IP负载均衡技术的优缺点归纳在下表中:
                    VS/NAT          VS/TUN          VS/DR
Server              any             Tunneling       Non-arp device
server network      private         LAN/WAN         LAN
server number       low (10~20)     High (100)      High (100)
server gateway      load balancer   own router      Own router

以上三种方法所能支持最大服务器数目的估计是假设调度器使用100M网卡,调度器的硬件配置与后端服务器的硬件配置相同,而且是对一般Web服 务。使用更高的硬件配置(如千兆网卡和更快的处理器)作为调度器,调度器所能调度的服务器数量会相应增加。当应用不同时,服务器的数目也会相应地改变。所 以,以上数据估计主要是为三种方法的伸缩性进行量化比较。

FULLNAT工作流程
    1、引入LIP(local address),可以配置多个,也可以使用DIP
    2、客户端请求VIP
    3、Director接受到请求,根据调度算法得出转发的RS, 将CIP修改为LIP, VIP修改为对应RIP, 转发给RS
    4、RS接受到请求后, 响应请求给LIP, Director将响应报文RIP改为VIP, LIP改为CIP, 响应给用户
   
实现FULLNAT模型需要注意的:
    1、请求报文和响应报都要通过Director
    2、RIP接收到的请求报文的源地址为LIP,目标地址为RIP
    3、支持端口映射
    4、为了保证应用透明性,通过tcp option传递client ip给RealServer(TOA).要RS读取数据包中的tcp option来记录client ip
    5、和NAT比,正常转发性能下降<10%

LVS的调度算法

IPVS在内核中的负载均衡调度是以连接为粒度的。在HTTP协议(非持久)中,每个对象从WEB服务器上获取都需要建立一个TCP连接,同一用户 的不同请求会被调度到不同的服务器上,所以这种细粒度的调度在一定程度上可以避免单个用户访问的突发性引起服务器间的负载不平衡。

RR:Round Robin, 轮询 将用户请求轮询到各个RS上
    WRR: Weighted Round Robin, 加权轮轮询, 根据每一台RS的权重将用户请求轮询分发到各个RS上
    SH: Source Hash, 源地址哈希, 将同一客户端的请求转发到同一个RS上
    DH: Destination Hash, 将同一类型的请求转发到同一个RS上

LC:least connections, 最小连接. 公式: Active*256+Inactive
    WLC:Weighted Least Connections, 加权最小连接. 公式: (Active*256+Inactive)/Weighted
    SED:Shortest Expection Delay, 最短延迟预期. 公式: (Active+1)*256/Weighted
    NQ:Never Queue, 永不排队, 对sed算法的改进
    LBLC:Locality-Based Least-Connections, 基于局部的最少链接, 即为动态的dh算法
    LBLCR:locality-based least-connections replication, 带复制功能的lblc

Hash表
    LVS的调优建议将hash table的值设置为不低于并发连接数。例如,并发连接数为200,Persistent时间为200S,那么hash桶的个数应设置为尽可能接近200x200=40000,2的15次方为32768就可以了。当ip_vs_conn_tab_bits=20 时,哈希表的的大小(条目)为 pow(2,20),即 1048576,对于64位系统,IPVS占用大概16M内存,可以通过demsg看到:IPVS: Connection hash table configured (size=1048576, memory=16384Kbytes)。对于现在的服务器来说,这样的内存占用不是问题。所以直接设置为20即可。

关于最大“连接数限制”:这里的hash桶的个数,并不是LVS最大连接数限制。LVS使用哈希链表解决“哈希冲突”,当连接数大于这个值时,必然会出现哈稀冲突,会(稍微)降低性能,但是并不对在功能上对LVS造成影响。

关于连接占用内存:
每条记录用一个ip_vs_conn结构表示,这个结构使用了Linux里面的典型数据结构struct list_head构造双向链表,使得所有的记录以链表形式链接起来。
* struct ip_vs_conn 里面的其他元素就是每个连接的具体信息,在32位系统上为128字节,64位系统上为192字节 。
* struct list_head 在32位系统上为8字节,在64位系统上为16字节。
    所以,hash表里面的每条记录(每个连接),在32位系统上占据136字节内存,在64位系统上占用208字节。

调整 ip_vs_conn_tab_bits的方法

ipvsadm -l

如果显示IP Virtual Server version 1.2.1 (size=4096),则ip_vs conn_tab_bits为默认的12

在/etc/modprobe.d/目录下添加文件ip_vs.conf,内容为:

options ip_vs conn_tab_bits=20
modprobe -r ip_vs
modprobe ip_vs

重新查看
IP Virtual Server version 1.2.1 (size=1048576)

假如没有变化,则需要重新调内核整编译选项,重新编译内核。

参考:
http://zh.linuxvirtualserver.org/node/2580
http://zh.linuxvirtualserver.org/files/LVS%E6%89%8B%E5%86%8C%E4%B8%AD%E6%96%87%E5%8A%A0%E7%9B%AE%E5%BD%95%E7%89%88.doc

时间: 2024-10-05 23:50:07

LVS总结的相关文章

使用LVS实现负载均衡原理及安装配置详解

转:http://www.cnblogs.com/liwei0526vip/p/6370103.html 使用LVS实现负载均衡原理及安装配置详解 负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群.常用的负载均衡开源软件有nginx.lvs.haproxy,商业的硬件负载均衡设备F5.Netscale.这里主要是学习 LVS 并对其进行了详细的总结记录. 一.负载均衡LVS基本介绍 LB集群的架构和原理很简单,就是当用户的请求过来时,会直接分发到Director

heartbeat+LVS

####heartbeat简介####Heartbeat 项目是 Linux-HA 工程的一个组成部分,它实现了一个高可用集群系统.心跳服务和集群通信是高可用集群的两个关键组件,在 Heartbeat 项目里,由 heartbeat 模块实现了这两个功能.这个集群方案是利用第三方软件搭建的,要比RedHat自带的集群软件在功能上简化一些,但是搭建起来非常的方便.而且是一种快速解决方案.heartbeat的高可用集群采用的通信方式是udp协议和串口通信,而且heartbeat插件技术实现了集群间的

LVS集群之工作原理

  首先我们要了解LVS的工作机制: LVS里Director本身不响应请求,只是接受转发请求到后方,Realservers才是后台真正响应请求. LVS 工作原理基本类似DNAT,又不完全相像,它是一种四层交换,默认情况下通过用户请求的地址和端口来判断用户的请求,从而转发到后台真正提供服务的主机,而判断这种请求的是通过套接字来实现,所以四层就可以实现. 而且这个转发的过程对用户而言是透明的(简单的讲,就是用户访问DR的IP,而DR转发给RSS,而用户不知道这个过程) LVS的工作模式: 1.D

centos 7 LVS+keepalived实现nginx的高可用以及负载均衡

一.准备工作:关闭防火墙,selinux以免对实验结果造成影响,准备虚机,设置IP地址.主机名 hostname:Nginx01 IP:192.168.1.87 Role:Nginx Server hostname:Nginx02 IP: 192.168.1.88 Role:Nginx Server hostname:LVS01 IP: 192.168.1.89 Role:LVS+Keepalived hostname:LVS02 IP: 192.168.1.90 Role:LVS+Keepal

LB负载均衡集群之LVS(DR)

配置DR LVS工具ipvsadm 环境说明 四台机器: Director负载均衡调度器,网卡(公网IP,实验用nat)eth0:192.168.134.140 Vip:etho:0:192.168.134.150 Real server1真实机器.真实服务器,网卡(公网IP,实验用nat)eth0:192.168.134.137 Real server2真实机器.真实服务器,网卡(公网IP,实验用nat)eth0:192.168.134.138 Client 客户端 网卡(公网IP,实验用na

LB负载均衡集群之LVS(NAT)

NAT模式 调度过程IP包详细图: 原理请看:<LVS算法转载> 实验准备 三台机器 一台为负载均衡调度器director,两张网卡,一个外网(客户请求)192.168.134.141,一个内网192.168.143.136 两台真实服务器real server,一张网卡,内网192.168.143.130和192.168.143.134 真实服务器的网关设置为负载均衡器的内网IP 192.168.143.136 实验环境为虚拟机,所以先用nat模式下载需要的服务ipvsadm,nginx,然

LB(Load balance)负载均衡集群--{LVS-[NAT+DR]单实例实验+LVS+keeplived实验} 菜鸟入门级

LB(Load balance)负载均衡集群 LVS-[NAT+DR]单实例实验 LVS+keeplived实验 LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统. 逻辑可分为: 1调度层 (Director):它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的. 2[服务器池(server pool)/集群层(Real server)]:是一组真正执行客

LVS高性能集群

LVS高性能集群  ====负载均衡硬件设备 1.什么是LVS?   linux virtual service,linux虚拟服务,使用多台服务器一起工作来提高服务的访问和处理性能   2.lvs的工作模式   (1)nat:通过地址转换访问服务   (2)tun:通过IP隧道访问服务   (3)dr:直接调度访问服务  ====直接路由调度 1.轮寻    2.加权,根据硬件的好坏来设置权值   3.最小连接4. 加权最小连接5. 基于地址的最小连接调度6. 目标7. 源        3.

LVS负载均衡之持久性连接介绍(会话篇)

在实际生产环境中,往往需要根据业务应用场景来设置lvs的会话超时时间以及防session连接丢失的问题提,如在业务支付环节,如若session丢失会导致重复扣款问题,严重影响到安全性,本小节解将会讲到关于lvs持久性连接问题 一.lvs负载均衡持久连接介绍: 引子(案例) 对于电子商务网站来说,用户在挑选商品的时候使用的是80端口来浏览的,当付款的时候则是通过443的ssl加密的方式,当然当用户挑选完商品付款 的时候,我们当然不希望https的443跳转到另外一台REAL SERVER上,很显然

LVS集群之十种调度算法及负载均衡(配置篇)

架构图: 1.安装keepalived keepalived起初是为LVS设计的,专门用来监控集群系统中各个服务节点的状态,后来又加入了VRRP的功能,VRRP是Virtual Router Redundancy Protocol(虚拟路由器冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由出现的单点故障问题,它能够保证网络的不间断.稳定的运行.所以,keepalived一方面具有服务器健康检测功能,另一方面也具有HA cluster功能. [email protected]:~$ apt