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

[经验分享] 【Cluster】02、LVS基础

[复制链接]

尚未签到

发表于 2019-1-4 10:03:37 | 显示全部楼层 |阅读模式
  

  

  一、LVS简介

1、LVS
  LVS:Linux Virtual Server
  作者:章文嵩
  也被称作layer4 router/layer4 switch
  根据目标地址和端口作出转发与否决策,根据调度方法作出转发至哪一个后端服务器的决策
  

  2、组成部分
  ipvs/ipvsadm
  ipvs:
     是框架,需要依赖于规则;工作于内核中,是真正实现将用户请求转发功能的组件,ipvs工作于netfilter的INPUT链接,
  ipvs打破了netfilter的工作模式,所以ipvs和netfilter的过滤功能不应该同时使用

  

  ipvsadm:
  用于在ipvs上定义集群服务,同时也得定义此集群服务对应于有哪些后端主机可用
  

  支持协议:TCP,UDP,SCTP,AH,ESP,AH_ESP
  

3、LVS中的常用术语约定
  Host:
  Director:调度器
  Real Server:RS,后端正在提供服务的的主机
  IP:

  Client:CIP,用户的ip
  Directory Virtual IP:VIP;调度器上对外向客户公布的IP,可以转移
   Real IP:RIP;后端真正提供服务的主机通信的ip
  Directory IP:DIP;调度器上与RIP通信的ip
二、LVS的类型
  NAT:相当于多目标的iptables的DNAT
  DR:direct routing
  TUN:tunneling
  FULLNAT:fullnat
  原生不支持,需要向内核打补丁,重新编译
  

  1、NAT类型
  架构:

  在一组RS前有一个Director,它们通过Swith相连接,这些RS提供相同的网络服务、相同的内容,即不管请求被发送到哪一台RS,执行结果都一样。服务的内容可以复制到每台服务器的本地硬盘上,也可以通过文件系统(如NFS)共享,也可以通过一个分布式文件系统来提供

  

  工作原理:类似于iptables的DNAT,但支持多目标转发
  用户通过VIP访问网络服务时,请求报文达到Director,Director根据调度方法(算法)从一组RS中选出一台服务器,将请求报文的目标地址改写成选定RIP,目标端口改写成选定RS的相应端口,当来自RS的响应报文经过Direcctor时,调度器将报文的源地址和源端口改为VIP和相应的端口,再把报文发给用户。
架构特性:

  1)RRIP应该为私有地址,各RS的网关必须指向DIP
  2)请求和响应报文都经由Director转发,高负载场景中,Director易成为系统瓶颈
  3)支持端口映射
  4)RS可使用任意类型OS
  5)RS的RIP必须与DIP在同一网络
  6)服务器集群的结构对用户而言是透明的,用户所看到的只是在Director上提供服务
  

  NAT类型适用于并发不是特别高场景中,RS 10台以内


  2、DR类型 (Direct Routing)
  直接路由,通过MAC地址转发
  大多数Internet服务都有这样的特性:请求报文较短而响应报文往往包含大量的数据。
  如果能将请求和响应分开处理,即Director只负责调度请求,而响应直接返回给客户,这将极大第提高整个集群系统的吞吐量。
  架构:

  工作原理

  Director在实现转发时不修改请求报文IP首部,而是通过直接封装MAC首部完成转发。目标MAC是Director根据调度算法选定的RS的MAC地址


架构特性:
  1)VIP被Director和RS组共享
  2)让前端路由将请求发往VIP时,只能发往Director上的VIP
  解决方案:
  静态绑定:在前端路由直接将VIP对应的目标MAC地址静态配置为Director的MAC地址              此方法不实用:
  未必有路由器的配置权限
  Director调用时静态地址绑定将难以适用
  arptables:在各RS上,通过arptables规则拒绝其响应VIP的ARP广播请求(不常用)
  内核参数:在各RS上修改内核参数,并结合地址的配置方式实现拒绝响应VIP的ARP广播请求(将RS上的VIP配置为lo接口的别名,限制linux仅对对应接口响应)
  3)RS的RIP可以使用私有IP,此时也可以使用公网IP,此时可以通过互联网直接对此RS发起管理操作

  4)Director只负责调度请求报文,而响应报文直接返回给用户,请求报文必须经由Director调度,但响应报文必须不经过Director调度
     5)各RIP必须DIP在同一物理网段中(不能有路由器分隔,广播报文要能到达),最好在同一网络中
  6)不支持端口映射
  7)RS可以使用大多数的OS
  8)RS的网关一定不能指向Director
  3、lvs-tun类型

  扩展的dr类型,跨互联网

  工作原理:

  不修改请求报文IP首部,而是通过IP隧道机制在原有的IP报文之外再封装IP首部,经由互联网把请求报文转发给选定的RS
  

  内层IP首部CIP,VIP

  外层IIP首部DIP,RIP
  

  架构特性:
  1)RIP,DIP(可以不是),VIP都必须是公网IP
  2)RS的网关不可能指向DIP;RS和Directory不在同一个地理位置
  3)请求报文由Director分发,但响应报文直接由RS响应给Client
  4)不支持端口映射
  5)RS的OS必须支持IP隧道技术
  


  4、FULLNAT类型
工作原理:
    通过修改请求报文的源地址为DIP,目标地址为RIP来实现转发,对于响应报文而言,修改源地址为VIP,目标地址为CIP来实现转发
架构特性:
  1)RIP,DIP可以使用私有地址

  2)RIP,DIP可以不在同一网段中,且RS的网关未必需要指向Director
  3) 支持端口映射
  4)RS的OS可以使用任意类型
  5)请求报文经由Director,响应报文经由Director


三、LVS Scheduler
  LVS的调度方法
  1、静态方法
  仅根据算法本身实现调度起点公平

  RR:round robin           轮询/轮叫/轮调/轮流
  WRR:weighted round-robin     加权轮询
  DH:Destionation ip Hashing   目标地址哈希,用的不多
  SH:source ip Hashing       源地址哈希,用的不多
SH:Source ip Hashing,源地址哈希
  当请求到达调度器时,调度器会在内存中找一段空间,将请求中的源地址抽取出来,做哈希计算。如果该用户是第一次请求,它会通过算法挑一台后端RS,并将这台RS和用户请求的哈希计算的结果对应起来,保存在哈希表中。所以,当用户请求到达时,会先查这张表。因此,它会将来自同一个地址请求,统统定向至此前选定的RS。这是一种反负载均衡的算法。那这种算法意义何在?会话保持,防止购物车中的信息刷新后没了。
DH:Destination ip Hashing, 目标地址哈希,这里指的是响应报文中的目标地址
    特殊场景中才会用到,比如一个公司有多个入口;为了防止用户的请求是通过第一个防火墙进来,但响应是通过第二个防火墙出去,但防火墙只允许通过它出去的响应报文才能进来,导致用户无法收到响应报文的情况。因此在公司内部搞一个调度器,将用户请求为某目标的。可以增加缓存的命中率,这种场景很少见。
  

  2、动态方法
   根据算法及后端RS当前的负载状况实现调度;结果公平

  LC:Least connection 最少连接
  优先分配给Overhead(负载值)小的RS,相同Overhead就自上而下分配
  Overhead(负载值) = Active*256(活动连接数) + Inactive(非活动连接数)
  WLC:weighted Least connection 加权最少连接(lvs默认使用的算法)
  Overhead = (Active*256+Inactive)/weighted
  SED:Shorted Expection Delay  最短期望延迟
  Overhead=(Active+1)*256/weighted
  NQ:Never Queue  永不排队,第一轮先自上而下分配,第二轮开始计算最少连接
  LBLC:Local-Based Least Connetion  动态方式的DH的算法,用的不多
  它的主要目的跟dh一样,只是dh并不考虑cache server的负载情况,lblc考虑而已。尽管要保证命中的提高,并同样的请求发送给同一个cache server但也要考虑轮询新的连接用一个相对空闲的cache server来响应。
  LBLCR:Replicated LBLC 带复制的LBLC,用的不多
  “带复制的基于局部性最少链接”调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个目标 IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按“最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接”原则从这个集群中选出一台服务器,将该服务器加入。


4、集群Session持久机制
  Session sticky(粘性):
  基于源IP绑定,SH算法,基于cookie绑定
  反均衡,服务器故障时session问题解决不了
  Session Replication Cluster:
  Session复制集群,适用于少数RS(3-5个RS)
  各RS做成多播集群,RS之间以多播方式“复制”各session,从而每个RS会持有所有session
  这个集群缺点在于,后端每台RS都要维护RS数量倍数的会话,RS数量越多,RS的压力就越大。
  

  Session Server:
  使用独立的服务器,专用于共享存储session信息(redis,memcached)
  session server需要高可用
  

  基于cookie而不再是IP做调度:
  用户在访问服务器时,服务器会给客户端发一个瘦cookie,而后将每个cookie和session的对应关系,保存在一个表中。此后客户端请求时,服务器通过追踪客户端提交的cookie来关联它的session。由于LVS工作在4层而不是应用层,因此不支持。因此haproxy和Nginx便有了用武之地。
  

   wlc是lvs的默认调度算法,要考虑session的话,就只能使用SH了。因为lvs工作在四层,所以无法基于cookie做调度。而正因为lvs工作在四层,所以它的连接数不受套接字的限制,才能有那么好的性能。
  

  





运维网声明 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.yunweiku.com/thread-659210-1-1.html 上篇帖子: LVS笔记,(一) 下篇帖子: 集群基础及lvs入门
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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