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

[经验分享] lvs集群类型及其工作原理详细介绍

[复制链接]

尚未签到

发表于 2019-1-5 14:35:02 | 显示全部楼层 |阅读模式
简介
  在lvs集群中,集群作为一个整体,通常使用负载均衡器(Director),也称调度器,分发器,作为与外部通信的中介,因此,把如何将数据从外部请求经由负载均衡器转发至内部真实服务器的方式作为对lvs集群分类的依据。目前lvs数据转发主要有四种方式:

  •   lvs-nat:修改请求报文的目标IP,相当于多目标IP的DNAT;
  •   lvs-dr:操纵封装新的MAC地址(默认);
  •   lvs-tun:在原请求IP报文之外新加一个IP首部,ip隧道;
  •   lvs-fullnat:同时修改请求报文的源和目标IP;
  所以在负载均衡器上可以实现多种转发方式,但一般在实际使用中我们只选择其中一种。下面分别详细介绍这几种类型。
lvs-nat:网络地址转换
  它是相当于多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发。

  ①、当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP;
  ②、PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链;
  ③、IPVS比对数据包请求的服务是否为集群服务,若是,修改数据包的目标IP地址为后端服务器IP,然后将数据包发至POSTROUTING链。 此时报文的源IP为CIP,目标IP为RIP;
  ④、POSTROUTING链通过选路,将数据包发送给Real Server;
  ⑤、Real Server比对发现目标为自己的IP,开始构建响应报文发回给Director Server。 此时报文的源IP为RIP,目标IP为CIP;
  ⑥、Director Server在响应客户端前,此时会将源IP地址修改为自己的VIP地址,然后响应给客户端。 此时报文的源IP为VIP,目标IP为CIP。
  详细流程图如下:

  lvs-nat有如下几个要点

  •   RIP和DIP必须在同一个IP网络,且应该使用私网地址,并且RS的网关要指向DIP;
  •   请求报文和响应报文都必须经由Director转发,Director容易成为系统瓶颈;
  •   支持端口映射,可修改请求报文的目标PORT;
  •   VS必须是Linux系统,RS可以是任意系统。
lvs-dr:直接路由
  它是通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变。

  ①、当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP;
  ②、PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链;
  ③、IPVS比对数据包请求的服务是否为集群服务,若是,将请求报文中的源MAC地址修改为DIP的MAC地址,将目标MAC地址修改RIP的MAC地址,然后将数据包发至POSTROUTING链。 此时的源IP和目的IP均未修改,仅修改了源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址;
  ④、由于DS和RS在同一个网络中,所以是通过二层来传输。POSTROUTING链检查目标MAC地址为RIP的MAC地址,那么此时数据包将会发至Real Server;
  ⑤、RS发现请求报文的MAC地址是自己的MAC地址,就接收此报文。处理完成之后,将响应报文通过lo接口传送给eth0网卡然后向外发出。 此时的源IP地址为VIP,目标IP为CIP;
  ⑥、响应报文最终送达至客户端
  详细流程图如下:

  实现DR模型有一个很关键的问题,就是VIP必须同时配置在Director Server和Real Server上,且必须在同一物理网络中,但是大家应该知道,Linux主机接入一个网络中的时候,会向本网络进行广播其IP地址对应的MAC地址,也包括该主机其他网卡的MAC,这样一来不当紧,那么在这同一物理网络中,VIP分别存在于Director和RS上了,那么IP地址不就冲突了吗?,我们该如何解决呢?
  有如下几种方法:

  •   在该网络中的网络设备上设置VIP地址和Director的MAC地址进行绑定;
  •   在RS上使用arptables,实现对arp广播进行过滤;
  •   可以修改RS内核参数,来限制arp通告以及应答级别;
      arp_announce
      arp_ignore
[root@node1 /]# tree /proc/sys/net/ipv4/conf  
/proc/sys/net/ipv4/conf
  
├── all
  
│   ├── accept_local
  
│   ├── accept_redirects
  
│   ├── accept_source_route
  
│   ├── arp_accept
  
│   ├── arp_announce
  
│   ├── arp_filter
  
│   ├── arp_ignore
  
│   ├── arp_notify
  
│   ├── bootp_relay
  
│   ├── disable_policy
  
│   ├── disable_xfrm
  
│   ├── force_igmp_version
  
│   ├── forwarding
  
│   ├── log_martians
  
│   ├── mc_forwarding
  
│   ├── medium_id
  
│   ├── promote_secondaries
  
│   ├── proxy_arp
  
│   ├── proxy_arp_pvlan
  
│   ├── route_localnet
  
│   ├── rp_filter
  
│   ├── secure_redirects
  
│   ├── send_redirects
  
│   ├── shared_media
  
│   ├── src_valid_mark
  
│   └── tag
  执行以下命令就可以达到我们所需要的效果:
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore  
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
  实现DR模型需要注意的:

  •   RS和Director要在同一个物理网络中
  •   RS的RIP可以使用私网地址,也可以是公网地址,RIP与DIP在同一IP网络,RIP的网关不能指向DIP,以确保响应报文不会经过Director;
  •   请求报文要经由Director,但响应报文不能经由Director,而是由RS直接发往Cliten
  •   不支持端口映射;
lvs-tun:IP隧道
  它的转发方式是:不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而在原IP报文之外再封装一个IP首部(源IP是DIP,目标IP是RIP),将报文发往挑选出的目标RS;RS直接响应给客户端(源IP是VIP,目标IP是CIP)。

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

  •   DIP, VIP, RIP都应该是公网地址;
  •   RS的网关不能,也不可能指向DIP;
  •   请求报文要经由Director,但响应不能经由Director;
  •   不支持端口映射;
  •   RS的OS得支持隧道功能;
    lvs-fullnat:
      fullnat是近几年才出现的,它是通过同时修改请求报文的源IP地址和目标IP地址进行转发。

  实现fullnat模型需要注意的:

  •   VIP是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络;因此,RIP的网关一般不会指向DIP;
  •   RS收到的请求报文源地址是DIP,因此,只需响应给DIP;但Director还要将其发往Client;
  •   请求和响应报文都经由Director;
  •   支持端口映射;
  最后总结一下:

  •   lvs-nat, lvs-fullnat:请求和响应报文都经由Director;
  •   lvs-nat:RIP的网关要指向DIP;
  •   lvs-fullnat:RIP和DIP未必在同一IP网络,但要能通信;
  •   lvs-dr, lvs-tun:请求报文要经由Director,但响应报文由RS直接发往Client;
  •   lvs-dr:通过封装新的MAC首部实现,通过MAC网络转发;
  •   lvs-tun:通过在原IP报文之外封装新的IP报文实现转发,支持远距离通信;
  文章转载至:http://www.ilurker.cn/?post=229



运维网声明 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-659730-1-1.html 上篇帖子: Linux LVS(Linux virtual server)V1.26 负载均衡 详细配置教程 下篇帖子: LVS基础和简单实现
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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