美文网首页
lvs的FWM和持久连接

lvs的FWM和持久连接

作者: 小尛酒窝 | 来源:发表于2018-05-21 17:34 被阅读0次

1、前言

前面学习了lvs集群的类型、应用和配置,那么接着我们来学习下lvs的FWM和持久连接。

2、Lvs之FWM

FWM,firewall mark是借助于防火墙标记来分类报文,而后Lvs根据此防火墙标记来将相应报文归类到指定的集群服务中。使用Lvs的FWM可将多个不同的应用使用同一个集群服务来进行调度。
报文的firewall mark是在报文进入到director进行PREROUTING时打上的指定标记,随后lvs就根据此mark标记来进行调度,下图为Lvs在director如何处理报文的流程图:


Lvs报文处理(图片来源网络)

在Director 上搭标记的访问为使用下述命令在iptables的mangle表中匹配指定的报文,并添加相应的mark:

# iptables -t mangle -A PREROUTING -d $vip -p $proto --dport $port -j MARK --set-mark MARK_NUM

随后再使用下述命令标记定义的集群服务:

# ipvsadm -A -f MARK_NUM [options]

下面我们来以实例演示下Lvs的FWM用法:

演示拓扑

在RS1、RS2 上其启用http、httpsweb服务,结合FWM和lvs在director上将80和443端口服务统一调度同一个集群服务上。

a)配置RS
安装nginx:

[root@RS1 ~]# yum install -y nginx

此处需要事先自签https的证书,此处不再详细描述,可参考https://www.jianshu.com/p/5b8fa3b82d33 进行证书签发生成。
编辑https配置文件:

[root@RS1 ~]# vim /etc/nginx/conf.d/https.conf
server {
        listen 443 ssl;
        ssl on;
        ssl_certificate /etc/nginx/nginx.crt;
        ssl_certificate_key /etc/nginx/nginx.key;

        ssl_session_timeout 5m;
}

编辑生成nginx页面:

[root@RS1 ~]# vim /usr/share/nginx/html/nginx.htm
<h1>This is RS1 10.10.10.11</h1>

关闭firewalld:

[root@RS1 ~]# systemctl stop firewalld

重复上述步骤配置RS2。

b)配置director

配置iptables标记相应的报文:

[root@director ~]# iptables -t mangle -I PREROUTING -d 192.168.0.99 -p tcp -m multiport --dports 80,443  -j MARK --set-mark 3

配置ipvs规则:

[root@director ~]# ipvsadm -A -f 3 -s rr
[root@director ~]# ipvsadm -a -f 3 -r 10.10.10.11 -m
[root@director ~]# ipvsadm -a -f 3 -r 10.10.10.12 -m

开启路由转发功能:

[root@director ~]# sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1
[root@director ~]# iptables -F

在客户端验证结果:

[root@client ~]# for i in {1..10};do curl http://192.168.0.99/nginx.html;done
<h1>This is RS2 10.10.10.12</h1>
<h1>This is RS1 10.10.10.11</h1>
<h1>This is RS2 10.10.10.12</h1>
<h1>This is RS1 10.10.10.11</h1>
<h1>This is RS2 10.10.10.12</h1>
<h1>This is RS1 10.10.10.11</h1>
<h1>This is RS2 10.10.10.12</h1>
<h1>This is RS1 10.10.10.11</h1>
<h1>This is RS2 10.10.10.12</h1>
<h1>This is RS1 10.10.10.11</h1>
[root@client ~]# for i in {1..10};do curl -k  https://192.168.0.99/nginx.html;done
<h1>This is RS2 10.10.10.12</h1>
<h1>This is RS1 10.10.10.11</h1>
<h1>This is RS2 10.10.10.12</h1>
<h1>This is RS1 10.10.10.11</h1>
<h1>This is RS2 10.10.10.12</h1>
<h1>This is RS1 10.10.10.11</h1>
<h1>This is RS2 10.10.10.12</h1>
<h1>This is RS1 10.10.10.11</h1>
<h1>This is RS2 10.10.10.12</h1>
<h1>This is RS1 10.10.10.11</h1>

成功把相应的标记报文分配到指定的集群服务中进行请求响应。至此,管理员只需要在director上定义好标记的iptables规则,即可把响应的请求服务调度到指定的集群服务上。

3、Lvs之持久连接

Lvs的持久连接的作用是指,无论使用哪一种调度方法,都能保证在指定的时间范围内,将来来自于同一个IP的请求始终被调度到同一个RS服务器上。
Lvs的持久连接的配置命令格式为:

ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]

其中-p表示启动持久连接功能,同时也可设置持久连接的超时时长,默认超时时长为300s。

Lvs的持久连接按照配置的规则类型的不同可分为:

每端口持久PPC:每个端口对应定义为一个集群服务,每集群服务单独调度;
每防火墙标记持久PFWM:基于防火墙标记定义集群服务;可实现将多个端口上的应用统一调度,即所谓的port Affinity;
每客户端持久PCC:基于0端口定义集群服务,即将客户端对所有应用的请求统统调度至后端主机,必须定义为持久模式;

上述每个类型的配置格式如下:

  • 端口持久PPC:
[root@director ~]# ipvsadm -A -t 192.168.0.99:80 -s rr -p
  • 防火墙标记持久PFWM:
[root@director ~]# ipvsadm -A -f 3 -s rr -p

客户端持久PCC:

#注意0端口和-p选项需同时使用
[root@director ~]# ipvsadm -A -t 192.168.0.99:0 -s rr -p

接着我们在上面FWM的实例的director上启动持久连接测试其对应的效果:
修改director上的ipvs规则:

[root@director ~]# ipvsadm -E -f 3 -s rr -p 60
[root@director ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
#持久连接功能以生效,并设置timeout为60s
FWM  3 rr persistent 60
  -> 10.10.10.11:0                Masq    1      0          0         
  -> 10.10.10.12:0                Masq    1      0          0         

接着在客户端上再次测试访问:

[root@client ~]# for i in {1..10};do curl http://192.168.0.99/nginx.html;done
<h1>This is RS2 10.10.10.12</h1>
<h1>This is RS2 10.10.10.12</h1>
<h1>This is RS2 10.10.10.12</h1>
<h1>This is RS2 10.10.10.12</h1>
<h1>This is RS2 10.10.10.12</h1>
<h1>This is RS2 10.10.10.12</h1>
<h1>This is RS2 10.10.10.12</h1>
<h1>This is RS2 10.10.10.12</h1>
<h1>This is RS2 10.10.10.12</h1>
<h1>This is RS2 10.10.10.12</h1>
[root@client ~]# for i in {1..10};do curl -k  https://192.168.0.99/nginx.html;done
<h1>This is RS2 10.10.10.12</h1>
<h1>This is RS2 10.10.10.12</h1>
<h1>This is RS2 10.10.10.12</h1>
<h1>This is RS2 10.10.10.12</h1>
<h1>This is RS2 10.10.10.12</h1>
<h1>This is RS2 10.10.10.12</h1>
<h1>This is RS2 10.10.10.12</h1>
<h1>This is RS2 10.10.10.12</h1>
<h1>This is RS2 10.10.10.12</h1>
<h1>This is RS2 10.10.10.12</h1>

此次测试的请求都被分配到了同一个RS,说明持久连接已经生效。

相关文章

  • lvs的FWM和持久连接

    1、前言 前面学习了lvs集群的类型、应用和配置,那么接着我们来学习下lvs的FWM和持久连接。 2、Lvs之FW...

  • 2,集群LVS的持久连接

    持久性连接主要解决的是会话保持的问题 SSL or FTP 保证会话在的持久性 定义LVS的分发策略 [root@...

  • 2018-04-23

    LVS+Keepalived 实现socket连接,socket client无法连接lvs? VIP:10.5....

  • LVS持久化

    在实际应用场景中,轮询调度并不都是适用的。有些情况下,需要我们把同一个会话的请求都调度给一个RS节点。这时候就需要...

  • HTTP1.0,HTTP1.1和HTTP2.0的区别

    一.HTTP1.0和HTTP1.1的区别 (1)长连接 HTTP/1.0协议使用非持久连接,即在非持久连接下,一个...

  • 持久连接

    什么是持久连接?在事务处理结束之后仍然保持在打开状态的TCP连接被成为持久连接。非持久连接会在每个事务结束之后关闭...

  • 持久连接

    一个web页面上的大部分内嵌图片通常都来自一个Web站点,而且其他对象的超链接都指向同一个站点。因此,初始化对某服...

  • LVS 的几种连接模式

    初次搭建LVS时使用只有一张网卡的虚拟机,无论如何配置都不能跳转到real server 上,总结发现与LVS的连...

  • http chunked和Trailer

    一. 分块编码 分块编码传输应该是和持久连接配合使用的.因为如果不是持久连接的话那也不需要知道长度等信息了,只需要...

  • 负载均衡集群介绍、LVS NAT模式搭建、LVS DR模式搭建、

    负载均衡集群介绍 负载均衡集群介绍 LVS介绍 LVS介绍LVS介绍LVS介绍 LVS的调度算法 LVS的调度算法...

网友评论

      本文标题:lvs的FWM和持久连接

      本文链接:https://www.haomeiwen.com/subject/fsdtjftx.html