lvs持久性工作原理和配置
作者: ISADBA|FH.CN 日期: //
转载请注明:
作者:ISADBA.COM|FH.CN
BLOG:http://isadba.com
原文:http://isadba.com/?p=67
LVS持久连接技术 lvs的持久性连接有两方面: 把同一个client的请求信息记录到lvs的hash表里,保存时间使用persistence_timeout控制,单位为秒。
persistence_granularity 参数是配合persistence_timeout的,在某些情况特别有用,他的值是子网掩码,表示持久连接的粒度,默认是255.255.255.,也就是单独的client ip
,如果改成,255.255..0就是client ip一个网段的都会被分配到同一个real server。
一个连接创建后空闲时的超时时间,这个时间为3种
tcp的空闲超时时间
lvs收到客户端tcp fin的超时时间
udp的超时时间
如何查看这些值?
ipvsadm # 可以查看连接空闲的超时时间(persistent )。
IP Virtual Server version 1.2. (size=)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 122.225.32.142:http rr persistent
-> 122.225.32.137:http Route
-> 122.225.32.136:http Route
ipvsadm -L -timeout # 查看tcp tcpfin udp的超时时间
Timeout (tcp tcpfin udp):
他们是如何工作的? ipvsadm -Lcn IPVS connection entries pro expire state source virtual destination TCP : NONE 110.184.96.173: 122.225.32.142: 122.225.32.136: TCP : FIN_WAIT 110.184.96.173: 122.225.32.142: 122.225.32.136:80 当一个client访问vip的时候,ipvs或记录一条状态为NONE的信息,expire初始值是persistence_timeout的值,然后根据时钟主键变小,在以下记录存在期间,同一client ip连接上来,都会被分配到同一个后端。 FIN_WAIT的值就是tcp tcpfin udp的超时时间,当NONE的值为0时,如果FIN_WAIT还存在,那么NONE的值会从新变成60秒,再减少,直到FIN_WAIT消失以后,NONE才会消失,只要NONE存在,同一client的访问,都会分配到统一real server。 如何设置这些值? persistence_timeout可以通过以下两种方法设置
ipvsadm -A -t 192.168.20.154: -s rr -p
注意:上面命令中红色标记的80端口,表示同一客户端访问服务器的80端口,会被定义到同一个real server,如果把80端口改为0,那么同一客户端访问服务器的任何服务都会被转发到同一real server。 修改keepalived配置文件,在虚拟服务器配置下面加入persistence_timeout tcp tcpfin udp的配置
ipvsadm –set tcp tcpfin udp # ipvsadm –set //实例
建议:tcpfin的值最好小于persistence_timeout的值,这样比较方便计算。 lvs持久性参考资料:
http://www.linuxvirtualserver.org/docs/persistence.html
lvs的持久连接 本文出自 “成长全记录” 博客,请务必保留此出处http://lymrg.blog.51cto.com/1551327/684681 由于HTTP是一种无状态协议,每次请求完毕之后就立即断开了,当用户浏览购物网站挑选商品的时候,看到一件商品加入购物车,此过程被重定向到了REALSERVER1上面来,当把第二件商品加入购物车又被重定向到了REALSERVER2上面,最后结账的时候在REALSERVER2上面,只有一件商品,这显然是用户无法接受的,此时就需要一种持久连接机制,来把同一用户的HTTP请求在超时时间内都重定向到同一台REALSERVER,超时时间可以自己定义,比如说2个小时,在超时时间内服务器会不断追踪用户的访问请求,把某一用户的所有请求都转发到同一台REALSERVER上面,如果超时时间过后用户依然在访问,则默认按照每次两分钟的方式无限加长 这里的所有操作都以DR模型为例,试验环境参见:http://lymrg.blog.51cto.com/1551327/660925 对于LVS的持久连接来说常见的分为三种PCC,PPC和基于防火墙标记的持久连接,下面我们就来分别讨论 PCC PCC用来实现把某个用户的所有访问在超时时间内定向到同一台REALSERVER,这种方式在实际中不常用 ipvsadm -A -t 192.168.0.1: -s wlc -p (单位是s) ipvsadm -a -t 192.168.0.1: -r 192.168.1.2 -w -g ipvsadm -a -t 192.168.0.1: -r 192.168.1.3 -w -g
此时测试一下会发现通过HTTP访问VIP和通过SSH登录VIP的时候都被定向到了同一台REALSERVER上面了 PPC PPC用来把某个用户对同一服务的访问在超时时间内定向到同一台REALSERVER ipvsadm -A -t 192.168.0.1: -s wlc -p ipvsadm -a -t 192.168.0.1: -r 192.168.1.2 -w -g ipvsadm -a -t 192.168.0.1: -r 192.168.1.3 -w -g ipvsadm -A -t 192.168.0.1: -s wlc -p ipvsadm -a -t 192.168.0.1: -r 192.168.1.2 -g ipvsadm -a -t 192.168.0.1: -r 192.168.1.3 -g
此时再测试会发现某个用户在超时时间内对于某个服务的访问都会被重定向到同一台REALSERVER上面 防火墙标记 基于防火墙标记的持久连接 对于电子商务网站来说,用户在挑选商品的时候使用的是80端口来浏览的,当付款的时候则是通过443的ssl加密的方式,当然当用户挑选完商品付款的时候我们当然不希望https的443跳转到另外一台REALSERVER,很显然应该是同一REALSERVER才对,这时候就要用到基于防火墙标记的持久连接,通过定义端口的姻亲关系来实现 首先两个REALSERVER要配置SSL,很明显证书应该也是一样的
定义端口的姻亲关系,给80和443端口打上同样的防火墙标记
配置实现基于防火墙标记的LVS
yum install mod_ssl 两个服务器上面都安装一下 在REALSERVER1上面。也就是192.168.1.2上面如下操作 cd /etc/pki/tls/certs/ make httpd.pem #此种SSL证书的生成方式只为测试,在实际操作中构建
SSL参见我博客前面的完整步骤 填写相关信息,主机名称一定要和VIP在互联网上面解析的DNS名称一致 cp httpd.pem /etc/httpd/ vi /etc/httpd/conf.d/ssl.conf # 找到如下行启用并且修改 DocumentRoot "/var/www/html" ServerName www.test.org: #这里修改为你得服务器名称 # 修改证书路径 SSLCertificateFile /etc/httpd/httpd.pem SSLCertificateKeyFile /etc/httpd/httpd.pem scp httpd.pem 192.168.1.3:/etc/httpd scp /etc/httpd/conf.d/ssl.conf 192.168.1.3:/etc/httpd/conf.d/
防火墙添加mark iptables -t mangle -A PREROUTING -d 192.168.0.1 -p tcp --dport -j MARK --set-mark (-99范围) iptables -t mangel -A PREROUTING -d 192.168.0.1 -p tcp --dport -j MARK --set-mark ipvsadm -A -f -s wlc -p ipvsadm -a -f -r 192.168.1.2 -g -w ipvsadm -a -f -r 192.168.1.3 -g -w
本文出自 “成长全记录” 博客,请务必保留此出处http://lymrg.blog.51cto.com/1551327/684681 关于arp_announce和arp_ignore http://lymrg.blog.51cto.com/1551327/660925 VS/DR或VS/TUN应用的一种模型中(所有机器都在同一个物理网络),所有机器(包括Director和RealServer)都使用了一个额外的IP地址,即VIP。 当一个客户端向VIP发出一个连接请求时,此请求必须要连接至Director的VIP,而不能是RealServer的。因为,LVS的主要目标就是要Director负责调度这些连接请求至RealServer的。因此,在Client发出至VIP的连接请求后,只能由Director将其MAC地址响应给客户端(也可能是直接与Director连接的路由设备),而Director则会相应的更新其ipvsadm table以追踪此连接,而后将其转发至后端的RealServer之一。 如果Client在请求建立至VIP的连接时由某RealServer响应了其请求,则Client会在其MAC table中建立起一个VIP至RealServer的对就关系,并以至进行后面的通信。此时,在Client看来只有一个RealServer而无法意识到其它服务器的存在。 为了解决此问题,可以通过在路由器上设置其转发规则来实现(静态的MAC-IP绑定)。当然,如果没有权限访问路由器并做出相应的设置,则只能通过传统的本地方式来解决此问题了。 这些方法包括: 禁止RealServer响应对VIP的ARP请求;
在RealServer上隐藏VIP,以使得它们无法获知网络上的ARP请求;
基于“透明代理(Transparent Proxy)”或者“fwmark (firewall mark)”;
禁止ARP请求发往RealServers;
传统认为,解决ARP问题可以基于网络接口,也可以基于主机来实现。Linux采用了基于主机的方式,因为其可以在大多场景中工作良好,但LVS却并不属于这些场景之一,因此,过去实现此功能相当麻烦。现在可以通过设置arp_ignore,arp_announce,这变得相对简单的多了。 Linux .2和2.(2.4.26之前的版本)的内核解决“ARP问题”的方法各不相同,且比较麻烦。幸运的是,2.4.26和2.6的内核中引入了两个新的调整ARP栈的标志(device flags):arp_announce和arp_ignore。基于此,在DR/TUN的环境中,所有IPVS相关的设定均可使用arp_announce=2和arp_ignore=//3来解决“ARP问题”了。以下是官方说明: arp_annouce: Define different restriction levels for announcing the local source IP address from IP packets in ARP requests sent on interface; - (default) Use any local address, configured on any interface. - Try to avoid local addresses that are not in the target's subnet for this interface. 2 - Always use the best local address forthis target. arp_ignore: Define different modes for sending replies in response to received ARP requests that resolve local target IP address. 0 - (default): replyfor any local target IP address, configured on any interface. 1 - reply only if the target IP address is local address configured on the incoming interface. 2 - reply only if the target IP address is local address configured on the incoming interface and both with the sender's IP address are part from same subnet on this interface. - do not reply for local address configured with scope host,only resolutions for golbal and link addresses are replied. - - reserved - do not reply for all local addresses arp_announce
定义了网卡在向外宣告自己的MAC-IP时候的限制级别,有三个值: :默认值,不管哪块网卡接收到了ARP请求,只要发现本机有这个MAC都给与响应
:尽量避免响应ARP请求中MAC不是本网卡的,一个主机有多块网卡,其中一块网卡接收到了ARP请求,发现所请求的MAC是本机另一块网卡的,这个时候接收到ARP请求的这块网卡就尽量避免响应
:总是使用最合适的网卡来响应,一个主机有多块网卡,其中一块网卡接收到了ARP请求,发现所请求的MAC是本机另一块网卡的,这个时候接收到ARP请求的这块网卡就一定不响应,只有发现请求的MAC是自己的才给与响应 arp_ignore
定义了网卡在响应外部ARP请求时候的响应级别,这里有8个值,但我们只使用了2个 :默认值,不管哪块网卡接收到了ARP请求,只要发现本机有这个MAC都给与响应
:总是使用最合适的网卡来响应,一个主机有多块网卡,其中一块网卡接收到了ARP请求,发现所请求的MAC是本机另一块网卡的,这个时候接收到ARP请求的这块网卡就一定不响应,只有发现请求的MAC是自己的才给与响应在RealServers上,VIP配置在本地回环接口lo上。如果回应给Client的数据包路由到了eth0接口上,则arp通告或请应该通过eth0实现,因此,需要在sysctl.conf文件中定义如下配置: vim /etc/sysctl.conf net.ipv4.conf.eth0.arp_ignore = net.ipv4.conf.eth0.arp_announce = net.ipv4.conf.all.arp_ignore = net.ipv4.conf.all.arp_announce =
以上选项需要在启用VIP之前进行,否则,则需要在Drector上清空arp表才能正常使用LVS。 关于连接追踪 到达Director的数据包首先会经过PREROUTING,而后经过路由发现其目标地址为本地某接口的地址,因此,接着就会将数据包发往INPUT(LOCAL_IN HOOK)。此时,正在运行内核中的ipvs(始终监控着LOCAL_IN HOOK)进程会发现此数据包请求的是一个集群服务,因为其目标地址是VIP。于是,此数据包的本来到达本机(Director)目标行程被改变为经由POSTROUTING HOOK发往RealServer。这种改变数据包正常行程的过程是根据IPVS表(由管理员通过ipvsadm定义)来实现的。 如果有多台Realserver,在某些应用场景中,Director还需要基于“连接追踪”实现将由同一个客户机的请求始终发往其第一次被分配至的Realserver,以保证其请求的完整性等。其连接追踪的功能由Hash table实现。Hash table的大小等属性可通过下面的命令查看: ipvsadm -Lcn 为了保证其时效性,Hash table中“连接追踪”信息被定义了“生存时间”。LVS为记录“连接超时”定义了三个计时器: 空闲TCP会话;
客户端正常断开连接后的TCP会话;
无连接的UDP数据包(记录其两次发送数据包的时间间隔);
上面三个计时器的默认值可以由类似下面的命令修改,其后面的值依次对应于上述的三个计时器: ipvsadm --set 数据包在由Direcotr发往Realserver时,只有目标MAC地址发生了改变(变成了Realserver的MAC地址)。Realserver在接收到数据包后会根据本地路由表将数据包路由至本地回环设备,接着,监听于本地回环设备VIP上的服务则对进来的数据库进行相应的处理,而后将处理结果回应至RIP,但数据包的原地址依然是VIP。 DIP要配置在接口上,VIP要配置在接口别名上 在前端服务器上的配置(配置VIP)
ifconfig eth0: $192.168.0.1 broadcast $192.168.0.1 netmask 255.255.255.255 up route add -host $192.168.0.1 dev eth0: route add -host $192.168.1.1 dev eth0 echo >/proc/sys/net/ipv4/ip_forward
在REALSERVER上面的配置
RIP要配置在接口上,VIP要配置在lo的别名上 定义内核参数,禁止响应对VIP的ARP广播请求 echo >/proc/sys/net/ipv4/conf/lo/arp_ignore echo >/proc/sys/net/ipv4/conf/all/arp_ignore echo >/proc/sys/net/ipv4/conf/lo/arp_announce echo >/proc/sys/net/ipv4/conf/all/arp_announce
配置VIP ifconfig lo: $192.168.0.1 broadcast $192.168.0.1 netmask 255.255.255.255 up route add -host 192.168.0.1 dev lo: # 确保如果请求的目标IP是$VIP,那么让出去的数据包的源地址也显示为$VIP
在前端服务器配置并启动服务 ipvsadm -A -t 192.168.0.1: -s wlc ipvsadm -a -t 192.168.0.1: -r 192.168.1.2 -g -w ipvsadm -a -t 192.168.0.1: -r 192.168.1.3 -g -w ipvsadm -L -n ab -c -n http://192.168.0.1/index.html watch -n 1 'ipvsadm -L -n'
lvs持久性工作原理和配置的更多相关文章
- [转帖]keepalived工作原理和配置、使用
keepalived工作原理和配置.使用 https://www.iteye.com/blog/aoyouzi-2288124 keepalived是什么 keepalived是集群管理中保证集群高可 ...
- keeplived工作原理及配置
一.keepalived简介及作用 Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能 keepal ...
- LVS、keepalived原理及配置
使用LVS实现负载均衡原理及安装配置详解 负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群.常用的负载均衡开源软件有nginx.lvs.haproxy,商业的硬件负 ...
- java复习要点(一)------- java语言的特点、java的工作原理、配置环境变量、java命令的使用
一.java语言的特点: (1)简单并面向对象 (2)鲁棒并安全: java语言在编译及运行程序时,都要进行严格的检查,防止不匹配问题的发生.如果引用一个非法类型,或执行一个非法类型操作,java减肥 ...
- Oracle NET工作原理、配置及连接问题排查
一.Oracle NET配置文件 Oracle NET是一个软件层,支持不同网络协议之间的转换.不同的物理机器可以借助这个软件层实现相互间的通信,具体而言就是实现对oracle的远程访问. oracl ...
- vmware三种网络模式的工作原理及配置详解
vmware为我们提供了三种网络工作模式,它们分别是:Bridged(桥接模式).NAT(网络地址转换模式).Host-Only(仅主机模式). 打开vmware虚拟机,我们可以在选项栏的“编辑”下的 ...
- LVS的工作原理认识
一.LVS 简介及工作模式 1. LVS:Linux Virtaul Server,该软件的功能是实现LB(load balance) 2. 三种工作模式的使用范围 1)NAT模式(NAT) LVS ...
- UCENTER同步登录工作原理和配置要点
ucenter的同步登录原理: 1)Ucenter是和uc_client同步的.每个PHP应用,加入了UCENTER后,都会在主目录下有个UC_CLIENT目录.这个目录里,都有一个client.PH ...
- symfony2 路由工作原理及配置
1.路由是程序的方法和URL的一一映射.
随机推荐
- mysql-5.6.15_winX64在win764位系统下的安装操作步骤总结
mysql 版权声明:本文为博主原创文章,未经博主允许不得转载. 自从换了新电脑win764位,支持的内存从原来的3G(2G机身+1G内存条)变到了现在的8G(机身4G+4G内存条),机子的速度是 ...
- 翻译【ElasticSearch Server】第一章:开始使用ElasticSearch集群(1)
我们要做的第一件事是安装ElasticSearch.对于多数应用程序,您开始安装和配置,通常忘记这些步骤的重要性,直到发生了糟糕的事情.这章我们将广泛关注ElasticSearch的这部分.请注意本章 ...
- ASP.NET常用加密解密方法
ASP.NET常用加密解密方法 一.MD5加密解密 1.加密 C# 代码 public static string ToMd5(string clearString) ...
- 数往知来C#面向对象准备〈二〉
面向对象(OOP→Object-Oriented Programming) 1.什么是面向对象? 一种分析问题的方式. 2.面向对象三大特征: 封装(隐蔽代码实现/复用/修改方便).继承.多态. 3. ...
- lighttpd mod_status模块
用过nginx的status可以查看服务器的状态,之后就想lighttpd有没有这样的模块呢 之后看下配置文件,真的有,然后就试下 第一步, "mod_auth" 把这个前面的#号 ...
- 产品设计敏感度之kindle touch 4
这种训练方法来自于<嵌入式系统开发之道:菜鸟成长日志与项目经理的私房菜>,名字真够长的,但是里面都是干货,我虽然之前有短评这本书,但是后面看完之后会继续再做一个详细的感悟记录. 选出身边的 ...
- Tasks Queues and Cron Jobs(任务队列和时钟守护作业)
一个网络应用必须迅速响应网络请求,一般要小于1s,最好是几十微秒,以便为坐在浏览器前面的用户提供一个流畅的体验.这就给不了应用太多的时间来处理工作.有时会是有更多的工作要做而不是有时间来做它.< ...
- WebService学习之三:spring+cxf整合
步骤一:spring项目(java web项目)引入CXF jar包 步骤二:创建webservice服务器 1)创建一个服务接口 package com.buss.app.login; import ...
- Delphi实例-IdTCPServer和IdTCPClient的使用(支持文件发送)
相关资料: http://blog.csdn.net/earbao/article/details/46514313 结果注意: 1.Use IdContext.IdGlobal 这两个单元2.不能使 ...
- codeforces 630 I(规律&&组合)
I - Parking Lot Time Limit:500MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Subm ...