-
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
测试总结
.
p>
.........................................
..................................
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
关闭服务器测试
............................................ ........................................
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
健康检查模式。
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
p>
户端请求发送到不同的服务器,在发送前,
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
上只有一个
Client-Any6
的连接,此时客户端还
没
有发送数据,因此
BIGIP
与后台并不建立连接。
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
p>
第一个
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
上建立了同样数量的连接,
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
端接收发生了变化:
p>
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
的服务器:
S1
收到了
C1
和
C2
的请求:
<
/p>
S2
重新开始接受请求,收到
C1
和
C3
的请求
2.6
关闭服务器测试
关闭
S2
所有的
Client
和
Server
都崩溃了!
!
!
!
!
!
!<
/p>
等待服务器程序的改进版本中。
。
p>
。
。
。
。
。
。
。
。
。
。
。
13
2.7
V10 MBLB
测试总结
BIGIP V10
p>
已经具备了
MBLB
的处理能力,
可以对长连接里面的
TCP
交易进行拆分处
p>
理,将不同的请求发送到不同的服务器上,并将服务器的返回信息发送到正确的客户端。
p>
目前发现的一些可能存在的问题:
1
、
对于每
个客户端的长连接,
BIGIP
将在每个
Server
上建立一个连接,也就是说对
于每台
Server
而言,都会有所有的客户端连接数的总和数量的连接,在实际
应
用中,需要确定服务器是否能处理全部客户端连接数量的连接数。
2
、
关于交易的边界定义,目前的测试中非常简单的使用了
CLIENT_DATA
和
SERVER_DATA
事件,这两个事件默
认情况下是每接收一个数据包就触发一次,
因此在交易小于
1<
/p>
个
MTU
,通常情况是
< br>1460byte
的情况下,可以不用区分交易
边界,默
认认为一个数据包就是一次交易。
3
、
如果每
次发送交易的长度大于
1460
,
就需
要用
irules
去获取和判断交易的长度。
< br>具体的做法是在第一个数据包进来的时候查询数据包中对于交易长度的定义,
然后
判断当前收集到得数据是否是完整的交易,如果完整,则释放请求,如果
不完整,则继续
进行收集,直到收集到足够的数据后,释放交易长度的内容到
服务器。
< br>
4
、
目前测试的应用时阻塞类型的应用,
也就是
Client
p>
必须等待
Server
应答之后才开
始发送下一个请求,而且数据包都比较小,肯定在一个
packet<
/p>
就发送完毕,因
此不存在有边界界定的问题
5
、
如
果有非阻塞型应用,也就是客户端可能一次发出多个请求,在不等待
server
回应的情况下可以持续发出请求,
Server
回应也是不等待的情况,
从目前的连接
状况分析也是可以工作
的。但可能需要进一步的编程处理来确定每一个交易的
边界
6
、
对于目
前客户所要求的
Disable
服务器之后,所有的交易可以正
常转发到其他服
务器的需求是可以满足的。
7
、
基本确
认这种
MBLB
工作模式和
One C
onnect
在目前测试配置中不能同时工作,
因此当客户端关
闭连接时,这个客户端对应的所有服务器连接都会被关闭。
8
、
从目前了解到得信息,
One Connect
工作模式下可以彻底的区分客户端连接和服
务器端连接的关系,但服务器端的连
接数量在
One
Connect
模式下无法控制。
9
、
由于测
试服务器软件问题,没有测试到
Server
端主动关闭连接,
是否会造成客
户端连接中断。另外,当一台
server
故障,而在健康检查还没有检查到服务器
故障期间的交易如何处理目前
测试环境中也无法测试。
我的初步考虑是用
inband
p>
monitor
来解决普通
Monitor
的间隔周期和检查周期的问题。
10
、
还<
/p>
没有测试会话保持的情况,比如根据每个交易里的一些内容进行会话保持,
还需要改进一下客户端和服务器软件
2.8
附:
TCPdump
数据包分析
客户端数据包发送和接收
14
包
25, 26,
27
为三次握手建立连接
149
p>
开始,客户端发送数据
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
p>
161
从客户端发给
BIGIP
,但被
BIGIP
吞掉了。
俺的
TCP
理论研究还不是很深刻
,是不是一些协议性的东西导致必须这样工作?
3.
One
Connect
工作模式测试
在前面
的测试中,
MBLB
可以支持异步交易,但在一些同步工作模式
下,应用希望两
边的连接不存在有太大的关联性,
前面一种模式
客户端连接一旦中断后,
服务器端这个客户
端相关连接会全部中
断。通过
One Connect
工作模式,可以消除掉这种强
制的绑定关系,而
使服务器端的连接不会和客户端强制绑定。因此可以在客户端是长连接
和短连接模式下,
BIGIP
始终保持和后台服务器是长连接的
结构。
One
Connect
p>
工作模式只支持同步阻塞模式下的
TCP
连
接,即客户端必须等待
Server
端回应请求之后,
再发送下一个请求。
每笔交易都是以
Clien
t Request->Server
Response
的方
式工作。
p>
和前面的
MBLB
工作模式最大的不同是<
/p>
One Connect
可以在
V9
p>
版本下工作。
测试的结构不变,但
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
,
p>
因此,
当
BIGIP
检查到服务器端的
Response
结束了之后,
就拆除了第一个
Client TCP
连接和服务
器
TCP
连接之间的对应关系。
即使在
客户端关闭连接的情况下,
BIGIP
和后台服务器的
TCP
连接也保持
Open
的状态。
当下一个用户和
BIG
IP
建立连接并发送请求的时候,
BIGIP
< br>会在当前和后台服务器之
间的
TCP
连接里面挑选一个空闲的连接(当然,还需要满足会话保持、负载均衡的算法的
前提
下)
,将第二个用户的
Request
塞到空闲的连接里面发送到服务器,这时,第二个用户
的客户端连接和为第一个客户端建
立的服务器连接就形成了新的对应关系。
在第二个用户的
Res
ponse
结束之后,
BIGIP
又拆
除其对应关系。
如果第三个用户连接和请求到达
BIGIP
的时候,第二个用户的
Response
并没有结束,
也就是当前
BIGIP<
/p>
和后台没有空闲连接的时候,
BIGIP
就会和服务器端再建立一个新的
TCP
连接,传送第三个客户端
的请求到服务器。
如果第四个用户连接和请求到达
BIGIP
的时候,第二个用户的
Respons
e
传输完成了,
第四个用户就会再使用空闲的后台服务器连接进
行请求传输。
这样,
当客户端不停的
建立连接,
拆除连接的时候,
BIGIP
始终可以保持较少的后台服
务器连接。
BIGIP
在这里面完成的工作主要就是根据
Response
结束和新的用户请求到达的
时刻点,来切换连接的不同连接对应关系。
3.2
TCP
连接测试
17
-
-
-
-
-
-
-
-
-
上一篇:JMS输液泵操作流程(分享借鉴)
下一篇:外贸函电中译英答案