LVS DR模型详解
DR模型的特点:
1.director必须与realserver位于同一个网络。
2.realserver可以使用公网ip地址,便于远程管理与配置。
3.director只负责处理入站请求。而响应报文则由realserver直接返回给client端。大大节省director的资源
4.不能做端口映射
整个工作原理如下:
客 户端通过路由器将请求交给director的VIP。director接收请求,将通过相应的算法将请求转发给相应的realserver。在转发的过程 中,会修改请求包的目的mac地址,目的ip地址不变。realserver接收请求,并直接响应客户端。这时,便出现一个问题:director此时与 realserver位于同一个网络中,当director直接将请求转发给realserver时,realserver检测到该请求包的目的ip是 vip而并非自己,便会丢弃,而不会响应。。为了解决这个问题,我们需要在所有realserver上都配上VIP。这时会出现第二个问 题:director与realserver位于同一个网络中,当出现多个vip时,通过arp广播,整个网络必然混乱,我们无法保证客户端的请求一定会 发往director。为保证当客户端请求抵达网络时,只有director来响应请求。我们需要realserver忽略对vip的arp请求,并且在 arp通告时,不通告vip地址。我们需要配置如下两个内核参数:
arp_ignore :
当一台主机某个接口接收到arp请求时,这台机上的ip地址是否通过该接口响应给对应请求的限制级别。简单来说,当这台主机有多块网卡,或者有多个ip地址时,是否通过该接口将所有ip地址响应给对应的请求。
0:不作任何限制。将所有本机的ip地址都响应给对应请求。
1:当请求的ip就配置在本接口上时,才予以响应。换句话说,就是只响应当前接口的ip地址。
arp_announce:
当一台主机加入到一个新的网络。会发出ARP通告,向网络中其他主机通告自己的ip地址及mac等信息。arp_anounce就用来限制通告的级别。当这台主机有多块网卡或者多个ip地址时,是否通过某一个接口将所有ip地址通告给该网络中的主机。
0:不作任何限制。从任意接口通告所有ip地址。
1:尽可能避免通告非本接口上的ip。
2:只通知本接口的ip。非本接口的ip不予通告。
由此我们亦可知,在realserver上配置vip时显然也不能配置的物理接口的虚接口上,而应该配置在loopback上。
配置示例:
1)实验环境
lvs负载调度器:eth0:172.16.16.173/24,VIP eth0:0 172.16.16.172
web服务器池:节点1-节点2:172.16.16.177-178/24
2)配置负载调度器
a.配置虚拟IP地址(VIP)
ifconfig eth0:0 172.16.16.172 broadcast 172.16.16.172 netmask 255.255.255.0 up #在eth0上配置并启动VIP
route add -host 172.16.16.172 dev eth0:0 #特殊路由,当客户端请求的ip为vip时,则由eth0:0响应。
b.调整/proc响应参数
echo 1 > /proc/sys/net/ipv4/ip_forward #开启路由转发
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects
send_redirects:icmp发送重定向。经查阅相关资料,开启此选项有一定的危险性,容易被人伪造icmp重定向包发起***。若当前director并非充当路由或网关,建议关闭。默认为开启,0为关闭。
c.配置负载分配策略
service ipvsadm stop
ipvsadm -A -t 172.16.16.172:80 -s wlc
ipvsadm -a -t 172.16.16.172:80 -r 172.16.16.177 -g -w 1
ipvsadm -a -t 172.16.16.172:80 -r 172.16.16.178 -g -w 1
service ipvsadm save
chkconfig ipvsadm on
3)配置节点服务器
a.配置虚拟IP地址
ifconfig lo:0 172.16.16.172 broadcast 172.16.16.172 netmask 255.255.255.255 up
/sbin/route add -host 172.16.16.172 dev lo:0
b.调整/proc响应参数
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/default/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/default/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
此几项配置即是用于限制arp请求及arp通告
c.安装httpd,进行测试。
可将整个lvs dr模型下的director和realserver上的配置写成脚本,如下:
director启动脚本:
#/bin/bash # #LVS for VS/DR . /etc/rc.d/init.d/functions # VIP=172.16.16.172 RIP1=172.16.16.177 RIP2=172.16.16.178 PORT=80 # case $1 in start) #clear all iptables policy /sbin/iptables -F /sbin/iptables -X /sbin/iptables -Z #configure VIP /sbin/ifconfig eth0:1 $VIP broadcast $VIP netmask=255.255.255.0 /sbin/route add -host $VIP dev eth0:1 #enalbe ip_forward echo 1 > /proc/sys/net/ipv4/ip_forward echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects #clear all ipvsadm rules/services. /sbin/ipvsadm -C #Add an IP virtual service for VIP 172.16.16.172port 80 /sbin/ipvsadm -A -t $VIP:$PORT -s wlc /sbin/ipvsadm -a -t $VIP:$PORT -r $RIP1 -g -w 1 /sbin/ipvsadm -a -t $VIP:$PORT -r $RIP2 -g -w 1 /bin/touch /var/lock/subsys/ipvsadm > /dev/null ;; stop) #Reset ipvsadm /sbin/ipvsadm -C /sbin/ifconfig eth0:1 down /bin/rm -f /var/lock/subsys/ipvsadm > /dev/null ;; status) if [ ! -e /var/lock/subsys/ipvsadm ];then echo "ipvs is stopped..." else echo "ipvs is running..." /sbin/ipvsadm -L -n fi ;; *) echo "Usage: $0 {start|stop|status}" exit 1 ;; esac |
realserver启动脚本:
case $1 in start) #start LVS-DR on this real server machine. /sbin/ifconfig lo down /sbin/ifconfig lo up echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.0 up /sbin/route add -host $VIP dev lo:0 ;; stop) #stop LVS-DR on this real server machine. /sbin/ifconfig lo:0 down echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce ;; status) #Sstatus of LVS-DR real server. islothere=`/sbin/ifconfig lo:0 | grep $VIP` isrothere=`netstat -rn | grep "lo:0" | grep $VIP` if [ !"islothere" -o !"isrothere" ]; then echo "LVS-DR real server Stopped." else echo "LVS-DR real server Running" fi ;; *) # Invalid entry. echo "Usage: $0 (start|stop|status)" exit 1 ;; esac |
以上为第一种配置方法,也是官方的常规配置方法。
在 第一种配置方法中,我们提到在所有realserver的loopback上配置vip来实现接收director端的请求转发,然后通过修改内核参数来 忽略arp应答与通告。那我作一个假设。假设我不在realserver上配置vip,我依然希望realserver能够接收director转发来的 请求。前文我们提到,如果realserver不配置vip,默认会将director转发过来的请求包丢弃。那么除了在loopback端配置vip, 还有没有其他的办法让realserver接收来自director转发的请求包?
这个时候我们需要用到iptables的重定向策略。我们不需要在realserver的loopback上配置vip,也不需要去修改内核参数来忽略arp的响应与通告。director上的配置同上并不发生改变,realserver的配置如下:
iptables -t nat -A PREROUTING -d 172.16.16.172 -p tcp --dport 80 -j REDIRECT
整个配置过程完成,是不是比上一种方法更为简单?
转载于:https://blog.51cto.com/dengaosky/1852537
LVS DR模型详解相关推荐
- LVS DR模型及LVS持久连接
LVS之DR模型以及持久连接 LVS的简单介绍 linux virtual server 简单来讲lvs是一段内核代码 类似于netfilter本身是一框架但不提供任何功能,但是在这框架上提供了能够根 ...
- lvs dr 模型配置详解
lvs dr 模型配置详解 [学习笔记] 前期准备: 两台服务器 note01(lvs服务器) note02(real sever) 1 首先在note01配置子网卡: ifconfig eth0:2 ...
- 使用pickle保存机器学习模型详解及实战(pickle、joblib)
使用pickle保存机器学习模型详解及实战 pickle模块实现了用于序列化和反序列化Python对象结构的二进制协议. "Pickling"是将Python对象层次结构转换为字节 ...
- Transformer 模型详解
Transformer 是 Google 的团队在 2017 年提出的一种 NLP 经典模型,现在比较火热的 Bert 也是基于 Transformer.Transformer 模型使用了 Self- ...
- TensorFlow Wide And Deep 模型详解与应用 TensorFlow Wide-And-Deep 阅读344 作者简介:汪剑,现在在出门问问负责推荐与个性化。曾在微软雅虎工作,
TensorFlow Wide And Deep 模型详解与应用 TensorFlow Wide-And-Deep 阅读344 作者简介:汪剑,现在在出门问问负责推荐与个性化.曾在微软雅虎工作,从事 ...
- TensorFlow Wide And Deep 模型详解与应用
Wide and deep 模型是 TensorFlow 在 2016 年 6 月左右发布的一类用于分类和回归的模型,并应用到了 Google Play 的应用推荐中 [1].wide and dee ...
- 数学建模——智能优化之模拟退火模型详解Python代码
数学建模--智能优化之模拟退火模型详解Python代码 #本功能实现最小值的求解#from matplotlib import pyplot as plt import numpy as np imp ...
- 数学建模——智能优化之粒子群模型详解Python代码
数学建模--智能优化之粒子群模型详解Python代码 import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplo ...
- 数学建模——支持向量机模型详解Python代码
数学建模--支持向量机模型详解Python代码 from numpy import * import random import matplotlib.pyplot as plt import num ...
最新文章
- 推荐好用 Spring Boot 内置工具类
- 清华学霸震撼演讲:拼尽所有力气,只为给梦想一个机会!
- C# Create Access File
- Redis与Memcache的对比
- Android之Fragment使用简介
- Median String
- 【转】Treeview 无限分类非递归终极解决方案
- 证券交易业务基础知识
- win10basic模式_BASIC的完整形式是什么?
- python 使用word转pdf遇到的问题
- 电脑检测不到硬盘原因 电脑检测不到硬盘怎么办
- 我们不应歧视任何语言,她们都是萌娘!(有图有真相)
- [4G5G基础学习]:L3 RRC层概述与总体架构、ASN.1消息、无线承载SRB, DRB、终端三种状态、MIB, SIB,NAS消息类型
- 程序员在跳槽时,该怎么说离职原因?
- Android批量打包-如何一秒内打完几百个apk渠道包
- 微信企业号开发-如何建立连接
- 初学者如何入门C语言
- 由递推关系式用差分方程的方法得到通项公式实现求斐波那契数列的第n项;迭代、递归、栈、差分方程之间的本质联系以及由推广的迭代法解决“变态青蛙跳台阶”问题;汉诺塔问题的数字特征以及用递归解决的原理推导。
- 3d打印模型松松夸夸不符合切片软件设置
- linux 内核协议栈 NAPI机制与处理流程分析(图解)
热门文章
- 【Hive】hive表的文件存储格式
- 解决爬取网站过程中遇到的HTTP Error 302错误和中文乱码问题
- MongoDB 最大连接数 设置失效的异常分析
- 使用Decimal.js解决前端计算金钱失真问题
- MikroTik RouterOS 6.x版本开始支持使用img镜像安装(U盘安装的终极解决方法)
- 解决VS在高DPI下设计出的Winform程序界面变形问题
- WinServer2012 R2忘记密码的解决方案+远程连接另一种莫名其妙故障
- 响应式图像对齐中心引导3
- 如何从Swift调用Objective-C代码?
- MS Expression Web中的Asp.net mvc(和其他网络编辑工具)