Weblogic加Apache的负载均衡以及群集配置
原文地址 http://blog.csdn.net/big1980/article/details/6291416
Weblogic的负载均衡可以通过软件和硬件的方式实现。硬件可以使用F5等设备,软件一般使用apache来实现。下面说明使用apache的具体方法。
1. 环境准备
Apache 2.2 http://httpd.apache.org/download.cgi
Weblogic 9.2
三台机器,用途分别如下:
2. 配置weblogic
2.3 配置weblogic.xml文件
为了支持session复制,为应用程序新建weblogic.xml文件,放置到ear文件的meta-inf目录下。内容为:
<?xml version="1.0" encoding="GBK"?>
<weblogic-web-app xmlns="http://www.bea.com/ns/weblogic/90">
<session-descriptor>
<persistent-store-type>replicated</persistent-store-type>
<sharing-enabled>true</sharing-enabled>
</session-descriptor>
</weblogic-web-app>
3. 配置apache
从{weblogic_home}/server/plugin/win/32 目录,复制mod_wl_22.so 到 {apache_home}/modules目录下。
修改httpd.conf文件,增加如下内容:
LoadModule weblogic_module modules/mod_wl_22.so
<IfModule mod_weblogic.c>
WeblogicCluster 192.168.10.101:7010,192.168.10.102:7011
MatchExpression *
WLLogFile "D:/Program Files/Apache Software Foundation/Apache2.2/logs/wlproxy.log"
Debug On
DebugConfigInfo On
KeepAliveEnabled On
KeepAliveSecs 15
</IfModule>
4. 部署应用程序
启动machine2上面的admin server,进入控制台,部署应用程序,注意选择target时,要指定为cluster_test。
5. 启动weblogic
5.1 启动machine2上面的admin server
在machine2机器上,运行命令{weblogic_home}/user_projects/domains/cluster_domain/bin/startWeblogic.cmd
5.2 启动machine2上面的server1
在machine2机器上,运行命令{weblogic_home}/user_projects/domains/cluster_domain/bin/startManagedWeblogic.cmd server1 192.168.10.101:7001
5.3 启动machine3上面的server2
在machine3机器上,运行命令{weblogic_home}/user_projects/domains/cluster_domain/bin/startManagedWeblogic.cmd server2 192.168.10.101:7001
6. 启动apache服务器
7. 相关约束条件
7.1 所有Managed server的绑定地址必须是静态地址,不能是动态地址
7.2 如果需要在wan上面访问,admin server所在的机器必须要有对外的IP地址
8. 问题诊断方法
MulticastMonitor 工具 监视群内广播数据,一般用来检查群内通信是否正常。使用方法如下:
1. 运行 {weblogic_home}/user_projects/domains/{domain_name}/bin/setdomain.cmd 设置环境变量,如classpath等,
2. 运行 java weblogic.cluster.MulticastMonitor {群广播地址} {广播端口} {域名称} {集群名称}
3. 运行后可以看到群内各个managed server之间的广播数据,据此可以判断每个服务器的通信是否正常。
MulticastTest 工具 在各个managed server之间发送数据,一般用来检查群内各个server之间通信是否正常。此命令需要在每个server所在的机器上运行。使用方法如下:
1. 运行 {weblogic_home}/user_projects/domains/{domain_name}/bin/setdomain.cmd 设置环境变量,如classpath等,
2. 运行 java utils.MulticastTest -n {消息名称} -a {广播地址} -p {广播端口} (这些参数不能与已有的重复)
每个server上运行的消息名称不能相同。
广播地址不能是已经配置了的群广播地址,即:需要另外使用一个用来测试用的广播地址。
附表-插件的通用参数(大小写区分):
参数 | 默认值 | 描述 |
WebLogicHost (如果代理到单个WebLogic服务器,那么应该设置该参数) | none | HTTP请求被递交到该WebLogic Server主机(或者是定义在WebLogic Server中运行的类似于Web server的虚拟主机名)如果使用集群,那么应该使用WebLogicCluster参数而不是WebLogicHost参数。 |
WebLogicPort (如果代理到单个WebLogic服务器,那么应该设置该参数) | none | WebLogic服务器监听WebLogic连接请求的端口。(如果在插件与WebLogic服务器之间使用SSL,那么应该把该参数设置为SSL监听端口(见8-4页的"配置监听端口")并将SecureProxy参数设置为ON)。 如果使用WebLogic集群,那么应该设置WebLogicCluster参数而不是WebLogicPort参数。 |
WebLogicCluster (如果代理到一个WebLogic服务器集群,那么必须设置该参数) | none | 集群中的WebLogic服务器列表,用于负载平衡目的。该列表由逗号分隔开的host:port组成。例如: WebLogicCluster myweblogic.com:7001, yourweblogic.com:7001,theirweblogic.com:7001 如果插件与WebLogic服务器之间使用SSL协议,那么将端口号设置为SSL监听端口(见8-3页的"配置监听端口")并将SecureProxy参数设置为ON。 应该用该参数取代WebLogicHost与WebLogicPort参数,WebLogic Server首先查找WebLogicCluster参数,如果没有找到该参数,它将寻找并使用WebLogicHost与WebLogicPort参数。 插件对所有可用的集群成员进行轮询。该参数所指定的集群列表是服务器与插件共同维护的动态列表的初始值。WebLogic服务器与插件将根据新加入的、失败的以及恢复的集群成员的情况动态地更新集群列表。 如果将DynamicServerList参数设置为OFF(只适用于Microsoft Internet Information Server),那么集群列表的动态更新被禁用。插件将请求导向集群中最初创建cookie的那个服务器上(请求包含cookie、URL-encoded会话或存于POST数据中的会话信息)。 |
PathTrim | none | 在请求被转交到WebLogic服务器之前,被插件从原始URL中裁剪掉的字符串。例如:如果原始URL为 http://myWeb.server.com/weblogic/foo被传递到插件进行解析且PathTrim参数被设置为/weblogic,那么传递到WebLogic服务器的URL变为:http://myweblogic.server.com:7001/foo |
PathPrepend | null | 加在原始URL前的前缀字符串,该动作发生在PathTrim被裁剪后,请求转向WebLogic服务器之前。 |
ConnectTimeoutSecs | 10 | 插件进行WebLogic服务器主机连接尝试的时间上限。该值应该大于ConnectRetrySecs参数。如果超过ConnectTimeoutSecs还没能连接成功,即使进行了适当次数的连接重试(见ConnectRetrySecs参数),也将把HTTP 503/Service Unavailable响应返回给客户端。 可以使用ErrorPage参数定制错误响应。 |
ConnectRetrySecs | 2 | 该参数以秒为单位,设置了两次WebLogic Server主机(或集群中的所有服务器)连接尝试之间,插件的休眠时间。该参数的值应该小于ConnectTimeoutSecs。插件在返回HTTP 503/Service Unavailable响应之前,它将进行的连接次数为ConnectTimeoutSecs除以ConnectRetrySecs所得的值。 如果不希望重试连接,那么应该将ConnectRetrySecs值应该与ConnectTimeoutSecs相等。不过,插件会至少进行两次连接尝试。 可以用ErrorPage参数定制错误响应。 |
Debug | OFF | 设置调试操作时的日志类型。在生产系统中不建议你开启这些调试选项。 在UNIX系统中,调试信息被写到/tmp/wlproxy.log文件中;在Windows NT系统,调试信息被写到c:/temp/wlproxy.log文件中,通过WLLogFile参数,你可以使用其他路径下的其他文件覆盖文件名、路径参数。你可以设置以下日志选项(其中HFC, HTW, HFW, HTC可以联合使用,它们之间用逗号隔开,如"HFC, HTW"); ON 插件只记录报告性消息与错误消息 OFF 不记录调试信息 HFC 记录来自客户端消息、报告性消息以及错误消息的消息头。 HTW 记录从weblogic发送来的消息头,报告性消息与错误消息 HFW 记录来自weblogic服务器消息的消息头,报告性消息与错误消息 HTC 记录发送到客户端消息的消息头,报告性消息与错误消息 ALL 记录发送到客户端以及客户端发送的消息的头,发送到WebLogic服务器以及WebLogic服务器发送的消息头,报告性消息,错误消息 |
WLLogFile | 参见Debug参数 | 指明当Debug参数为ON时,产生日志文件的路径和文件名,在设置该参数前,必须创建相应目录。 |
DebugConfigInfo | OFF | 启用特殊查询参数"_WebLogicBridgeConfig"。该参数可以被用来了解插件的配置参数的细节。 例如,如果把DebugConfigInfo设置为ON,那么"_WebLogicBridgeConfig"被启用。发送一个包含查询字符串?_WebLogicBridgeConfig的请求,插件将收集配置信息有运行时的统计信息并将这些信息返回给浏览器。在处理该请求时,插件没有连接到WebLogic服务器。 该参数只应严格用于调试目的。消息的输出格式随版本的变化而不同。为了安全起见,在生产环境中应该将该参数设置为OFF。 |
StatPath(Microsoft Internet Information Server 插件没有这个参数。) | false | 如果把该参数设置为真,插件在把请求传递到WebLogic服务器之前检查被转换的路径是否存在或及其访问权限("Proxy-Path-Translated")。如果文件不存在,将把HTTP 404 File Not Found响应返回给客户端。如果文件存在,但它的权限不是world-readable,那么将返回HTTP 403/Forbidden响应。这两种情况下Web服务器处理这些响应的缺省机制是执行响应的体内容。如果WebLogic服务器的Web应用与Web服务器具有相同的文档根,那么该选项非常有用。 可以使用ErrorPage参数定制错误响应。 |
ErrorPage | none | 可以制作自己的错误响应页面,在Web服务器不能将请求代理到WebLogic服务器时使用。 设置该参数的方式有两种:
|
HungServerRecoverSecs | 300 | 定义了插件等待WebLogic服务器响应请求的时间。在等待了HungServerRecoverSecs时间后,插件还没有得到服务器的响应,那么它将宣布该服务器已经死机并失败转移到下一个服务器。应该把该参数设置为一个较大的值。如果所设置的值小于servlets进行处理的时间,那么会得到意想不到的后果。 最小值为:10 最大值为:600 |
Idempotent | ON | 如果该参数设置为ON,那么当服务器在指定的HungServerRecoverSecs时间没有响应,那么插件将进行容错处理。如果设置为OFF,插件将不进行失败转移。如果所使用的是Netscape Enterprise Server插件或Apache HTTP Server插件,不同的URL与MIME类型可以有不同的Idempotent参数设置。 |
CookieName | JSESSIO NID | 如果改变了WebLogic服务器Web应用中的WebLogic服务器会话cookie的名字,那么相应地应该将插件的CookieName参数设置为相同的值。WebLogic会话cookie的名字在特定于WebLogic的分发描述符的<session-descriptor>元素中定义 |
DefaultFileName | none | 如果URI为"/",插件将执行以下步骤: 1.裁剪掉PathTrim参数所指定的路径 2.在后面加上DefaultFileName所指定的文件名 3.在前面加上PathPrepend参数所指定的值这样处理可以防止WebLogic服务器的重定向。将DefaultFileName设置为代理WebLogic服务器的Web应用的缺省欢迎页面。例如,如果DefaultFileName被设置为welcome.html,那么下面这个HTTP请求: 变为:http://somehost/weblogic/welcome.html。只有当所有被重定向的web应用指定相同的欢迎页面, 该参数才起作用。可以参见以下页面的"Configuring Welcome Pages"部分: http://e-docs.bea.com/wls/docs61/webapp/components 对于Apache用户,所使用的是Stronghold或Raven的版本,在Location块中定义参数,而非IfModule块中 |
MaxPostSize | -1 | POST数据的允许的最大长度。如果内容的长度超过MaxPostSize,插件将返回一个错误消息。如果设置为-1,将不检查POST数据的长度。设置该参数可以防止通过发送大量数据使服务器过载的"拒绝服务攻击"。 |
MatchExpression (该参数只适用于Apache HTTP服务器) | none | 如果采用MIME类型方式代理,应该在一个IfModule块中使用MatchExpression参数设置文件名模式。 下面的一个例子说明了使用MIME类型方式的代理: <IfModule mod_weblogic.c> MatchExpression *.jsp WebLogicHost=myHost|paramName=value </IfModule> 下面的一个例子说明了使用路径方式的代理: <IfModule mod_weblogic.c> MatchExpression /weblogicWebLogicHost=myHost|paramName=value </IfModule> |
FileCaching | ON | 当该参数设置为ON,如果请求中的POST数据大于2084个字节,那么POST数据保存在硬盘的一个临时文件中,然后以8192字节为单位传给WebLogic服务器。但将FileCaching设置为ON,可能引起的问题是浏览器上将显示一个进展条表明正在进行下载。即使文件还在传输,浏览器也会显示下在已经完成。 如果该参数设置为OFF,那么当POST数据大于2084字节时,数据保存在内存中并以8192字节为单位发送到WebLogic服务器。将参数设置为OFF可能会引起问题。因为插件不能进行失败转移,因此如果请求被处理时WebLogic 服务器宕机了,那么数据将被丢失。 |
WlForwardPath (只有Microsoft IIS才需要定义该单数) | null | 如果WLForwardPath设置为"/",那么所有请求都被代理到WebLogic服务器。如果只想代理以特定字符串开头的请求,那么应该将WlForwardPath参数设置为这个字符串。例如,将WlForwardPath设置为/webogic,那么所有以/weblogic开始的请求都将被代理到WebLogic服务器。 如果采用路径方式的代理,那么必须设置该参数。可以为该参数设置多个字符串,字符串之间用逗号隔开,例如:WlForwardPath=/weblogic,/bea。 |
KeepAliveSecs (不要为Apache HTTP服务器版本1.3.x定义该参数) | 30 | 该参数定义了隔多长时间后,插件与WebLogic服务器之间的非活动连接将被关闭。要使该参数生效,KeepAliveEnabled参数应该设置为true。 该参数的值应该小于或等于在管理控制台的Server/HTTP标签页中Duration字段的值,或者是服务器Mbean中的keepAliveSecs属性的值。 |
KeepAliveEnabled | True | 启用插件与WebLogic服务器之间的连接池。 |
QueryFromRequest (只适用于Apache HTTP服务器) | OFF | 如果该参数设置为ON,那么Apache插件使用(request_rec *)r->the request将查询字符串传递到WebLogic服务器。(详细信息,请参见Apache文档。)这种行为在以下场合非常有用: 当Netscape 版本4.x浏览器发出的请求的查询字符串中包含空格。 如果你在HP上使用Raven Apache 1.5.2 如果该参数设置为OFF,那么Apache插件使用(request_rec *)r->args将查询字符串传递到WebLogic服务器。 |
MaxSkips (在Apache 1.3 中不可用) | 10 | 只有当DynamicServerList设置为OFF时,该参数的设置才生效。如果WebLogicCluster参数所设置的列表或由WebLogic服务器返回的动态集群列表中的WebLogic服务器失败了,那么该失败的服务器被标记为"坏的",同时插件将连接到列表中的下一个服务器中。 MaxSkip设置了插件重试"坏"服务器的次数。每当插件接收到一个唯一请求(即不包含cookie的请求)时,它会连接到列表中的一个新服务器上 |
DynamicServerList (只能在Microsfot IIS中设置该参数) | ON | 如果该参数设置为OFF,在对由插件所代理的请求进行负载平衡时,不使用动态集群列表,而是使用WebLogicCluster参数指定的静态列表。通常情况下,该参数应该设置为ON。将该参数设置为ON,可能会产生以下影响:
|