关键词不能为空

当前您在: 主页 > 英语 >

F5长连接测试

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-12 21:28
tags:

-

2021年2月12日发(作者:小红点)








F5 BIGIP MBLB






测试记录



F5


北京



杨明非



2009


8


























目录




1.


测试环境


.


.................................... .................................................. ....................


3



1.1


测试环境准备



............................................. .............................................


3



1.2


测试网络拓扑



.......... .................................................. ..............................


3



1.3 BIGIP MBLB


工作原理:


.................. .................................................. ...


4



2. V10 MBLB


测试过程



.


.................................................. ....................................


5



2.1 TCP


连接测试



.

< br>............................................... ...........................................


5



2.2


交易分发测试



.......... .................................................. ..............................


6



2.3


启动第二个客户端的连接建立过程及


Timeout


.


............................... ....


8



2.4


加入新的客户端观察负载均衡算法



. .................................................. .


1


0



2.5


手工


Disable


服务器测试



.


... .................................................. ................


1


2



2.6


关闭服务器测试



......... .................................................. .........................


1


3



2.7 V10 MBLB


测试总结



.


......................................... ..................................


1


4



2.8


附:


TCPdump


数据包分析


.......................................... .........................


1


4



3. One Connect


工作模式测试



.


..................................... ......................................


1


6



3.1 One Connect


模式的工作原理


................................................ ...............


1


7



3.2 TCP


连接测试



.

< br>............................................... .........................................


1


7



3.3


交易分发测试



.......... .................................................. ............................


1


9



3.4


启动第二个客户端的连接



..... .................................................. .............


2


0



3.5


启动多个客户端观察负载均衡算法



. .................................................. .


2


2



3.6


手工


Disable


服务器测试



.


................................................. ...................


2


5



3.7


重新


Enable


服务器



.


..................... .................................................. .......


2


6



3.8


关闭服务器测试


< p>
............................................ ........................................


2


9



3.9 One Connect


模式测试总结:


................................................ ...............


3


0



4.


附录



.


.. .................................................. .................................................. ..........


3


0



4.1


如何使用


iRules


来判断交易边界



.


.................................................. .....


3


0



4.2


关于交易定向发送



........................................... .....................................


3


2



4.3


关于会话保持



.......... .................................................. ............................


3


2



4.4


两种模式的对比



......... .................................................. .........................


3


3



4.5


还需要研究的部分



........ .................................................. ......................


3


4




2






















1.



测试环境



1.1



测试环境准备



PC server


一台,安装


Windows 2003 Server.


BIGIP 1


台,安装

10.0.1


版本



TCP Client/Server


软件



1.2



测试网络拓扑





所有的


IP


地址均在同一个网段内,


TCP


client



Server


也运行在同一台设备上。通过


启动多个不同的实例来模拟多台


Server



Client




测试用


BIGIP


配置



virtual test_vs {


snat automap


pool test_pool


destination 60.247.114.43:9000


ip protocol tcp


rules mblb-basic


profiles {



mblb {}


tcp {}


}


}


pool test_pool {


monitor all tcp_half_open


members {


60.247.114.34:9000 {}


60.247.114.34:9001 {}


3






















}


}


注意


mblb



Profile< /p>


是手工加入的,


在图形界面里没有配置。


另外对于这种类型的


Server



最 好使用


tcp_half_open


健康检查模式。

< p>


rule mblb-basic {


when CLIENT_ACCEPTED {


TCP::collect


}


when CLIENT_DATA {


TCP::release


TCP::notify request


#log


TCP::collect


}


when SERVER_CONNECTED {


TCP::collect


}


when SERVER_DATA {


TCP::release


TCP::notify response


#log


TCP::collect


}


}



1.3



BIGIP MBLB


工作原理:




客户端首先与


BIGIP


建立


TCP


连接,在客户端发送数据的时候,


BIGIP


根据交易将客


4






















户端请求发送到不同的服务器,在发送前,


BIGIP


将与后台服务器建立连接。在这种工作模


式下,可以支持同步阻塞模式交易或 者同连接里的异步交易。



同步工作模式:



Client1 Request


Server1 Response


Client2 Request


Server2 Response


Client1 Request


Server2 Response


异步工作模式:



Client1 Request


Client2 Request


Client1 Request


Server1 Response


Server2 Response-


Server3 Response


在异步工作模式下,不能 用下面测试的简单


irules


,需要使用

iRules


来判断每个交易的


边界,以便将每笔交易请求 分发到不同的服务器上。



下面的测试基于小包状态,


也就是每笔交易的长度不超过


1



MTU



通常情况下是


14 60


字节的情况,在这种情况下,在一次


CLIENT_DA< /p>


TA


事件触发的时候就可以接收到整个的


交易请求或者交易回应。



2.



V10 MBLB


测试过程



2.1



TCP


连接测试


首先启动两台


Server


,分别侦听

9000



9001


端口




确认在


BIGIP


里显示两台服务器都是工作的。




B conn


显示没有任何的链接产生



[root@ltm3600:Active] config # b conn


60.247.98.162:14774


<->


60.247.114.44:ssh


<->


60.247.114.44:ssh tcp


1/0


上面的那个连接是我的


SSH


登录产生 的。



启动客户端,配置好发送的内容,点击


Connect


5























观察


BIGIP

上的连接状态:



[root@ltm3600:Active] config # b conn


60.247.98.162:14774


<->


60.247.114.44:ssh


<->


60.247.114.44:ssh tcp


1/0


60.247.114.34:4933 <-> 60.247.114.43:9000 <-> any6 tcp 1/1


在 客户端没有发送数据之前,在


BIGIP


上只有一个

< p>
Client-Any6


的连接,此时客户端还


没 有发送数据,因此


BIGIP


与后台并不建立连接。

< p>


2.2



交易分发测试



点击客户端上的发送按钮





观察客户端的收发状态



6























观察


Server

< br>端收发状态






观察


BIGIP

上的连接状态



[root@ltm3600:Active] config # b conn


any6 <-> 60.247.114.43:9000 <-> 60.247.114.34:9000 tcp 1/1


any6 <-> 60.247.114.43:9000 <-> 60.247.114.34:9001 tcp 1/1


60.247.98.162:14774


<->


60.247.114.44:ssh


<->


60.247.114.44:ssh tcp


1/0


60.247.114.34:4933 <-> 60.247.114.43:9000 <-> any6 tcp 1/1



可以看到,在客户端开始发送数据后,


BIGIP


分别和两台


Server


建立了连接,并将客


户端的请求以轮询的方式发送到两台服务器上。由于我在这里启用了


S NAT


,因此可以看到


7






















第一个


Server


连接是使用的客户端源 端口和服务器建立连接,第二个客户端连接使用的另


外一个源端口和服务器建立连接。< /p>




2.3



启动第二个客户端的连接建立过程及


Timeout


启动第二个客户端建立连接




观察


BIGIP


状态



[root@ltm3600:Active] config # b conn


60.247.98.162:14774


<->


60.247.114.44:ssh


<->


60.247.114.44:ssh tcp


1/0


60.247.114.34:1088 <-> 60.247.114.43:9000 <-> any6 tcp 1/0


怎 么没有


Server


端连接了呢?


< /p>


看看


Server


端日志,原来由于俺写 文章的时间太长,被


BIGIP timeout


了。



好,现在就让< /p>


C2


开始发送数据


看到


Server


端又开始建立连接了




BIGIP


上的连接状态:



[root@ltm3600:Active] config # b conn


any6 <-> 60.247.114.43:9000 <-> 60.247.114.34:9001 tcp 1/0


any6 <-> 60.247.114.43:9000 <-> 60.247.114.34:9000 tcp 1/0


60.247.98.162:14774


<->


60.247.114.44:ssh


<->


60.247.114.44:ssh tcp


1/0


8






















60.247.114.34:1088 <-> 60.247.114.43:9000 <-> any6 tcp 1/0


现 在开始启动


C1


发送数据



C1


的连接也被断掉了:




重新启动


C1


并连接



BIGIP


上状况:



[root@ltm3600:Active] config # b conn


any6 <-> 60.247.114.43:9000 <-> 60.247.114.34:9001 tcp 1/0


any6 <-> 60.247.114.43:9000 <-> 60.247.114.34:9000 tcp 1/0


60.247.98.162:14774


<->


60.247.114.44:ssh


<->


60.247.114.44:ssh tcp


1/0


60.247.114.34:1088 <-> 60.247.114.43:9000 <-> any6 tcp 1/0


60.247.114.34:1144 <-> 60.247.114.43:9000 <-> any6 tcp 1/0




C1


开始发送数据的时候:



[root@ltm3600:Active] config # b conn


any6 <-> 60.247.114.43:9000 <-> 60.247.114.34:9001 tcp 1/0


any6 <-> 60.247.114.43:9000 <-> 60.247.114.34:9000 tcp 1/0


any6 <-> 60.247.114.43:9000 <-> 60.247.114.34:9001 tcp 1/0


any6 <-> 60.247.114.43:9000 <-> 60.247.114.34:9000 tcp 1/0


60.247.98.162:14774


<->


60.247.114.44:ssh


<->


60.247.114.44:ssh tcp


1/0


60.247.114.34:1088 <-> 60.247.114.43:9000 <-> any6 tcp 1/0


60.247.114.34:1144 <-> 60.247.114.43:9000 <-> any6 tcp 1/0


Server


上的状态:






可以看 到


BIGIP


针对每一个客户端连接,


分别在每台


Server


上建立了同样数量的连接,

< p>
9






















并将请求在这些连接里进行分发。





2.4



加入新的客户端观察负载均衡算法



我们再启动


C3,


看看有什么状况?




BIIGP


[root@ltm3600:Active] config # b conn


any6 <-> 60.247.114.43:9000 <-> 60.247.114.34:9000 tcp 1/0


any6 <-> 60.247.114.43:9000 <-> 60.247.114.34:9001 tcp 1/0


any6 <-> 60.247.114.43:9000 <-> 60.247.114.34:9000 tcp 1/0


any6 <-> 60.247.114.43:9000 <-> 60.247.114.34:9001 tcp 1/0


60.247.98.162:14774


<->


60.247.114.44:ssh


<->


60.247.114.44:ssh tcp


1/0


60.247.114.34:1088 <-> 60.247.114.43:9000 <-> any6 tcp 1/0


60.247.114.34:1144 <-> 60.247.114.43:9000 <-> any6 tcp 1/0


60.247.114.34:1231 <-> 60.247.114.43:9000 <-> any6 tcp 1/1



C3


开始发送数据的时候:




10























Server


状态:





两台


Se rver


都收到了


C3


的请求



BIGIP


上显示


3



client connection, 6



Server connection:


[root@ltm3600:Active] config # b conn


any6 <-> 60.247.114.43:9000 <-> 60.247.114.34:9000 tcp 1/1


any6 <-> 60.247.114.43:9000 <-> 60.247.114.34:9001 tcp 1/1


any6 <-> 60.247.114.43:9000 <-> 60.247.114.34:9000 tcp 1/0


any6 <-> 60.247.114.43:9000 <-> 60.247.114.34:9001 tcp 1/0


any6 <-> 60.247.114.43:9000 <-> 60.247.114.34:9000 tcp 1/0


any6 <-> 60.247.114.43:9000 <-> 60.247.114.34:9001 tcp 1/0


60.247.98.162:14774


<->


60.247.114.44:ssh


<->


60.247.114.44:ssh tcp


1/0


60.247.114.34:1088 <-> 60.247.114.43:9000 <-> any6 tcp 1/0


60.247.114.34:1144 <-> 60.247.114.43:9000 <-> any6 tcp 1/0


60.247.114.34:1231 <-> 60.247.114.43:9000 <-> any6 tcp 1/1



S2


上收到的是


C1

< br>和


C2


的请求





S1


上收 到的是


C1



C3

的请求




停止所有的客户端,然 后全部重新发送的时候,


Server


端接收发生了变化:



S1


上收到的是


C1



C2


的请求


11























S2


上收到的是

C1



C3


的请求




应该是


Round Robin


的算法导致了这种现象的出现



BIGIP


上的连接没有发生变化:



[root@ltm3600:Active] config # b conn


any6 <-> 60.247.114.43:9000 <-> 60.247.114.34:9001 tcp 1/1


any6 <-> 60.247.114.43:9000 <-> 60.247.114.34:9000 tcp 1/0


any6 <-> 60.247.114.43:9000 <-> 60.247.114.34:9001 tcp 1/1


any6 <-> 60.247.114.43:9000 <-> 60.247.114.34:9000 tcp 1/1


any6 <-> 60.247.114.43:9000 <-> 60.247.114.34:9001 tcp 1/0


any6 <-> 60.247.114.43:9000 <-> 60.247.114.34:9000 tcp 1/1


60.247.98.162:14774


<->


60.247.114.44:ssh


<->


60.247.114.44:ssh tcp


1/0


60.247.114.34:1144 <-> 60.247.114.43:9000 <-> any6 tcp 1/0


60.247.114.34:1231 <-> 60.247.114.43:9000 <-> any6 tcp 1/1


60.247.114.34:1271 <-> 60.247.114.43:9000 <-> any6 tcp 1/1


2.5



手工


Disable


服务器测试



现在手工


Disable


一台服务器






S1< /p>


上收到了


3


个客户端的请求



12
























恢复


di sable


的服务器:



< p>
S1


收到了


C1



C2


的请求:



< /p>


S2


重新开始接受请求,收到


C1



C3


的请求





2.6



关闭服务器测试



关闭


S2


所有的


Client



Server


都崩溃了!







!< /p>



等待服务器程序的改进版本中。
















13






















2.7



V10 MBLB


测试总结



BIGIP V10


已经具备了


MBLB


的处理能力,


可以对长连接里面的


TCP


交易进行拆分处


理,将不同的请求发送到不同的服务器上,并将服务器的返回信息发送到正确的客户端。



目前发现的一些可能存在的问题:



1




对于每 个客户端的长连接,


BIGIP


将在每个


Server


上建立一个连接,也就是说对


于每台

< p>
Server


而言,都会有所有的客户端连接数的总和数量的连接,在实际 应


用中,需要确定服务器是否能处理全部客户端连接数量的连接数。


2




关于交易的边界定义,目前的测试中非常简单的使用了


CLIENT_DATA



SERVER_DATA


事件,这两个事件默 认情况下是每接收一个数据包就触发一次,


因此在交易小于


1< /p>



MTU


,通常情况是

< br>1460byte


的情况下,可以不用区分交易


边界,默 认认为一个数据包就是一次交易。



3




如果每 次发送交易的长度大于


1460



就需 要用


irules


去获取和判断交易的长度。

< br>具体的做法是在第一个数据包进来的时候查询数据包中对于交易长度的定义,


然后 判断当前收集到得数据是否是完整的交易,如果完整,则释放请求,如果


不完整,则继续 进行收集,直到收集到足够的数据后,释放交易长度的内容到


服务器。

< br>


4




目前测试的应用时阻塞类型的应用,


也就是


Client


必须等待


Server


应答之后才开


始发送下一个请求,而且数据包都比较小,肯定在一个


packet< /p>


就发送完毕,因


此不存在有边界界定的问题



5




如 果有非阻塞型应用,也就是客户端可能一次发出多个请求,在不等待


server


回应的情况下可以持续发出请求,


Server


回应也是不等待的情况,


从目前的连接


状况分析也是可以工作 的。但可能需要进一步的编程处理来确定每一个交易的


边界



6




对于目 前客户所要求的


Disable


服务器之后,所有的交易可以正 常转发到其他服


务器的需求是可以满足的。



7




基本确 认这种


MBLB


工作模式和


One C onnect


在目前测试配置中不能同时工作,


因此当客户端关 闭连接时,这个客户端对应的所有服务器连接都会被关闭。



8




从目前了解到得信息,


One Connect


工作模式下可以彻底的区分客户端连接和服


务器端连接的关系,但服务器端的连 接数量在


One Connect


模式下无法控制。



9




由于测 试服务器软件问题,没有测试到


Server


端主动关闭连接, 是否会造成客


户端连接中断。另外,当一台


server


故障,而在健康检查还没有检查到服务器


故障期间的交易如何处理目前 测试环境中也无法测试。


我的初步考虑是用


inband


monitor


来解决普通


Monitor


的间隔周期和检查周期的问题。



10




还< /p>


没有测试会话保持的情况,比如根据每个交易里的一些内容进行会话保持,


还需要改进一下客户端和服务器软件



2.8



附:


TCPdump


数据包分析



客户端数据包发送和接收



14
























25, 26, 27


为三次握手建立连接



149


开始,客户端发送数据


PSH,ACK


,< /p>



157


为客户端收到一个


BIGIP ACK


,没有内容,表明


Server


已经收到客户端内容



159 BIGIP


给客户端发送数据


PSH,ACK


161


客户端给


BIGIP


发送


ACK,


表明数据已经收到



163


客户端等待


1000ms


后开始下一个数据包发 送



服务器端数据包发送和接收




152



1 53



154



BIGIP


和后台服务器三次握手建立连接,结合客户端连接建立时间,


可以看到


BIGIP


一直等待到客户端有数据发送了 才开始和后台建立连接



155 BIGIP


给服务器端发送数据



PSH,ACK


158


服务器回应


BIGIP


数据



PSH,ACK


160 BIGIP


发送给服务器端


ACK


,表明数据已经收到


164



1000ms


以后,


BIGIP


重新开始给服务器端发送数 据包。




数据流程图:





比较有意思的地方:



157



160


看上去是< /p>


BIGIP


产生的主动发给客户端和服务器的

ACK


15






















161


从客户端发给


BIGIP

< p>
,但被


BIGIP


吞掉了。



俺的


TCP


理论研究还不是很深刻 ,是不是一些协议性的东西导致必须这样工作?




3.



One Connect


工作模式测试



在前面 的测试中,


MBLB


可以支持异步交易,但在一些同步工作模式 下,应用希望两


边的连接不存在有太大的关联性,


前面一种模式 客户端连接一旦中断后,


服务器端这个客户


端相关连接会全部中 断。通过


One Connect


工作模式,可以消除掉这种强 制的绑定关系,而


使服务器端的连接不会和客户端强制绑定。因此可以在客户端是长连接 和短连接模式下,


BIGIP


始终保持和后台服务器是长连接的 结构。



One


Connect


工作模式只支持同步阻塞模式下的


TCP


连 接,即客户端必须等待


Server


端回应请求之后,


再发送下一个请求。


每笔交易都是以


Clien t Request->Server Response


的方


式工作。



和前面的


MBLB


工作模式最大的不同是< /p>


One Connect


可以在


V9


版本下工作。




测试的结构不变,但


BIGIP


上配置有一些变化



virtual test_vs {


snat automap


pool test_pool


destination 60.247.114.43:9000


ip protocol tcp


rules one_connect_rule


profiles {


oneconnect {}


tcp {}


}


}


注意在


VS


里面必须绑定


Oneconnec t Profile


rule one_connect_rule {


when CLIENT_ACCEPTED {


TCP::collect


}



when CLIENT_DATA {


LB::detach


TCP::release


TCP::collect


}


}


pool test_pool {


members {


60.247.114.34:9000 {}


60.247.114.34:9001 {}


16






















}


}



3.1



One Connect


模式的工作原理



< /p>


在上图中是以


HTTP


协议为例,


但实际上通过


iRules



也可以支持任何协议类型,


包括


用户自行开发的


TCP Socket


应用。



当第一个


client


连接到


BIGIP


开始发送请求的时候,


BIGIP


会以这个


client


的源


I P


地址


和后台服务器建立一个连接,并把客户端的


Request


转发到服务器。此时客户端连接和服务


器的


TCP


连接形成了绑定的关系。当服务器响应了


Response


之后,由于


BIGIP


可以识别


HTTP Response



因此,



BIGIP


检查到服务器端的


Response


结束了之后,

< p>
就拆除了第一个


Client TCP


连接和服务 器


TCP


连接之间的对应关系。


即使在 客户端关闭连接的情况下,


BIGIP


和后台服务器的


TCP


连接也保持


Open

的状态。



当下一个用户和


BIG IP


建立连接并发送请求的时候,


BIGIP

< br>会在当前和后台服务器之


间的


TCP

连接里面挑选一个空闲的连接(当然,还需要满足会话保持、负载均衡的算法的


前提 下)


,将第二个用户的


Request


塞到空闲的连接里面发送到服务器,这时,第二个用户


的客户端连接和为第一个客户端建 立的服务器连接就形成了新的对应关系。


在第二个用户的


Res ponse


结束之后,


BIGIP


又拆 除其对应关系。



如果第三个用户连接和请求到达


BIGIP


的时候,第二个用户的


Response


并没有结束,


也就是当前


BIGIP< /p>


和后台没有空闲连接的时候,


BIGIP


就会和服务器端再建立一个新的


TCP


连接,传送第三个客户端 的请求到服务器。



如果第四个用户连接和请求到达

< p>
BIGIP


的时候,第二个用户的


Respons e


传输完成了,


第四个用户就会再使用空闲的后台服务器连接进 行请求传输。



这样,


当客户端不停的 建立连接,


拆除连接的时候,


BIGIP


始终可以保持较少的后台服


务器连接。


BIGIP

< p>
在这里面完成的工作主要就是根据


Response


结束和新的用户请求到达的


时刻点,来切换连接的不同连接对应关系。




3.2



TCP


连接测试



17

-


-


-


-


-


-


-


-



本文更新与2021-02-12 21:28,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/645945.html

F5长连接测试的相关文章