利用WebSphere Edge Server构建冷轧系统负载均衡
某用户ERP系统运行了8年,其中冷轧车间系统运行近5年,其核心业务系统为冷轧数据汇总查询系统,基于WAS,DB2,Power小型机环境构建,稳定运行至今。由于冷轧查询功能开通了其他业务系统接口的查询功能,因此数据查询负载剧增,目前的Web负载拙荆见肘,基于业务系统的工业控制性,我们测试并比对了几种负载均衡方案,最后在F5等方案中脱颖而出,我们采用了EdgeServer的负载均衡方案。主要原因如下:
1、IBM WAS的负载均衡方案,和WAS的session负载均衡功能的java会话级负载均衡功能兼容性最佳,和硬件F5以及开源方案相比,省下了很多的配置风险。
2、对于WAS管理员的学习维护成本最低
3、可以充分利用sessionDB的数据库配置,并可以进行多层配置
4、免费!还有IBM 800的支持,何乐而不为呢?
我们的配置方式如下:
冷轧系统基于AIX环境,并基于版本依赖性的WAS版本。含Fixpack小版本号。
AIX操作系统的机器上安装 Load Balancer 组件的硬件和软件先决条件:
· AIX 版本: AIX 5.1 5100-04 维护包或 AIX 5.2 5200-01 维护包。支持 32 位或 64 位方式。
· 软件和文档所需的可用磁盘空间:50 MB,加上日志文件所需的附加空间。
· 以下网络接口卡(NIC)之一:
· 16Mb 令牌环。
· 10Mb 以太网。
· 100Mb 以太网。
· 1Gb 以太网。
· 光纤分布式数据接口(FDDI)。
· 多端口以太网 NIC。
· Java 2 Runtime Environment:此软件在 IBM AIX Developer Kit, Java 2 Technology Edition, 1.4.1.x 的任何版本中提供。
系统拓扑:
Edge Server安装 (172.16.5.30和172.16.5.31)
- 以root用户登入
- 装入WebSphere Edge Server 的光盘,mount /cdrom
- 如果未建立/cdrom,则:
- mkdir /cdrom
- mount –v cdrfs –p–r /dev/cd0 /cdrom
- 进入/cdrom,执行./install (如果AIX版本为5.1,必须有bos.iocp 5.1.0.11或以上版本,如果AIX版本为5.2,则必须将光盘拷贝至硬盘目录中,注释掉install中的相关版本检查部分,然后从硬盘上安装)
- 在欢迎窗口选Next
- 许可证协议页面,选择Yes
- 选择安装界面语言(中、英文均可,但中文需要操作系统语言包支持,这里仅以英文为例)并选择 Next
- 在组件选择界面,选中Load Balancer中的Administration和Dispatcher,可以看到License和Runtime被同步选中,点Next
- 察看待安装选项,点Proceed
- 等待安装完成,点击Finish关闭窗口
Web服务器层群集配置暨Edge Server设置
对于该层群集的设置主要集中在对于30和31两台机器上。在该阶段中,我们需要分别配置并验证从Edge服务器(30上或31上)均可成功分发请求到30和31的Web服务器上。(Web服务器通过插件同后端应用服务器一级的连接分发,我们已经在上一节做了验证)所以在这里我们以30作分发控制器为例说明配置:
31主机上操作
vi /etc/hosts 添加:
172.16.5.30 edgesvr1
172.16.5.31 edgesvr2
172.16.5.13 wisco_sit
其中后一条是我们要用于访问Web服务器的群集名和群集地址
配置LoopBack 网卡,并删除额外路由
ifconfig lo0 alias 172.16.5.13 netmask 255.255.255.0
route delete 172.16.5/24 172.16.5.13
30主机上操作
vi /etc/hosts 添加:
172.16.5.30 edgesvr1
172.16.5.31 edgesvr2
172.16.5.13 wisco_sit
在已安装了Edge Server的30主机上发出 dsserver start命令启动DispatchingServer (由于/usr/java131已经在系统的环境路径中,所以可以直接执行)
执行lbadmin,打开Load Balancer 配置窗口
点击 Dispatcher - 右键 – Connect to Host
在跳出的提示“选择主机名:EDGESVR1 on port 10099”窗口中点OK
管理配置客户端窗口成功连接连接到Host:EDGESVR1,选Host:EDGESVR1 – 右键– Start Executor
出现Executor: 172.16.5.30,选中它,右键Add Cluster,在弹出窗口中输入
Cluster Wisco_sit
Cluster Address 172.16.5.13
其余采用默认设置,并点OK
出现Cluster: Wisco_sit,选中它,右键 – Add Port
Port 80
Forwarding Method 保持缺省的MAC设置
点OK
选中出现的Port: 80 标志,右键 – Add Server
Server EDGESVR1
Server address 172.16.5.30
选 OK
重复一次添加Server edgesvr2 (172.16.5.31)
选Host: EDGESVR1,右键 – Start Manager
选中出现的Manager,右键 – Start Advisor
Advisor name: HTTP
Port number: 80
点 OK
选中 Advisor: Http 80
在en0上添加地址别名(作为广播地址)
ifconfig en0 alias 172.16.5.13 netmask 255.255.255.0
(Optional)同被分发机一样,在非HA情况下,为了在reboot主机后地址不丢失,我们要将上面的添加别名的命令加入/etc/rc.net中保证每次启动服务器时都被执行,在测试中未被配置
此时再观察Load Balancer窗口中,选中Advisor: Http80,可以看到服务器EDGESVR1和edgesvr2出现在右边的CurrentStatistics页面中,并呈现相应的动态权重。(如果此时30和31上的IBM Http Server处于关停状态,则相应数值显示为“-1”,需要分别启动它们:/usr/IBMHttpServer/bin/apachectlstart )
最后,我们要保存我们的设置。选中Host: EDGESVR1,右键 – SaveConfiguration File As ,在弹出窗口中选default.cfg,选 OK
同样,在31主机上也作同样的操作。
Edge Server 接管设置
要进行Edge Server的接管设置
在主机30上
修改default.cfg
vi /opt/ibm/edge/lb/servers/configurations/dispatcher/default.cfg
在dscontrol executor start命令后加入如下命令段落:
dscontrol highavailabilityheartbeat add 172.16.5.30 172.16.5.31
dscontrol highavailabilitybackup add primary=172.16.5.31 auto 10006
dscontrol highavailabilityreach add 172.16.5.33
删除下面的命令
dscontrol cluster add wisco_sitaddress 172.16.5.33 primaryhost 172.16.5.30
用:wq保存退出 (在添加HA中的恢复策略时,有手动和自动2种模式,参数分别为 manual和auto,自动恢复时只要主机器再次可运行,就继续路由信息包,而手工恢复则需要使用takeover命令强制将信息包路由回主机器。两种方式都可,但该设置在主、备机上必须一致。)
拷贝并修改脚本文件
进入/opt/ibm/edge/lb/servers/bin目录,分别执行
cp../samples/go* .
cp../samples/high* .
在HA环境下我们需要4个脚本文件,分别是goAtive,goStandby,goInOp和highavailChange,对于这4个脚本文件的修改,看来很复杂,实际总结起来,只有2项工作,一是要修改其中几个重要的变量值,将原样本中的赋值改为你实际系统中的值(如NETWORK,INTERFACE,NETMASK,DESTINATION等),二是将一些日志和AIX 5L上的相关设置的注释标志去掉,使其生效。
为了更好的理解这几个脚本文件的设置,在此将它们的功能分别说明如下:
goAtctive:当Dispatcher 进入活动状态并开始路由信息包时执行goActive脚本,在HA配置下运行Dispatcher,此脚本删除回送别名并添加设备别名
goStandby:当Dispatcher 进入备用状态时执行goStandby脚本,监视活动机器的状态,但是不路由任何信息包。在HA配置下必须的脚本,用于删除设备别名并添加回送别名
goInOp:当Dispatcher执行程序停止和执行程序第一次启动前执行goInOp脚本。通常在高可用性配置下运行Dispatcher,可以创建此脚本。此脚本删除所有设备和回送别名
highavailChange:无论高可用性状态在Dispatcher中如何更改,highavailChange脚本都执行。你可以用该脚本使用状态更改信息,如记录事件乃至提醒管理员。
vi goActive.sample,
修改设置,使其如下所示:
LB_LOGDIR=/opt/ibm/edge/lb/servers/logs/dispatcher
NETWORK=172.16.5
INTERFACE=en0
NETMASK=0xffffff00
# For AIX 5.1 Only - uncomment and setthis value
DESTINATION=172.16.5/24
date >> $LB_LOGDIR/ha.log
print "This machine is Active. Aliasing cluster address(es) to NIC \n" >> $LB_LOGDIR/ha.log
for CLUSTER in 13; do
ifconfig lo0 delete $NETWORK.$CLUSTER
ifconfig $INTERFACE alias $NETWORK.$CLUSTER netmask $NETMASK
# For AIX 5.1 Only - uncomment thisline
# route delete $DESTINATION $NETWORK.$CLUSTER
done
注意这里的goActive脚本中,我们没有根据注释中的提示执行最后删除额外路由的操作(route delete $DESTINATION $NETWORK.$CLUSTER,因为我们在用ifconfig 向 en0上添加 alias 时没有产生额外路由172.16.5/24 172.16.5.13。关于这一项的检查,可以用netstat –nr来察看(在配置单个Edge Server时应该已经可以看到有无额外路由生成)。在不同的环境中,对于这一条需要先进行验证。
cp goActive.sample goActive 拷贝成为可执行脚本
vi goStandby.sample
修改设置,使其如下所示:
LB_LOGDIR=/opt/ibm/edge/lb/servers/logs/dispatcher
NETWORK=172.16.5
INTERFACE=en0
NETMASK=0xffffff00
# For AIX 5.1 Only - uncomment and setthis value
DESTINATION=172.16.5/24
#
date >> $LB_LOGDIR/ha.log
print "Going into Standby mode.\n" >> $LB_LOGDIR/ha.log
print "Deleting the device aliases and adding the loopbackaliases" >> $LB_LOG
DIR/ha.log
for CLUSTER in 13; do
ifconfig $INTERFACE delete $NETWORK.$CLUSTER
ifconfig lo0 alias $NETWORK.$CLUSTER netmask $NETMASK
# For AIX 5.1 Only - uncomment thisline
route delete $DESTINATION $NETWORK.$CLUSTER
done
cp goStandby.sample goStandby
vi goInOp.sample
修改如下
LB_LOGDIR=/opt/ibm/edge/lb/servers/logs/dispatcher
NETWORK=172.16.5
INTERFACE=en0
#
date >> $LB_LOGDIR/ha.log
print "Executor has stopped. Removing loopback and device aliases. \n" >> $L
B_LOGDIR/ha.log
for CLUSTER in 13; do
ifconfig lo0 delete $NETWORK.$CLUSTER
ifconfig $INTERFACE delete $NETWORK.$CLUSTER
done
cp goInOp.sample goInOp
cp highavailChange.sample highavailChange
在主机31上
修改default.cfg
vi /opt/ibm/edge/lb/servers/configurations/dispatcher/default.cfg
在dscontrol executor start命令后加入如下命令段落:
dscontrol highavailabilityheartbeat add 172.16.5.31 172.16.5.30
dscontrol highavailabilitybackup add primary=172.16.5.30 auto 10006
dscontrol highavailabilityreach add 172.16.5.33
删除下面的命令
dscontrol cluster add wisco_sitaddress 172.16.5.33 primaryhost 172.16.5.30
拷贝并修改脚本文件
进入/opt/ibm/edge/lb/servers/bin目录,分别执行
cp ../samples/go*.
cp../samples/high* .
我们需要4个脚本文件,goAtive,goStandby,goInOp和highavailChange
vi goActive.sample
修改如下
LB_LOGDIR=/opt/ibm/edge/lb/servers/logs/dispatcher
NETWORK=172.16.5
INTERFACE=en0
NETMASK=0xffffff00
# For AIX 5.1 Only - uncomment and setthis value
DESTINATION=172.16.5/24
#
date >> $LB_LOGDIR/ha.log
print "This machine is Active. Aliasing cluster address(es) to NIC \n" >> $LB_LOGDIR/ha.log
for CLUSTER in 13; do
ifconfig lo0 delete $NETWORK.$CLUSTER
ifconfig $INTERFACE alias $NETWORK.$CLUSTER netmask $NETMASK
# For AIX 5.1 Only - uncomment thisline
# route delete $DESTINATION $NETWORK.$CLUSTER
done
cp goActive.sample goActive
vi goStandby.sample
修改如下
LB_LOGDIR=/opt/ibm/edge/lb/servers/logs/dispatcher
NETWORK=172.16.5
INTERFACE=en0
NETMASK=0xffffff00
# For AIX 5.1 Only - uncomment and setthis value
DESTINATION=172.16.5/24
#
date >> $LB_LOGDIR/ha.log
print "Going into Standby mode.\n" >> $LB_LOGDIR/ha.log
print "Deleting the device aliases and adding the loopbackaliases" >> $LB_LOGDIR/ha.log
for CLUSTER in 13; do
ifconfig $INTERFACE delete $NETWORK.$CLUSTER
ifconfig lo0 alias $NETWORK.$CLUSTER netmask $NETMASK
# For AIX 5.1 Only - uncomment thisline
route delete $DESTINATION $NETWORK.$CLUSTER
done
l cp goStandby.sample goStandby
u vi goInOp.sample
l 修改如下:
LB_LOGDIR=/opt/ibm/edge/lb/servers/logs/dispatcher
NETWORK=172.16.5
INTERFACE=en0
#
date >> $LB_LOGDIR/ha.log
print "Executor has stopped. Removing loopback and device aliases. \n" >>$LB_LOGDIR/ha.log
for CLUSTER in 13; do
ifconfig lo0 delete $NETWORK.$CLUSTER
ifconfig $INTERFACE delete $NETWORK.$CLUSTER
done
cp goInOp.sample goInOp
cp highavailChange.sample highavailChange
在30和31上分别执行dsserver start,启动Edge Server服务
验证Edge Server HA接管
验证Edge Server的HA接管比较简单,只要在Primary Edge Server路由信息包期间,将其进程停止(甚至拔掉网线、关闭电源等方式均可,但在测试过程中实施起来可能会较麻烦,所以在本次测试中未采用。),保证我们仍然可以通过群集地址或主机名访问到相应的内容,就可以进行验证了。在具体的测试中,我们在客户端浏览器中发送http://172.16.5.13请求,返回index.html页面显示。在30主机上执行dsserver stop命令(或者Kill掉相应进程),这时,30上的分发器已不工作。打开新的浏览器窗口(防止IE的缓存特性),再次发送http请求,可以看到,index.html被正常返回了,也就是说,分发的任务被自动转移到了原来的备份Dispatcher上。
l 对于恢复策略为自动的情况,到30主机上,执行dsserver start,信息包被自动重新路由回30Dispatcher处理,执行lbadmin打开LB管理配置窗口并连接到Host: edgesvr1。可以看到Executor为30,再分别察看群集中server: edgesvr1和server: edgesvr1的连接数,记录下来。在客户端打开浏览器,访问http://172.16.5.13,然后再刷新,可以看到edgesvr1或edgesvr2中有一个的连接数增加了1。在LB窗口中,也可以看到Executor的当前状态。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。