LVS原理解析-阿里云开发者社区

开发者社区> 科技小能手> 正文

LVS原理解析

简介:
+关注继续查看
  1. LVS简介

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

       使用LVS技术要达到的目标是:通过LVS提供的负载均衡技术和Linux操作系统实现一个高性能、高可用的服务器群集,它具有良好可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的服务性能。

       负载均衡技术有很多实现方案,如基于DNS域名轮流解析的方法、基于客户端调度访问的方法、基于应用层系统负载的调度方法,还有基于IP地址的调度方法,在这些负载调度算法中,执行效率最高的就是IP负载均衡技术。

       LVS的IP负载均衡技术是通过ipvs内核模块来实现的,ipvs是LVS集群系统的核心软件,它的主要作用是:安装在Director Server上,同时在Director Server上虚拟出一个IP地址,用户必须通过这个虚拟的IP地址访问集群服务。这个虚拟IP一般称为LVS的VIP,即Virtual IP。访问的请求首先经过VIP到达负载调度器,然后由负载调度器从Real Server列表中选取一个服务节点响应用户的请求。当用户的请求到达负载调度器后,调度器如何将请求发送到提供服务的Real Server节点,而Real Server节点如何返回数据给用户,是ipvs实现的重点技术,ipvs实现负载均衡机制有四种,分别是NAT、TUN和DR以及后来经淘宝开发的FullNat。


  1. LVS的工作机制

   lvs分为两个部件:ipvs和ipvsadm

ipvs:工作于内核空间,主要用于使用户定义的策略生效

ipvsadm:工作于用户空间,管理集群服务的命令行

wKiom1nMU47A1Ob-AADfUCedsu8567.png-wh_50

如上图所示,ipvs工作于内核空间的INPUT链上,当收到用户的请求为某集群服务时,通过PREROUTING链,经检查本机路由表,送往INPUT链;在进入netfilter的INPUT链时,ipvs强行将请求报文通过ipvsadm定义的集群服务策略的路径改为FORWORD链,将报文转发至后端真实提供服务的主机。


  1. LVS的三种工作类型

LVS有三种工作类型:

NAT:地址转换

DR:直接路由

TUN:隧道

各类术语介绍:CIP为客户端IP,VIP为虚拟ip,DIP为Director的ip,RIP为后端服务器的ip


  1. LVS的NAT模型

wKiom1nMU8iD2eaSAAFs8CCQjaw396.png-wh_50

此模型中,DR需要配置两个网卡分别为vip(公网地址:114.100.80.10)和Dip(私网地址:101.0.0.10),VIP只需要配置到DR上,而DIP需设置为后端服务器的网关地址。

它的工作机制:

①用户发出访问请求,此时源地址:CIP(200.10.10.1),目标地址为VIP(114.100.80.10);

②当DR收到用户的请求,并发现该请求为集群服务请求,则运用LVS调度算法选择后端一台服务器进行响应,并将请求报文目标地址(vip:114.100.80.10)转换成经调度算法计算得出的后端主机IP(RIP:10.0.0.1)地址。此时源地址为CIP(200.10.10.1),目标地址转换为RIP(10.0.0.1);

③后端主机(RIP:10.0.0.1)收到请求后,对该请求进行响应,并发送报文至DR,此时源地址为RIP(10.0.0.1),目标地址为CIP(200.10.10.1);

④由于响应的目标地址为CIP(200.10.10.1),后端服务器无法直接响应client,需要DR将源地址(RIP:10.0.0.1)转换成VIP(114.100.80.10)的地址进行发送响应报文,转换后源地址为VIP(114.100.80.10),目标地址为CIP(200.10.10.1);

NAT的特性:

  1> RS应该使用私有地址;

  2> RS的网关的必须指向DIP;

  3> RIP和DIP必须在同一网段内;

  4> 请求和响应的报文都得经过Director;在高负载场景中,Director很可能成为系统性能瓶颈;

  5> 支持端口映射;

  6> RS可以使用任意支持集群服务的OS;


  1. LVS的DR模型

wKioL1nMU-bysB-cAADcs2cZqL8880.png-wh_50

该类型中,DR上依旧配置有DIP和VIP,VIP配置在网卡别名上。每个RS都有自己的RIP以及在回环别名网卡中配置VIP,但是RS的vip隐藏起来,并不接收任何请求,只有在响应客户端请求时作为源地址使用。

   1)client(200.10.10.1)向目标VIP(114.100.80.10)发出请求,通过ARP协议进行广播,找到DR,Director接收。此时源地址为CIP(200.10.10.1),目标地址为VIP(114.100.80.10);

    2)DR接受请求后,发现该请求为集群服务,LVS根据负载均衡算法选择一台active的RS,并通过ARP协议进行广播获取RS的MAC(00:0c:29:d2),而后将原来的MAC首部拆除重新封装,将选中的RS的网卡的mac地址作为目标mac地址。此时源地址为CIP,目标地址VIP,但VIP的MAC地址已经更改为RS的MAC地址。

    3)RS在局域网中收到这个帧,拆开后发现目标IP(VIP)与本地匹配,于是处理这个报文.随后重新封装报文,发送给客户端.此时源地址为RS中的VIP,目标地址为CIP。

当我们分析上面两个网络模型的数据报时会发现一些问题:

        1)由于vip需要在每台主机中配置,如何保证ARP请求报文不会被交换机或其它网络设备知道?

        2)如何保证ARP通告报文不被交换机或其它网络设备知道?

        3)由于RS只有一个网络接口,而linux内核默认情况下包封装时是从哪个网口出去那个网口就是源地址,如何确保RS转发出来的报文源IP是VIP,而不是RIP?

        4)因为DR与RS都配置有相同的VIP,如何避免各主机VIP广播,造成无法通信?

    解决办法:

        1)Linux内核有两个关于ARP对待请回报文与通告报文的参数(arp_announce/arp_ignore),可以设定相应的级别来规避上述问题中的1、2两点;

        2)对于问题3,我们可以在数据报封装后指定路由经lo别名上的接口发送出去然后再通过eth0网卡转发出去;

        3)对于问题4,我们只需要设定vip的广播地址为它自己即可;

DR的特性:

  1> 集群节点跟Director必须在同一个物理网络中;

  2> RIP可以为公网地址,实现远程管理;

  3> DR只负责入站请求,响应报文由RS直接发送给客户端;

  4> RS不能将网关指向DIP;

  5> 不支持端口映射;

  6> RS可以使用任意支持集群服务的OS;


  1. LVS-TUN

在数据包必须传递到另一个网络或因特网上时,可以使用ip隧道,ip隧道能够将数据包从一个子网或虚拟局域网(VLAN)转发到另一个子网或虚拟局域网(VLAN),建立ip隧道是Linux内核功能的一部分,LVS-TUN转发方法允许你将集群节点放在与Director不同的网络上。

wKioL1nMVA7zHTC2AAErFjBwmlk329.png-wh_50

    请留意DR将数据包转发给RS时的IP数据报文;由于DR,RS都不在同一局域网内,而DR要将client请求报文转发给RS时,DR是直接在数据包中直接添加IP首部(源IP:DR和目标IP:RS),这样就是隧道技术了。

    同样,该模型下RS都将配置VIP地址,且不能被外界所获知VIP存在于RS上;


参考:http://junwang.blog.51cto.com/5050337/1439428



本文转自 IT_外卖小哥  51CTO博客,原文链接:http://blog.51cto.com/jinlong/1969320

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
9898 0
使用NAT网关轻松为单台云服务器设置多个公网IP
在应用中,有时会遇到用户询问如何使单台云服务器具备多个公网IP的问题。 具体如何操作呢,有了NAT网关这个也不是难题。
26756 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13633 0
windows server 2008阿里云ECS服务器安全设置
最近我们Sinesafe安全公司在为客户使用阿里云ecs服务器做安全的过程中,发现服务器基础安全性都没有做。为了为站长们提供更加有效的安全基础解决方案,我们Sinesafe将对阿里云服务器win2008 系统进行基础安全部署实战过程! 比较重要的几部分 1.
9127 0
腾讯云服务器 设置ngxin + fastdfs +tomcat 开机自启动
在tomcat中新建一个可以启动的 .sh 脚本文件 /usr/local/tomcat7/bin/ export JAVA_HOME=/usr/local/java/jdk7 export PATH=$JAVA_HOME/bin/:$PATH export CLASSPATH=.
4640 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
7279 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
4411 0
23706
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载