设为首页 收藏本站
查看: 686|回复: 0

[经验分享] LVS的介绍

[复制链接]

尚未签到

发表于 2019-1-2 11:56:19 | 显示全部楼层 |阅读模式
   集群介绍
什么是集群
集群是一种并行或分布式系统,该系统包括一个互连的整体计算机集合作为一种单一,统一的计算机资源使用。
集群,是指一组互相独立的计算机,利用高速通信网络组成的一个计算机系统,其中的每个节点都是运行自己进程的独立服务器。这些进程可以彼此通信,对网络客户机来说就形成了单一系统,协同起来向用户提供应用程序,系统资源和数据,并以单一系统的模式加以管理。
特点
高性能、低成本、高可扩展性、高可靠性
分类

  •   负载均衡集群(Load balancing clusters)
以提高应用系统的响应能力,尽可能处理更多的访问请求,减少延迟为目标

  •   高可用性集群(High Availablity clusters)
以提高应用系统的可靠性,尽可能减少中断时间为目标,确保服务的连续性

  •   高性能计算集群(High-performance clusters)
  •   网络计算(grid computing)
集群软件及选择

  •   1.  互联网企业常用的集群软件有:lvs,keepalived,haproxy,nginx,apache,heartbeat
互联网企业常用的集群硬件有:F5,Netscaler,Radware

  •   2.  企业运维中集群软硬件选择:
  •   1)  业务重要但是技术薄弱,可以出钱买服务的选择硬件负载均衡设备,多为传统的大型非互联网企业,如银行、证券、金融、汽车公司、制造业公司
  •   2)  对于门户网站来说,软硬件都用,如淘宝、新浪,融资企业会选择硬件集群,如58、赶集
  •   3)  中小型互联网企业选择开源软件,雇佣专门人员维护,如运维网、chinaunix.com
LVS负载均衡集群介绍
lvs介绍
LVS是Linux Virtul Server的简写,意为linux虚拟服务器,是一个虚拟的服务器集群系统,可以在unix/linux平台下实现负载均衡集群功能
IPVS(LVS)发展史:
早在2.2内核的时候ipvs就以系统内核补丁的方式出现
从2.2.23开始ipvs就合并到linux内核的常用版本的内核补丁中了
从2.2.24开始ipvs成为linux官方标准内核的一部分。

ipvs工作在kernel当中,所以平时我们无法直接管理,需要用专门的工具ipvsadm,ipvsadm工作在应用程序层,属于最外层
从上图中我们可以看出lvs是在linux内核中实现的,因此被称为linux虚拟服务器,我们使用该软件的时候不能够直接配置内核中的ipvs,而需要使用专门的管理工具ipvsadm或keepalived。
注意:keepalived是管理lvs的工具而且是直接管理lvs并不通过ipvsadm,

LVS体系结构

  •   负载调度器(load balancer)
  •   服务器地址池(Server pool)
  •   共享存储(shared storage)
负载均衡常用的命名约定
名称

缩写

说明

虚拟IP地址(virtual ip address)
VIP

VIP为Director用于向客户端计算机提供服务的IP地址
真实IP地址(Real Server IP address)
RIP

在集群下面节点使用的ip地址
Director的IP地址(Director Ip address)
DIP

DIrector 用于连接内外网的IP地址
客户端主机IP地址(Client ip Address)
CIP

客户端的ip地址
负载均衡的工作模式

  •   地址转换(NAT模式)
通过网络地址转换,负载调度器会重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器,真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程。调度器需要处理客户端的请求报文和服务器的回应报文
这个过程涉及到地址转换,有两个名词:
DNAT:用户请求的报文,lvs会修改它的目标IP地址
SNAT:真实服务器返回的回应包,lvs会修改它的源IP地址
nat模式最大的问题在于网卡的吞吐量,
NAT模式的特点:
1请求和回应的报文都必须经过LB的重写,然后进行转发
2在LB上配置外网IP地址和内网IP地址,内网IP地址用于和真实服务器通信,
3将DIP设为真实服务器的网关,这样返回报文才会经过LB
4由于接受和返回的报文都经过LB,因此LB的压力会比较大,有可能出现瓶颈
5支持对ip地址和端口的转换
6所有的内部节点只需要配置内网ip地址
注意:在这个过程中LB会记录一个hash表,如果没有hash表的话,一切都乱了
记住两个名词:DNAT、SNAT


  •   IP隧道(TUN模式)
负载调度器把请求报文通过IP隧道(相当于ipip或ipsec)转发至真实服务器,而真实服务器将回应报文直接返回给客户。调度器只处理客户端的请求包报文
工作流程:
   1、他的连接调度和管理与NAT一样,只是报文的转发方法不同。
  2、LB根据各个RS的负载情况或者连接数的多少,动态的选择RS
  3、将原请求报文封装到另一个报文中(这个事直接封装而不是修改源ip或者目的ip),再将封装后的报文发给RS
  4、RS解封报文,获得原来目标地址为vip的报文
  5、RS发现vip地址被配置在本地的ip隧道设备上,所以就处理这个请求了
  6、然后,根据路由表将响应报文发给客户



  •   直接路由(DR模式)
通过改写请求报文的MAC地址,将请求发送给真实服务器,而真实服务器将回应报文直接返回给客户端。调度器只处理客户端的请求包报文,类似TUN模式,但是没有ip隧道的开销,对集群中的真实服务器也没必要支持IP隧道协议
工作流程:
      1、报文转发方法和NAT、TUN不同,DR将报文直接路由给RS,
   2、根据各个RS的负载情况、连接数多少,动态选择RS
   3、不修改目的ip和目的端口,也不封装ip报文,而是将请求的数据帧的MAC地址修改为RS的MAC地址。
   4、然后将修改后的数据帧在局域网上发送,
   5、因为请求的数据帧的MAC地址是选中的RS的MAC地址,所以RS肯定可以收到该数据帧。
   6、从中可以获得该请求的ip报文,
   7、当RS发现报文的目标地址是在本地的网络设备上,RS处理这个报文。
   8、然后RS根据路由表将处理结果直接发给客户
DR特点:
1、DR修改的报文的目的MAC地址,不是封装MAC地址,源地址目标地址不变
2、处理结果由RS直接发送给客户,因此可以提高集群性能
3、DR通过改写MAC地址实现转发,因此所有RS和LB必须在同一个LAN网内
4、需要注意RS节点的VIP绑定和ARP抑制问题
5、RS节点的默认网关不是DIP,而是出口路由的ip,因为每个RS都配置公网ip
只要能出外网就可以,不一定非得配置外网ip,这点和TUN一样
6DR只改写目的MAC地址,因此,不能实现端口的改写
7、DR模式下的LB只能是linux或unix,不能使windows,但是RS可以是windows
8、总体讲,DR模式效率高,但配置复杂,访问量不是很大的情况下可以用haproxy或nginx替代
9、直接对外的业务,如web服务,最好使用公网,而对内的服务,如MySQL存储服务,最好使用内网

补充:最近淘宝开源了一个方法叫FULLNAT,传统的NAT只是将目标IP地址进程装换,而fullnat是将目标地址和源地址都进行转换


LVS调度的算法
调度算法决定了如何在这些集群节点之间分布工作负荷

  •   固定调度算法:rr wrr dh sh
  •   动态调度算法:wlc lc lblclblcr SED NQ(后两种官方站点没提到)
算法
说明
rr
轮询调度(Round  Robin),调度器通过“轮询”调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。
wrr
加权轮询(Weighted  Round Robin),调度器通过“加权轮询”调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器能处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
dh
目的地址哈希调度(destination  hashing),以目的地址为关键字查找一个静态hash表来获得需要的RS
sh
源地址哈希调度(source  hashing)以源地址为关键字查找一个静态hash表来获得需要的RS
wlc
加权最少链接数调度(Weighted  Least Connections)把权重和连接数比值最小的 RS 作为下一个RS
lc
最少链接数调度(Least Connections)IPVS表存储了所有活动的连接,把新的连接请求发送到当前连接数最少的RS上
lblc
基于地址的最小连接数调度(Locality-Based Least Connections) 将来自同一目的地址的请求分配给同一台RS,如果这台服务器尚未慢负荷,否则分配给连接数最小的RS,并以他为下次分配的首先考虑
lblcr
基于地址带重复最小连接数调度(Locality-Based Least Connections with Replication) 对于某一目的地址,对应有一个RS子集,对此地址请求,为他分配自己中连接数最小的RS,如果子集中所有服务器均已满负荷,则从集群中选择一个连接数最小的服务器,将他加入到此子集并分配连接,若一定之间内未做任何修改,则将子集中负载最大的节点从子集中删除
SED
最短的期望的延迟(Shortest Expected Delay Scheduling SED)基于wlc算法。这个必须举例来说了
ABC三台机器分别权重123  ,连接数也分别是123。那么如果使用WLC算法的话一个新请求进入时它可能会分给ABC中的任意一个。使用sed算法后会进行这样一个运算
A:(1+1)/1
B:(1+2)/2
C:(1+3)/3
根据运算结果,把连接交给C
NQ
最少队列调度(Never Queue Scheduling NQ)
无需队列。如果有台realserver的连接数=0就直接分配过去,不需要在进行sed运算
3). 调度算法的生产环境选型:
a)  一般的网络服务,如http、mail、mysql等,常用的调度算法是:rr、wrr、wlc
b)  LBLC(基于局部性的最少连接)和LBLCR(带复制的结余局部性最少连接)主要用于缓存服务,如web cache、db cache
c)  sh、dh可以结合使用在防火墙集群中,他们可以保证整个系统的唯一出入口
d)  最短预期延时调度SED和不排队调度NQ主要是针对处理时间较长的网络服务
实际工作中要根据实际需求选。
总结
1、vip一般配置在lo上,掩码255.255.255.255
2、RS最好有一个外网ip和一个内网ip,外网ip用户给客户发送响应报文,内网ip用户连接数据库、nfs等设备
   3、理论上只要RS能出网就可以,不用非得配置外网ip。流量小的话也可以使用nat
   4、TUN模式下LB只处理请求报文,因此处理效率可以大幅度提高,但是LB需要封装请求报文,所以会消耗一定的系统资源,TUN适合WAN/LAN
   5、TUN模式在LAN环境下的转发不如DR效率高,有的系统还要考虑是否支持ip隧道
   6、RS还有绑定vip,配置复杂
   7、LAN环境大多采用DR模式,WAN环境可以采用TUN模式,但是WAN环境下更多的采用DNS+haproxy/nginx等代理取代,因此,TUN模式用的很少
   8、直接对外的业务,如web服务,最好使用公网,而对内的服务,如MySQL存储服务,最好使用内网
  为什么LB和RS必须在同一个局域网内?
  因为DR模式是基于Mac地址的,所以必须在同一网段内需要在RS上绑定VIP
  
  问题:如果有多个LB,那么RS上怎么绑定VIP呢?
     如果有多个VIP,我们在RS上可以使用lo1、lo2的方式绑定VIP
  目前使用最广泛的,RS会直接将处理结果返回给用户,而不经过lvs
     降低了lvs压力
  即使vip绑定到lo网卡口上也要设置抑制ARP回应。lo绑定vip时子网掩码设为32位的,
  特别提示:DR模式是互联网使用最多的模式
  
  附:淘宝开源方法
FULLNAT模式:
  背景:
      lvs当前采用的主要是DR和NAT模式,但这两种模式都要求RS和LB在同一个局域网中,导致部署成本过高,TUN模式虽然可以跨VLAN但是RS上需要部署ip隧道模块,还要联通外网,比较复杂,不易维护
  FULLNAT模式:
      报文进站时,除了做DNAT外还做SNAT(将用户的ip地址改为LB内网IP地址,)从而实现RS和LB之间可以跨VLAN通讯,RS只需要连接内网即可
  FULLNAT工作模式:
      1、进站时目标ip改为RIP,源地址改为LOCAL IP
      2,出站时目标ip改为CIP,源地址改为VIP
      性能上和传统的nat比,转发量下架10%。
      FULLNAT的重点是session的管理,
      出站的时候可以交给多个LB进行处理,因此各个LB的压力不会很大,但是这中间要解决session的共享的问题
  思路:
      1、每个session维护9元组,caddr、vaddr、laddr、daddr、增加了localaddress
      2、逻辑上采用两个session表
  
  创建in_idx和out_idx(struct ip_vs_conn_idx)结构体变量,2个index指向同一个session
  1、out to in:in_dex结构体变量,hash key为caddr/vaddr
  2、in to out:out_idx机构提变量,hash key 为daddr/laddr
  
  

  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-658628-1-1.html 上篇帖子: LVS的dr模型的工作原理 下篇帖子: LVS:Linux虚拟服务器
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表