级别: 中级 邵 萍 ([email protected]), 高级软件工程师, IBM 库 俊国 ([email protected]), 软件工程师, IBM 2007 年 7 月 20 日
Load Balancer是随Webspere Application server 61 ND版本发行的负载均衡服务器组件,它基于不同的系统性能要求提供了一系列负载均衡方案,它无需特殊的硬件支持,是一个软件实现负载均衡的解决方案。Load balancer通过将客户请求分发到后端集群的多个server,从而提高系统性能。 当Load balancer和web server结合使用的时候,能够使企业站点实现灵活可扩展。在 WAS 61 中,LB提供新的userspace版本,实现了linux平台的内核无关性。 本文在介绍新特性的基础上,用一个客户实例作为demo阐述如何使用LB实现 High Availability 的负载均衡。 同时,本文还会总结在生产环境中LB性能调优的技巧。
引言 WebSphere Edge Server主要有两大组成部分:Load Balancer (以下简记为LB)和 Cache Proxy,前者负责请求的负载均衡,后者为缓存代理。 它们都位于Internet客户端和实际应用服务器之间。在IBM推荐的最佳可扩展系统架构中,LB位于web server之前,提供对Web Server的负载均衡、可扩展和高可用支持。 但是LB的用途不仅限于和 Web Server 结合使用,LB支持 HTTP,FTP,SSL,SMTP,NNTP,IMAP,POP3,Telnet, 和所有其它基于TCP或UDP的请求的负载均衡。 LB能够探测到后端不响应服务器从而在分发请求时绕开问题服务器。 它根据后端服务器(backend server)的运行状况,来动态调节各个backend server的权重,从而将请求合理地分配到这些backend server上去。用户可以使用缺省权重或者在配置时改变权重值。 Edge Load Balancer常应用在高负荷的企业级应用系统上。我们先简单介绍一下Edge Server 61的新特性和发展趋势。 在Edge Server 6.1版本之前,LB使用kernel space代码实现,所以产品与操作系统内核相关。为了实现更好的可移植性,LB正逐步采用user space的实现方式。 在Edge Server 6.1中提供了Linux系统上user space的LB版本。因此,Edge Server61中的LB有两个版本,一个是支持IPV4的传统版本,一个是支持IPv4/IPv6的内核无关版本(仅在Linux上实现了内核无关)。另外,WebSphere Application Server 6.1提供了可以通过ND管理的代理服务器(proxy server)。代理服务器(proxy server)将逐步取代 Cache Proxy 完成代理服务器功能。WebSphere Application Server 6.1中的代理服务器能够完成http,https 和sip请求的缓存代理。它可以在ND控制台生成,配置,起动,停止和删除。很多用户在使用负载均衡服务的时候,要求LB具有高可用性。下面我们将就实例介绍如何配置LB的对称高可用性(Mutual High Availability,以下简记为MHA)。
|
回页首 |
|
对称高可用性概述 LB具有两种高可用性的配置模式,一种是简单高可用(simple HA),一种是对称高可用(Mutual HA)。 前者在运行时只有一台LB处于工作状态,另一台处于备用状态。备用LB会检测主LB的状态,当主LB发生故障时接管请求。为了提高资源的利用率,用户可以使用后一种模式。对称高可用在运行时两个服务器都处于工作状态,每个LB负责处理各自主集群(primary cluster)上的请求,同时互为对方的备份。两台LB之间通过“心跳检测”(heartbeat)来监视对方的“健康”状况,一旦其中一台出现故障,另一台便能接管(takeover)其负责的请求,从而保障整个系统的高可用性。此外,两台LB之间还将保持同步,以保证在takeover发生时数据的一致性。用户可以配置当出现故障的LB恢复正常后,该LB自动还是手动接管回自己的主集群。 由于对称高可用模式在失效转移(failover)发生时,正常工作的LB服务器需要同时负担两个集群的负载均衡,所以选择硬件时需要考虑服务器能承受的压力。
|
回页首 |
|
对称高可用网络结构 我们搭建了对称高可用环境。下面将结合这个实例阐述如何使用LB实现负载均衡的高可用性。 对称高可用的一个典型配置拓扑图
配置说明
- 在前端,用三台linux模拟实际的客户端。在这三台客户机上我们安装了压力测试工具来生成http请求。请求的目的地址是两个LB服务器的集群地址,即图中的9.181.86.185和9.181.86.155。在实际应用中,集群地址一般为提供给外界访问的公网地址。
- Edge 61被安装在中间的两台AIX 5.3服务器上,它们被配置成对称高可用模式实现相互备用。每台LB服务器上配置了三个IP地址。以服务器wastst32.cn.ibm.cn 为例。它包括一个非转发NFA(non-forwarding)地址:9.181.86.144,NFA地址是服务器网络设备用于连接网络的地址;一个集群地址:9.181.86.185,集群地址用来接受客户端对于后端集群的请求;一个返回地址:9.181.86.160,返回地址用来接受后端集群返回的响应。注意我们这里使用的是NAT模式,如果我们使用MAC地址转发模式的话,不需要配置返回IP地址,后端服务器的配置也有些不同。关于NAT和MAC以及详细差别请参考Edge服务器的infocenter。
- 在后端,用三台unix和solaris服务器来组成集群。在这三台后端服务器上运行着一个简单的http服务程序,监听9080端口的http请求,在接收到请求后发回响应,模拟一个简单的连接。在实际应用中,后端集群可以运行 HTTP,FTP,SSL,SMTP,NNTP,IMAP,POP3,Telnet 和所有其它基于TCP或UDP的网络服务。在此,我们特地配置了位于两个不同子网的后端服务器。Axdev01.cn.ibm.com 和nlsdev43.cn.ibm.com属于9.181.86网段,而was2sun.cn.ibm.com属于9.181.87网段。以此来说明不同子网的后端服务器如何进行配置。
我们来看看一个客户请求的处理流程:
- Client A发送一个请求到集群地址9.181.86.185:http://9.181.86.185:9080。
- 这个请求会被LB服务器wastst32.cn.ibm.com上的集群9.181.86.185接收。
- 服务器wastst32.cn.ibm.com根据负载均衡算法从集群中选定一个服务器,假设是nlsdev43.cn.ibm.com。
- 服务器wastst32.cn.ibm.com会将http请求的目的地址改为nlsdev43.cn.ibm.com的IP地址9.181.86.90,将请求的源地址改为自己的返回地址9.181.86.187,然后将请求转发到nlsdev43.cn.ibm.com
- 后端服务器nlsdev43.cn.ibm.com处理,然后将响应返回到LB服务器的返回地址9.181.86.187。
- LB服务器接受到响应,将响应发回到Client A。
那么如果LB服务器wastst32.cn.ibm.com发生故障,对称高可用会怎么工作呢?这时,另一台LB服务器wasdev05.cn.ibm.com将会接管它的所有请求。由于两台LB服务器之间会通过心跳检测来监测对方的状态,当发现对方不响应时,LB会触发脚本,进行IP重新配置,这时一台LB服务器会同时为两个集群地址的请求提供负载均衡。
|
回页首 |
|
对称高可用的基本配置 清单 1. 环境配置指令及注解
//loglevel取值从0到5,5将输出所有信息,缺省为1
dscontrol set loglevel 1
dscontrol set logsize unlimited
//启动executor,executor对于LB是必须的
dscontrol executor start
//fintimeout是LB为TCP连接保持在FIN状态的时间,该参数对LB性能有影响
dscontrol executor set fintimeout 15
//设置客户端网关,clientgateway用于LB回应客户请求时的出口网关
dscontrol executor set clientgateway 9.181.86.1
//添加第一个cluster
dscontrol cluster add ndrack509 address 9.181.86.185 primaryhost 9.181.86.144
dscontrol cluster set ndrack509 staletimeout 36000
//设置该cluster上四个指标的初始权重,下面介绍manager report时会提到
dscontrol cluster set ndrack509 proportions 50 45 5 0
//给cluster 添加port, 并设置转发方式
dscontrol port add ndrack509:9080 method nat reset no
dscontrol port set ndrack509:9080 porttype tcp
//为9080端口添加三个后端服务器,并设置每个服务器的初始权重。
//router地址用于LB到backend server的寻径
dscontrol server add ndrack509:9080:axdev01 address 9.181.86.89 router 9.181.86.89
returnaddress 9.181.86.187
dscontrol server set ndrack509:9080:axdev01 weight 11
dscontrol server add ndrack509:9080:nlsdev43 address 9.181.86.90 router 9.181.86.90
returnaddress 9.181.86.187
dscontrol server set ndrack509:9080:nlsdev43 weight 5
dscontrol server add ndrack509:9080:was2sun address 9.181.87.49 router 9.181.86.1
returnaddress 9.181.86.187
dscontrol server set ndrack509:9080:was2sun weight 11
//添加第二个cluster
dscontrol cluster add ndrack508 address 9.181.86.155 primaryhost 9.181.86.145
dscontrol cluster set ndrack508 staletimeout 36000
dscontrol cluster set ndrack508 proportions 50 45 5 0
dscontrol port add ndrack508:9080 method nat reset no
dscontrol port set ndrack508:9080 porttype tcp
dscontrol server add ndrack508:9080:axdev01 address 9.181.86.89 router 9.181.86.89
returnaddress 9.181.86.160
dscontrol server set ndrack508:9080:axdev01 weight 5
dscontrol server add ndrack508:9080:nlsdev43 address 9.181.86.90 router 9.181.86.90
returnaddress 9.181.86.160
dscontrol server set ndrack508:9080:nlsdev43 weight 13
dscontrol server add ndrack508:9080:was2sun address 9.181.87.49 router 9.181.86.1
returnaddress 9.181.86.160
dscontrol server set ndrack508:9080:was2sun weight 13
//建立HA的心跳检测和备份关系
dscontrol highavailability heartbeat add 9.181.86.144 9.181.86.145
dscontrol highavailability backup add both auto 12345
//启动manager和advisor,manager和advisor是可选的
dscontrol manager start manager.log 10004
//advisor可以是系统缺省的,如http、telnet等,也可以自己定义advisor
dscontrol advisor start Connect 9080 Connect_9080.log
dscontrol advisor loglevel Connect 9080 1
dscontrol advisor logsize Connect 9080 unlimited
|
在另一台LB服务器wasdev05.cn.ibm.cn上的配置基本和上面一样。除了将dscontrol highavailability heartbeat add 9.181.86.144 9.181.86.145 换成 dscontrol highavailability heartbeat add 9.181.86.145 9.181.86.144,注意“心跳检测”具有方向性。上面三个backend server和LB并不都在同一网段上,在此我们不能采取MAC地址转发方式,只能采取NAT转发方式。
|
回页首 |
|
对称高可用环境中的go*脚本 在对称高可用配置中,我们还必须配置LB状态切换时执行的脚本。 在MHA环境中, LB的状态发生改变时, 会调用一系列go*脚本,做一些网络配置的操作, 主要是对网络接口添加别名地址或删除已设置的别名地址。 Edge服务器提供了go*脚本的样本。脚本样本位于 /opt/ibm/edge/lb/servers/sample 目录下。要使go*发挥作用,您需要把所需的go*脚本放在 /opt/ibm/edge/lb/servers/bin (Unix平台)目录下。
- goActive,该脚本在LB变成active状态时调用。这个脚本在对称高可用配置时是必须的。它的作用是在网络设备上添加LB服务器的集群IP和返回IP,从而能接受集群请求和返回响应。
- goStandby,该脚本在LB变为standby状态时调用。这个脚本在对称高可用配置时是必须的。它的作用是删除LB服务器网络设备上的集群IP和返回IP的配置,从而另一台LB服务器能接管它的请求。
- goInOp,该脚本在executor停止时被调用。这个脚本在对称高可用配置时是可选的。
下面给出了其中一台LB(wastst32)上的goActive和goStandby的脚本实例。 清单 2. goActive脚本示例
ND_LOGDIR=/opt/ibm/edge/lb/servers/logs/dispatcher
NETWORK=9.181.86
INTERFACE=en0
NETMASK=0xffffff00
PRIM_HOST_1=9.181.86.144
PRIM_HOST_2=9.181.86.145
if [[ "$1" = $PRIM_HOST_1 ]]; then
date >> $ND_LOGDIR/mutualha.log
print "$PRIM_HOST_1 is Active! Configuring NIC alias(es)...\n"
>> $ND_LOGDIR/mutualha.log
for CLUSTER in 185 187; do
ifconfig lo0 $NETWORK.$CLUSTER -alias
ifconfig $INTERFACE alias $NETWORK.$CLUSTER netmask $NETMASK
done
fi
if [[ "$1" = $PRIM_HOST_2 ]]; then
date >> $ND_LOGDIR/mutualha.log
print "$PRIM_HOST_1 is in Active state for cluster(s) of $PRIM_HOST_2 \n"
>> $ND_LOGDIR/mutualha.log
for CLUSTER in 155 160; do
ifconfig lo0 $NETWORK.$CLUSTER -alias
ifconfig $INTERFACE alias $NETWORK.$CLUSTER netmask $NETMASK
done
fi
echo "\nFinished!"
|
goActive脚本被调用时,会被传入一个参数,指示该LB要为哪个cluster服务。第一个if段表示该LB要为地址为9.181.86.185的cluster服务,所以它要在自己的网络适配器上配置该cluster的地址及返回地址,同时卸载loopback接口上的地址(如果已经绑定过)。第二个if段表示要为地址为9.181.86.155的cluster服务,例如另一台LB(wasdev05)出现了故障, 此时wastst32上的LB将接管wasdev05上的LB负责的请求,从而该脚本被调用,传入的参数为wasdev05的主机地址。 假如LB机器上有多个网络适配器呢?那该把cluster地址和返回地址配置在哪一个上? 答案是您需要在配置文件中指定NFA地址, 用命令 executor set nfa x.x.x.x,然后cluster地址和返回地址配置在NFA地址所在的适配器上。 清单 3. goStandby脚本示例
ND_LOGDIR=/opt/ibm/edge/lb/servers/logs/dispatcher
NETWORK=9.181.86
INTERFACE=en0
NETMASK=0xffffff00
PRIM_HOST_1=9.181.86.144
PRIM_HOST_2=9.181.86.145
if [[ "$1" = $PRIM_HOST_1 ]]; then
date >> $ND_LOGDIR/mutualha.log
print "$PRIM_HOST_1 is in Standby state for its cluster(s). \n"
>> $ND_LOGDIR/mutualha.log
for CLUSTER in 185 187; do
ifconfig $INTERFACE $NETWORK.$CLUSTER -alias
ifconfig lo0 alias $NETWORK.$CLUSTER netmask 0xffffffff
done
fi
if [[ "$1" = $PRIM_HOST_2 ]]; then
date >> $ND_LOGDIR/mutualha.log
print "$PRIM_HOST_1 is in Standby state for $PRIM_HOST_2 cluster(s). \n"
>> $ND_LOGDIR/mutualha.log
for CLUSTER in 155 160; do
ifconfig $INTERFACE $NETWORK.$CLUSTER -alias
ifconfig lo0 alias $NETWORK.$CLUSTER netmask 0xffffffff
done
fi
echo "\nFinished!"
|
可以看出,goStandby做的操作和goActive刚好互逆,即goActive在对网络适配器en0进行config和对lo0进行unconfig,而goStandby反之。 此外,这两个脚本中还可以添加一些平台特定的操作,取决于我们的需要。
|
回页首 |
|
基本测试 以下介绍了对上述HA环境的基本使用过程,主要目的是测试HA对请求进行了正常转发,且满足一定的性能要求。在一些步骤中顺带提及了应该注意的事项。 通过以下命令启动LB: dsserver start dscontrol file newload configfile //加载上述的基本配置文件,避免手工一条条执行。 停止LB: dscontrol executor stop //在dscontrol的许多命令中,executor可以简写为e dsserver stop 此时分别检查两台LB机器上的网络配置是否正确。用 ifconfig -a 检查IP地址的设置。 清单 4. LB 服务器(wastst32)上的 ifconfig -a 输出
en0: flags=5e080863,c0 UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST,GROUPRT,64BIT;
inet 9.181.86.144 netmask 0xffffff00 broadcast 9.181.86.255
inet 9.181.86.185 netmask 0xffffff00 broadcast 9.181.86.255
inet 9.181.86.187 netmask 0xffffff00 broadcast 9.181.86.255
lo0: flags=e08084b UP,BROADCAST,LOOPBACK,RUNNING,SIMPLEX,MULTICAST,GROUPRT,64BIT;
inet 127.0.0.1 netmask 0xff000000 broadcast 127.255.255.255
inet6 ::1/0
inet 9.181.86.155 netmask 0xffffffff broadcast 9.181.86.155
inet 9.181.86.160 netmask 0xffffffff broadcast 9.181.86.160
tcp_sendspace 131072 tcp_recvspace 131072 rfc1323 1
|
在wasdev05上的配置与之对称。可以看出两台LB的en0上配上了自己的primary cluster的地址和返回地址,loopback上配上了自己backup cluster的地址和返回地址。 当takeover发生时,负责接管所有cluster上请求的LB所在机器的配置与上面会有所不同,en0将配上所有的cluster地址及返回地址。 用netstat –nr查看路由表,确保没有重复或其它不正确的路由。 清单 5. 不正确的路由表示例
Destination Gateway Flags Refs Use If Exp Groups
9.181.86/24 9.181.86.187 U 0 99873 en0 - - =>
9.181.86/24 9.181.86.187 U 0 95684 lo0 - - =>
|
如果出现类似于上面的路由,数据包可能会通过回送地址,从而导致LB对backend server状态的不正确判断,如将backend server的状态识别为down。 您需要删除第二条路由: route delete 9.181.86/24 9.181.86.187 –if lo0 在该实例中,我们在三台linux上用IBM的压力测试工具akstress来分别向两个cluster发送请求。 清单 6. Akstress的基本配置文件(myedge.acf)
global_settings
Clients 5
ThreadsPerClient 1
TotalPageRequests 0
TimedRun 86400
SequentialIndexedContent on
SequentialIndexedUsers on
PersistSleepMinimum 11000
ThinkMinimum 11000
end_global_settings
stats_definition
#RequestLog request.log
#PageLog page.log
SummaryLog summary.log
RequestStatistics on
PageStatistics on
end_stats_definition
|
其中调节压力大小的主要参数为 Clients 和 TimedRun。Clients 相当于打开的浏览器个数,通过 TimedRun 我们将压力测试的时间设为24小时。 注意,在长时间的压力测试中,我们通常关闭RequestLog和PagaLog,否则产生的Log文件过大会导致akstress崩溃。 在运行前,先设置linux最多打开的文件句柄数: ulimit –n 30000 运行akstress: nohup akstress -host 9.181.86.155:9080 -config myedge.acf > output.log & nohup akstress -host 9.181.86.185:9080 -config myedge.acf > output.log & 可以通过tail –f output.log 来查看akstress的执行情况。 运行结束后,在 summary.log 中将有执行报告,其中有总共请求数,每秒请求数,每个请求数的平均时间等统计。 而LB的并发数 = requests/per second of client1 + requests/per second of client2 + requests/per second of client3。
|
回页首 |
|
监视Load Balancer 在LB服务器上,我们一般通过几个report命令来监测LB的运行状况。以下每个 report 清单中的第一行是在LB(wastst32)上执行的命令语句。 清单 7. executor report 输出
bash-2.01# dscontrol executor report
Executor Report:
----------------
Version level ................................. 06.00.02.63 - 20070222-163044 [wsbld162]
Total packets received since starting ......... 12,695,968
Packets sent to nonforwarding address ......... 8,411
Packets processed locally on this machine ..... 0
Packets sent to collocated server ............. 0
Packets forwarded to any cluster .............. 6,820,941
Packets not addressed to active cluster/port .. 172
KBytes transferred per second ................. 0
Connections per second ........................ 1,485
Packets discarded - headers too short ......... 0
Packets discarded - no port or servers ........ 0
Packets discarded - network adapter failure ... 0
Packets with forwarding errors................. 0
|
该report报告了LB的当前版本和启动以来总的数据包和连接的处理情况。 清单 8. manager report 输出
bash-2.01# dscontrol manager report
--------------------------------------------------------------------
| SERVER | IP ADDRESS | STATUS |
--------------------------------------------------------------------
| was2sun | 9.181.87.49 | ACTIVE |
| axdev01 | 9.181.86.89 | ACTIVE |
| nlsdev43 | 9.181.86.90 | ACTIVE |
--------------------------------------------------------------------
-----------------------------
| MANAGER REPORT LEGEND |
-----------------------------
| ACTV | Active Connections |
| NEWC | New Connections |
| SYS | System Metric |
| NOW | Current Weight |
| NEW | New Weight |
| WT | Weight |
| CONN | Connections |
-----------------------------
-------------------------------------------------------------------
| ndrack509 | | | | | |
| 9.181.86.185 | WEIGHT | ACTV | NEWC | PORT | SYS |
| PORT: 9080 |NOW NEW | 50% | 45% | 5% | 0% |
-------------------------------------------------------------------
| was2sun | 6 6 | 3 | 1214 | 125 | 0 |
| axdev01 | 9 9 | 3 | 3498 | 20 | 0 |
| nlsdev43 | 13 13 | 1 | 4098 | 20 | 0 |
-------------------------------------------------------------------
---------------------------------------------------
| ADVISOR | CLUSTER:PORT | TIMEOUT |
---------------------------------------------------
| connect | 9080 | unlimited |
---------------------------------------------------
|
上述manager report显示了各个backend server的当前状态和权重。权重是LB均衡请求的主要依据,LB根据四个指标计算Backend server的权重,这四个指标分别是:当前活动的连接数,新来的连接数,端口负载(由advisor统计得来),系统负载(从metric server处得来)。这四个指标对计算backend server权重的作用又不尽相同,即分别有一个计算权重,该计算权重通过配置指令来设定。上面显示中的50%,45%,5%,0%即为各自的计算权重。 先计算出每个server上的总的负荷(load): Was2sun:0.5*3 + 0.45*1214 + 0.05*125 = 1.5 + 546.3 + 6.25 = 554 Axdev01:0.5*3 + 0.45*3498 + 0.05*20 = 1.5 + 1574.1 + 1 = 1576 Nlsdev43:0.5*1 + 0.45*4098 + 0.05*20 = 0.5 + 1844.1 + 1 = 1846 于是最终的权重为: Was2sun:554/(554+1576+1846) = 0.14 Axdev01:1576(554+1576+1846) = 0.40 Nlsdev43:1846(554+1576+1846) = 0.46 该权重即为weight列中新的权重(new),weight列中的now值为当前使用中的权重。 清单 9. cluster report 输出
bash-2.01# dscontrol cluster report ndrack509
Cluster Report:
---------------
Cluster address .................... 9.181.86.185
Cluster alias on interface ......... Y
SYNs on active connections ......... 0
SYNs on finished connections ....... 0
FINs received before SYNs .......... 0
ACKs received before SYNs .......... 0
RSTs received before SYNs .......... 0
Total packets dropped .............. 0
SYN on SYN for quiesced server ..... 0
KBytes transferred per second ...... 228
Connections per second ............. 2383
|
该report输出cluster的基本信息和各类TCP包的数量。 清单 10. server report 输出
bash-2.01# dscontrol server rep ndrack509:9080:
Cluster: ndrack509 Port: 9080
-------------------------------------------------------------------------------
| Server | CPS | KBPS | Total | Active | FINed | Comp |
-------------------------------------------------------------------------------
| was2sun | 881 | 77 | 10237024 | 2 | 0 |10237024 |
| axdev01 | 557 | 73 | 11081588 | 2 | 0 |11081588 |
| nlsdev43 | 1064 | 82 | 11366194 | 2 | 0 |11366194 |
-------------------------------------------------------------------------------
|
该report的第一列为每秒连接数,第二列为每秒传输的kb数。根据CPS可以推算出LB当前的并发数(三个CPS 的值累加后折半)。 同时,通过LB的log来检查LB是否正常运行。其中hamon.log记录了HA的每次启动和停止。Mutualha.log是我们在goActive和goStandby里定义的log输出文件,可以记录HA状态改变的情况,以此判断有无takeover发生。
|
回页首 |
|
性能参数设置 下面是在对Edge load balancer做性能测试时的常见参数调整。 清单 11. Linux客户端的参数设置
ulimit -c unlimited
ulimit -l unlimited
ulimit -n 300000 //或者echo ulimit – n 300000 >> /etc/profile
echo net.ipv4.ip_local_port_range = 1024 65536 >> /etc/sysctl.conf
|
清单 12. LB服务器上的参数设置
//以下针对AIX OS而言。注意,下面参数的设置并非总有效,取决于LB所在的OS的系统配置。
no -po tcp_timewait = 1 //使用 tcp_timewait 选项来配置在 15 秒间隔中连接保持等待状态的时间长度,缺省为1
no -po tcp_sendspace=262144 //tcp发送缓冲区大小,send之前能最多缓存的数据
no -po tcp_recvspace=262144 //tcp接收缓冲区大小,recv时能最多缓存的数据
no -po tcp_ephemeral_low=8192 //指定为 TCP 短暂端口分配的最小端口号
no -po tcp_ephemeral_high=65535 //指定为 TCP 短暂端口分配的最大端口号
no -po ipignoreredirects=1 // 指定是否处理接收的重定向
no -po ipsendredirects=1 // 指定内核是否应该发送重定向信号
no -po nbc_max_cache=131072 // 指定允许在网络缓冲区高速缓存(NBC)中的高速缓存对象的最大大小,单位为字节
no -po rfc1323=1 //启用由 RFC 1323(TCP 扩展以得到高性能)指定的窗口定标和时间图标。
|
清单 13. LB的设置
dscontrol executor set fintimeout 15 //建议不低于15
dscontrol cluster set clustername proportions 50 45 5 0
dscontrol cluster set clustername maxservers 32
dscontrol cluster set clustername staletimeout 36000
|
|
回页首 |
|
几个常见问题 Q. 执行dscontrol e stop或其它dscontrol命令后,长久没反应。 A. 分析:可能原因是您的LB在忙于处理其它请求(如来自于snmp agent的请求);或者您检查LB对本机的域名解析是否正常,因为dscontrol的命令都会发往LB内部的rmi server进行处理,连接rmi server会采用本机的hostname,简单的测试办法是ping hostname。 Q. 后端backend server是正常启动的,但用dscontrol manager rep查看时,backend server被标记为down了。 A. 分析:backend server被标记为down说明advisor和backend之间的通信出了问题,一般查看LB上的路由表能发现问题所在。看是否存在冲突的路由。 Q. 两台LB机器都在正常运行,从mutuallog里却发现有takeover发生。 A. 分析:一般原因也是两台LB之间的通信出了问题,可以检查路由表,删除多余的或冲突的路由。 Q. 在NAT转发方式中,LB是怎么完成数据包的转发的? A. LB自身不会对数据包进行处理(即不会修改IP包),而是通过配置所在系统的数据包转发规则来完成。 如在Linux上,LB会配置系统的NAT表,用iptables -t nat –L即可以查看配置后的nat表,如将本机9080端口上收到的所有IP包转到后端server 9.186.117.57的9080端口上去,LB执行的等价任务是 iptables -t nat -A PREROUTING -i eth0 -p tcp -d 9.186.117.241 --dport 9080 -j DNAT --to-destination 9.186.117.57:9080 。
|
回页首 |
|
结束语 本文描述了 WebSphere Edge Server Component--Load Balancer 在对称高可用环境中的基本使用,同时告诉了您使用中的一些注意事项。 本文对您快速建立MHA环境并规划性能测试方案很有帮助。
参考资料
- WebSphere Application Server - Edge Component 信息中心 :了解更多Edge产品的信息
- Load Balancer Administration Guide :Edge Load Balancer的管理员手册
- AIX 5L Practical Performance Tools and Tuning Guide :AIX平台的常见性能调整策略和工具
- pSeries和AIX Infocenter :了解更多AIX平台的信息
|