LVS源码剖析-init

来源:互联网 发布:全球淘宝下载 编辑:程序博客网 时间:2024/06/16 18:20

很早以前就准备开始写自己的技术博客,可惜迟迟没有动笔。今天就已LVS源码剖析来作为自己博客的开端吧。

之前写过一个负载均衡器,不过有点过于简单,决定来研究一下LVS。

首先去LVS官网下载了源码,然后用Source Insight 来阅读,还是很方便的。

先简单介绍一下LVS的工作模式。
LVS提供了三种负载均衡模式,NAT、direct routing(DR)和tunnel。
NAT模式中,所有数据必须通过均衡器,后两种是半连接的处理方式,请求通过均衡器来进行转发,之后服务器的返回包直接通过路由返回。DR和tunnel的区别是,前者的均衡器和服务器必须在同一网段,通过修改MAC地址来实现转发,而后者进行了IP封装,所以可路由。

NAT模式的缺点比较明显,大家用的比较多的是DR模式,这种模式可以有效节约公网IP,还能保护后端的服务器,所以,我们主要来分析分析DR模式。

下面给大家画一张图来了解DR模式
这里写图片描述
图中的序号对应的解释:左边为源地址,右边为目的地址

首先,给均衡器和服务器配置同一个VIP,而且要确保请求必须先给均衡器。均衡器选取合适的服务器后,将对应的MAC填入目的MAC,让对应的服务器收到请求包。服务器处理完请求后,将源IP置为VIP,发送返回包。至此,客户机并不知道请求包经历了什么,因为对客户机来说,发送时的目的主机和接收时的目的主机是同一IP。

首先一个疑问就是,如何修改MAC?
对于Linux平台下的一个普通的程序来说,只能处理传输层以上的数据,所以,对于修改MAC来说简直无能为力。那么,就需要让我们的代码在内核态执行。

这里就需要了解一下netfilter框架
netfilter在网络传输的几个阶段部署了一些hook点,这样,我们可以将自己的钩子函数挂载在netfilter上,从而实现在内核态运行代码。关于netfilter后面会详细介绍一下。

还有一个问题也出现了,既然均衡器和服务器都设置了VIP,如何确保请求先发给均衡器而不会发给服务器?
这里就需要在服务器设置 arp_announce 和 arp_ignore

整体情况就是这样,接下来就需要接触源码来一探究竟了。

0 0
原创粉丝点击