centos6 LVS-DR模式---分析
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本地缓存,查看arp缓存用arp -n 清楚ARP缓存使用
arp -n|awk '/^[1-9]/{print "arp -d " $1}'|sh -x


另外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模式---分析的更多相关文章
- 一个公网地址部署LVS/DR模式
http://blog.chinaunix.net/uid-7411781-id-3436142.html 一个公网地址部署LVS/DR模式 网上看了很多关于LVS的文章,在选取2种模式LVS/D ...
- lvs dr 模式请求过程
一. lvs dr 模式请求过程 1.整个请求过程如下: client在发起请求之前,会发一个arp广播的包,在网络中找"谁是vip",由于所有的服务器,lvs和rs都有vip,为 ...
- LVS DR模式 负载均衡服务搭建
LVS 负载均衡 最近在研究服务器负载均衡,阅读了网上的一些资料,发现主要的软件负载均衡方案有nginx(针对HTTP服务的负载均衡),LVS(针对IP层,MAC层的负载均衡).LVS模式工作在网络层 ...
- LVS DR模式搭建、keepalived+lvs
1.LVS DR模式搭建 条件: 即三台机器,在同一内网. 编辑脚本文件:/usr/local/sbin/lvs_dr.sh #! /bin/bashecho 1 > /proc/sys/net ...
- LVS DR模式搭建 keepalived lvs
LVS DR模式搭建• 三台机器 • 分发器,也叫调度器(简写为dir)172.16.161.130 • rs1 172.16.161.131 • rs2 172.16.161.132 • vip 1 ...
- lvs之 lvs+nginx+tomcat_1、tomcat_2+redis(lvs dr 模式)
前提:已经安装好 lvs+nginx+tomcat_1.tomcat_2+redis环境 ,可参考 (略有改动,比如tomcat_1.tomcat_2安装在两台机器上,而不是单机多实例 ,自行稍稍变动 ...
- CentOS下LVS DR模式负载均衡配置详解
一安装LVS准备: 1.准备4台Centos 6.2 x86_64 注:本实验关闭 SELinux和IPtables防火墙. 管理IP地址 角色 备注 192.168.1.101 LVS主调度器(Ma ...
- Keepalived+LVS DR模式高可用架构实践
Keepalived最初是为LVS设计,专门监控各服务器节点的状态(LVS不带健康检查功能,所以使用keepalived进行健康检查),后来加入了VRRP(虚拟路由热备协议(Virtual Route ...
- Linux centosVMware Linux集群架构LVS DR模式搭建、keepalived + LVS
一.LVS DR模式搭建 三台机器 分发器,也叫调度器(简写为dir) davery :1.101 rs1 davery01:1.106 rs2 davery02:11.107 vip 133.200 ...
- LVS DR模式实验
LVS DR模式实验 三台虚拟机,两个台节点机(Apache),一台DR实验调度机 一:关闭相关安全机制 systemctl stop firewalld iptables -F setenforce ...
随机推荐
- BestCoder Round #83
第一次做BC呀,本来以为会报零的,做了56分钟A了第一题 然后就没有然后了. 贴一下第一次A的代码. /* 0.组合数 1. 2016-05-14 19:56:49 */ #include <i ...
- Python基础3- 变量与数字
1.Python变量不需要声明,其赋值操作既是变量声明和定义的过程;2.Python中每个变量在使用前都必须赋值,变量赋值后该变量才会被创建;3.Python变量是存储内存中的值,若变量赋值时内存中存 ...
- ASP.NET Core EF Sample
Install EF Install-Package Microsoft.EntityFrameworkCore.SqlServer Install-Package Microsoft.EntityF ...
- POJ3469 Dual Core CPU(最小割)
形象生动的最小割.. #include<cstdio> #include<cstring> #include<queue> #include<algorith ...
- nginx二级域名配置到文件夹
user root; worker_processes ; events { worker_connections ; } http { include mime.types; default_typ ...
- [Leetcode] Palindrome Partitioning
Given a string s, partition s such that every substring of the partition is a palindrome. Return all ...
- SpringMvc出现No mapping found for HTTP request with URI的终极解决办法
No mapping found for HTTP request with URI 出现这个问题的原因是在web.xml中配置错了,如: <servlet> <servlet-na ...
- Javascript 多浏览器兼容性问题及解决方案
一.document.formName.item(”itemName”) 问题 问题说明:IE下,可以使用 document.formName.item(”itemName”) 或 document. ...
- [Cocos2D-x For WP8]Sprite精灵
精灵(Sprite)是游戏里面的角色,比如敌人,游戏里面运动的物体等等,所以精灵是游戏里面一个非常常见的概念,几乎无处不在.在Cocos2D-x里面精灵是用CCSprite类来进行表示的,它可以用一张 ...
- C#操作XML文档---基础
增查改删代码如下 public void CreateXML() { XmlDocument xml = new XmlDocument(); xml.AppendChild(xml.CreateXm ...