LVS 之 DR model arp_announce arp_ignore转
DR模式的收发流程:
1)客户端发起请求到调度器的vip.
2)调度器根据调度算法在各个服务器中动态选择一台服务器,但它不修改ip报文,而是将数据帧的MAC地址改为选出服务器的MAC地址.再将修改名的数据帧在服务器的局域网发送.
3)被选中服务器收到这个数据帧,从中获得ip报文,在解包的过程中它发现目标地址VIP是在本地的网络设备上,所以它会处理这个报文,然后根据路由表将响应报文直接返回客户端.
在使用DR模式时,为什么要在real server上做如下的配置呢?
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
要想搞清理上面配置的作用,首先要了解arp的工作原理:
ARP即地址解析协议,实现通过IP地址得知其物理地址,例如主机A要向主机B发送数据,它首先要查找arp表,寻找对映主机B的mac地址.知道了主机B的MAC地址,直接把目标MAC地址写入帧里面发送就可以了.
如果在ARP缓存表中没有找到目标IP地址,主机A就会在网络上发送一个广播,告之局域网中所有的主机自己的IP地址及mac地址,并询问主机B的MAC地址是什么?
网络上其他主机并不响应ARP询问,只有主机B接收到这个帧时,才向主机A做出这样的回应.
这样,主机A就知道了主机B的MAC地址,它就可以向主机B发送信息了.同时A和B还同时都更新了自己的ARP缓存表(因为A在询问的时候把自己的IP和MAC地址一起告诉了B).
下次A再向主机B或者B向A发送信息时,直接从各自的ARP缓存表里查找就可以了.
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
系统只回答目的IP为是本地IP的包,也就是对广播包不做响应.
默认是0,只要这台机器上面任何一个设备上面有这个ip,就响应arp请求,并发送mac地址应答.
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
当内网的机器要发送一个到外部的ip包,那么它就会请求路由器的Mac地址,发送一个arp请求,这个arp请求里面包括了自己的ip地址和Mac地址,
而linux默认是使用ip的源ip地址作为arp里面的源ip地址,而不是使用发送设备上面的,这样在lvs这样的架构下,所有发送包都是同一个VIP地址,那么arp请求就会包括VIP地址和设备Mac,
而路由器收到这个arp请求就会更新自己的arp缓存,这样就会造成ip欺骗了,VIP被抢夺,所以设置arp_announce为2,即只使用真正发送数据包的网络设备上的ip,而不使用vip.

D. 响应报文从eth0出来后 交给的下一个 主机 ,那么 下个主机一定是 eth0(RIP)的网关。
对调整的内核参数解释:
在 kernel 2.4.26 和2.6.4 之后,引入了2个网卡设备标识:arp_ignor/arp_announc ,用于实现 调整ARP协议栈 工作模式



仅宣告: 接入该网络的网卡的IP与MAC
之后内核:告诉内核:arp_ignore=1 则仅 响应 设备3.1 IP 与MAC

Real Server 1:
[root@nod3 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@nod3 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@nod3 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@nod3 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@nod3 ~]# ifconfig lo:0 192.168.195.150 broadcast 192.168.195.171 netmask 255.255.255.255 up
[root@nod3 ~]# route add -host 192.168.195.150 dev lo:0
[root@nod3 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.195.150 0.0.0.0 255.255.255.255 UH 0 0 0 lo
192.168.195.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
0.0.0.0 192.168.195.2 0.0.0.0 UG 0 0 0 eth0 [root@nod3 ~]# ifconfig eth0
Link encap:Ethernet HWaddr 00:0C:29:6F:42:49
inet addr:192.168.195.171 Bcast:192.168.195.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe6f:4249/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:746 errors:0 dropped:0 overruns:0 frame:0 TX packets:471 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:68969 (67.3 KiB) TX bytes:53295 (52.0 KiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) lo:0 Link encap:Local Loopback
inet addr:192.168.195.150 Mask:255.255.255.255 UP LOOPBACK RUNNING MTU:16436 Metric:1
Real Server 2
[root@nod2 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@nod2 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@nod2 ~]# echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore
[root@nod2 ~]# echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce
[root@nod2 ~]# ifconfig lo:0 192.168.195.150 broadcast 192.168.195.170 netmask 255.255.255.255 up
[root@nod2 ~]# route add -host 192.168.195.150 dev lo:0
Director 配置
[root@nod1 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
[root@nod1 ~]# ifconfig eth0:1 192.168.195.150 broadcast 192.168.195.150 netmask 255.255.255.255 up
[root@nod1 ~]# route add -host 192.168.195.150 dev eth0:1
[root@nod1 ~]# iptables -F
[root@nod1 ~]# iptables -Z
[root@nod1 ~]# ipvsadm -Z
[root@nod1 ~]# ipvsadm -A -t 192.168.195.150:80 -s wlc
[root@nod1 ~]# ipvsadm -a -t 192.168.195.150:80 -r 192.168.195.170 -g -w 1
[root@nod1 ~]# ipvsadm -a -t 192.168.195.150:80 -r 192.168.195.171 -g -w 2


IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port
Conns InPkts OutPkts InBytes OutBytes
-> RemoteAddress:Port TCP 192.168.195.150:80 5091 25495 0 1824257 0
-> 192.168.195.170:80 1703 8534 0 612007 0 -> 192.168.195.171:80 3388 16961 0 1212250 0
LVS 之 DR model arp_announce arp_ignore转的更多相关文章
- lvs的dr模式分析(二)
#vim /etc/init.d/lvsdrrip #!/bin/bash #DR server VIP=192.168.46.200 case "$1" in start) ...
- 负载均衡集群之LVS的DR模型详解(Diretor Routing)
LVS的默认模型:默认模型DR DR模型原理图--> 在讲DR模型要点之前,需要了解网络的相关知识: 接收的报文拆解顺序:帧(MAC)-->数据包(IP)-->数据报文(port) ...
- LVS:DR模式(Direct Routing)部署实验
本文介绍怎样在kvm的虚拟环境下,部署实验LVS的DR模式.包含网络结构图,怎样配置.以及使用tcpdump分析ip包. 网络结构图 kvm ...
- LVS + keepalived(DR) 实战
一.LVS体系结构 使用LVS架设的服务器集群系统有三个部分组成:最前端的负载均衡层,用Load Balancer表示,中间的服务器群组层,用Server Array表示,最底端的数据共享存储层,用S ...
- LVS的DR模型配置
LVS的DR模型配置 介绍 下图为DR模型的通信过程,图中的IP不要被扑结构中的IP迷惑,图里只是为了说明DR的通信原理,应用到本例中的拓扑上其工作原理不变. 拓扑结构 服务器 IP地址 角色 Srv ...
- LVS负载均衡器DR模型的实现
概述: 在大规模互联网应用中,负载均衡设备是必不可少的一个节点,源于互联网应用的高并发和大流量的冲击压力,我们通常会在服务端部署多个无状态的应用服务器和若干有状态的存储服务器(数据库.缓存等等) 一. ...
- LVS的DR模式
DR模式: 请求由LVS接受,由真实提供服务的服务器(RealServer, RS)直接返回给用户,返回的时候不经过LVS. DR模式下需要LVS和绑定同一个VIP(RS通过将VIP绑定在loopba ...
- LVS的DR模式负载均衡
参考项目:http://www.cnblogs.com/along21/p/7833261.html#auto_id_3 LVS的DR模式实现负载均衡 1.环境 lvs-server :192.168 ...
- lvs中dr模式配置脚本
1 dr模式介绍 1.1 lvs的安装 安装具体解释:http://blog.csdn.net/CleverCode/article/details/50586957. 1.2 lvs模式 lvs有三 ...
随机推荐
- Cyborg Genes
题意: 给两个字符串,求最短的以两字符串为子序列的字符串和个数 分析: 最长公共子序列的变形,num[i][j]表示个数 #include <map> #include <set&g ...
- 《Python 学习手册4th》 第十七章 作用域
''' 时间: 9月5日 - 9月30日 要求: 1. 书本内容总结归纳,整理在博客园笔记上传 2. 完成所有课后习题 注:“#” 后加的是备注内容 (每天看42页内容,可以保证月底看完此书) “重点 ...
- 全栈工程师眼中的HTTP
HTTP,是Web工程师每天打交道最多的一个基本协议.很多工作流程.性能优化都围绕HTTP协议来进行,但是我们对HTTP的理解是否全面呢?如果前端工程师和后台工程师坐在一起玩捉鬼游戏,他们对HTTP的 ...
- 利用flashback query 恢复表数据
flashback query可以查询过去某个时间点对象的状态,从而可以利用此来进行恢复数据 1 准备测试数据 用普通用户创建一个表,表中插入部分数据: SQL> show user USER ...
- Top 5 Free Screen Recording Softwares For Windows
[转]Top 5 Free Screen Recording Softwares For Windows 该文章是转过来的,因为这里介绍了好几款免费的录制视频的软件.我自己需要使用,也许大家也有需求. ...
- bzoj 2502 清理雪道(有源汇的上下界最小流)
[题意] 有一个DAG,要求每条边必须经过一次,求最少经过次数. [思路] 有上下界的最小流. 边的下界为1,上界为无穷.构造可行流模型,先不加ts边跑一遍最大流,然后加上t->s的inf边跑 ...
- mybatis系列-10-一对一查询
10.1 需求 查询订单信息,关联查询创建订单的用户信息 10.2 resultType 10.2.1 sql语句 确定查询的主表:订单表 确定查询的关联表:用户表 关联查询 ...
- Trail: JDBC(TM) Database Access(2)
package com.oracle.tutorial.jdbc; import java.sql.CallableStatement; import java.sql.Connection; imp ...
- elisp语法
http://stackoverflow.com/questions/3855862/setq-and-defvar-in-lisp defvar, let, setq的语法分析: defvar in ...
- JDBC学习笔记(9)——DBUtils的使用
使用DBUtils提供的功能需要使用commons-dbutils-1.6.jar这个JAR包,在Apache官网可以下载到 使用DBUtils进行更新操 测试QueryRunner类的update方 ...