码迷,mamicode.com
首页 > 其他好文 > 详细

centos6 LVS-DR模式---分析

时间:2015-12-23 15:52:58      阅读:377      评论:0      收藏:0      [点我收藏+]

标签:

LVS是什么就不多说了。

先上拓扑图

技术分享

 

1台LVS   3台Realserver    一个客户端。  环境全部模拟全在内网环境(selinux和iptables关闭)

先简略说一下安装步骤:

LVS上:

1、先将本地eth0分出一个子网卡 eth0:1 并配置上VIP(我的VIP为 192.168.0.36)

ifconfig eth0:0 192.168.0.36 broadcast 192.168.0.36 netmask 255.255.255.255 up

 

2、再将外部所有请求VIP的流量都导向这块网卡,所以需要添加路由

route add -host 192.168.0.36 dev eth0:0

 但是这样只是临时添加,如果重启network 服务,或者重启系统。条目会消失,至于怎样永久,有好多种办法,比如rc.local(查看路由表 route)HU代表路由到一个主机上,UG即代表路由到路由器。

 

3、在配置路由转发,修改 /etc/sysctl.conf 文件

将net.ipv4.ip_forward = 0 的值改成 1     然后使用sysctl -p 命令来刷新保存的文件。

这个改动可以理解成将eth0 和eth0:1 中间做一个路由条目,如果为0的话,2块网卡可以理解成是不想通的即可。

 

4、在来配置安装ipvsadm (yum安装or 源码)

源码安装没有什么特殊的。只不过要先安装依赖包libnl*

这里我们使用yum安装,也是官网最新的1.2.6ipvsadm。

yum -y install ipvsadm

 配置ipvsadm

ipvsadm -C     #清楚表内的规则
ipvsadm -At 192.168.0.36:80 -s wrr          
ipvsadm -at 192.168.0.36:80 -r 192.168.0.38:80 -g -w 1   
ipvsadm -at 192.168.0.36:80 -r 192.168.0.162:80 -g -w 1
ipvsadm -at 192.168.0.36:80 -r 192.168.0.41:80 -g -w 1
/etc/init.d/ipvsadm start #启动lvs  (如果发现找不到/etc/sysconfig/ipvsadm报错就使用service ipvsadm save 保存条目) # -A相当于定义一个模块,模块的规则为VIP的80端 口如果想在VIP上定义其他端口则会报错。 -s:轮询规则,详细请看文章末尾链接。 # -a添加规则 -r为后端真是Rserver服务器这里只能指定80端口,我试过添加其他端口,均会被自动修改成80 添加之后可以在 vi /etc/sysconfig/ipvsadm 查看条目,也可以使用ipvsadm -Ln 来查看

 

在配置Realserver端:(如配置不理解请看LVS配置)

ifconfig lo:0 192.168.0.36 broadcast 192.168.0.36 netmask 255.255.255.255 up
route add -host 192.168.0.36 dev lo:0

 在/etc/sysctl.conf 末尾加上 (ARP抑制)

#LVS arp
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

 Realserver 配置完毕。其余2台也都一样

 

#=================分=========析=========区==================

一、当客户端发送一个请求到VIP时ip数据包(ipdata)携带的什么呢。

       RSC-IP  DST-IP 和请求内容以及各种校验,这里我关注我们关注的。

       细分一下过程:

 1、请求到达交换机 (请求的IP为VIP) 这个时候假设交换机上没有ARP缓存。

   2、交换机会说:我本地没有VIP对应的MAC,我去帮你找吧。

   3、交换机瞬间像所有网口发送ARP广播包。此ARP的广播包里DST-IP为VIP

   4、而此时Realserver和交换机相连的端口为eth0。但是route会把这个请求送达给lo:0上,由于arp_ignore=1的缘由,只回答目标IP地址是来访网络接口本地地址的ARP查询请求.所以lo:0会忽略掉这个ARP请求,但是LVS没有设置。所以LVS会告诉交换机,我是VIP。

   5、交换机记录VIP以及对应的MAC,将ipdata交给了LVS。

   6、LVS将ipdata拆包看到请求的是VIP:80端口,遂查询LVS规则+轮询算法,将确定处理该request的Realserver的IP(即RIP假设为192.168.0.41)

   7、LVSDR模式独有的MAC寻址,这个时候LVS本地没有Rserver的MAC,遂发ARP广播包说:RIP为Realserver的MAC是多少。

   8、ARP包经过eth0口流入每个Rserver,Rserver 这个时候会通过系统内核,内核说:这个ARP请求的是本地网卡的IP,我们要给出回应。就会给出ARP的应答包发给LVS的DIP。

   9、LVS将Rserver应答给自己的MAC存入自己的arp -n 缓存表中,并将ipdata包的外层继续封装一层MAC寻址而此时的SRC-IP 仍未CIP ,DST-IP 为VIP 但是SRC-MAC为DIP即LVS的MAC。DST-MAC为RIP的MAC

   10、数据包到达Realserver时,Rserver验证这个数据包是不是自己能处理的需要符合2个要求 1、MAC是自己的 2、IP是自己的 此时lo:0绑定的VIP就起到作用,将ipdata数据包送上CPU。

   11、Realserver处理完成之后,SRC-IP 为VIP,DST-IP 为CIP SRC-MAC为RMAC DST-MAC为CMAC (现实环境中为网关的,即CIP为路由器网关)

下图为对应其过程

技术分享

为验证7过程,使用tshark抓取 192.168.0.41网口流量验证ARP包内为RIP而非VIP

技术分享

技术分享

 

另外LVS规则算是内核方法,用netstat -ntulp也显示不了其侦听的端口。启动日志在/var/log/message中

另外感谢吴大大(大牛勒)

                                                      如果有误,请联系博主,博主会立即更改。请发邮件至 907765003@qq.com

 

LVS十种均衡算法 : http://www.linuxidc.com/Linux/2013-05/84249.htm

ARP抑制原理:http://www.ddvip.com/tech/100075689.html

wireshake抓包:http://www.centoscn.com/IT/2013/0331/180.html

centos6 LVS-DR模式---分析

标签:

原文地址:http://www.cnblogs.com/shiyiwen/p/5069901.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!