(本文讲述如何在WebLogic Server 9.2上配置集群,以及通过Http代理方式Proxy Server来访问集群)
预备知识
什么是Domain和Server
Domain
Domain是WebLogic Server实例的基本管理单元。所谓Domain就是,由配置为Administrator Server的WebLogic Server实例管理的逻辑单元,这个单元是有所有相关资源的集合。
Server
Server是一个相对独立的,为实现某些特定功能而结合在一起的单元,该服务用于部署应用程序,其中代理服务还在该Server下建立。
Domain and Server的关系
一个Domain 可以包含一个或多个WebLogic Server实例,甚至是Server集群。一个Domain中有一个且只能有一个Server 担任管理Server的功能,其它的Server具体实现一个特定的逻辑功能。
负载均衡集群
高扩展型集群,即负载均衡集群技术,就是带均衡策略(算法)的服务器集群。负载均衡集群在多节点之间按照一定的策略(算法)分发网络或计算处理负载。负载均衡建立在现有网络结构之上,它提供了一种廉价有效的方法来扩展服务器带宽,增加吞吐量,提高数据处理能力,同时又可以避免单点故障。以Web访问为例,后台的多个Web服务器上面有相同的Web内容,Internet客户端的访问请求首先进入一台服务器,由它根据负载均衡策略(算法)合理地分配给某个服务器,其中服务器可以是同一台机器,也可不同机器。
WebLogic 集群的工作机制
每一个Clustered service,在每一个server上都会有一个instance,即一个replica,这些replicas集合在一起形成一个replica-aware stub。这些stubs负责客户端与相关的服务器段对象的通信,当客户端请求该service时,实际上是向stub发出请求,stub根据不同的算法调用集合中某一replica,如果调用失败,stub会检测到错误并重新调用其它的replica。Cluster支持多种算法:随机、轮循、基于性能的负载均衡的轮循(Weight-based round-robin)、根据参数值调用(Parameter-based routing)。WebLogic Cluster通过负载均衡和容错最大程度的实现了它的可伸缩性和可用性。为了提高Cluster的可伸缩性,必须保证充分利用每一个Server。WebLogic可以在不同平台、不同性能的机器上安装Server并进行Cluster,然后采用Weight-based round-robin算法达到负载均衡,从而使每一个Server都得到充分的利用。
本文环境
Ø 平台:Windows 2003
Ø 软件:WebLogic Server 9.2
配置WebLogic Server集群
WebLogic集群的体系结构
单层混合型的集群架构(Cluster)
这种架构将所有的Web应用以及相关的服务应用全部置于集群中的单一WLS实例中,这种架构的优势在于:
Ø 易于管理
Ø 灵活的负载平衡机制
Ø 更强的安全控制
多层结构的集群架构(Cluster)
这种架构使用两个WLS集群,一个放置表静态内容和集群Servlet,另一个放置集群EJB。一般应用于下面这些情况:
Ø 在负载平衡机制需要调用集群EJB中的方法时;
Ø 在提供内容与提供对象的服务之间需要更大的机动性时;
Ø 在需要更高的系统稳定性时;
根据东方资产的要求采用单层混合型的集群架构可以满足要求。
配置集群应用的必要条件
Ø 集群中的所有Server必须位于同一网段,并且必须是IP广播(UDP)可到达的
Ø 集群中的所有Server必须使用相同的版本,包括Service Pack
Ø 集群中的Server必须使用永久的静态IP地址。动态IP地址分配不能用于集群环境。如果服务器位于防火墙后面,而客户机位于防火墙外面,那么服务器必须有公共的静态IP地址,只有这样,客户端才能访问服务器
Ø 要以CLUSTER方式运行,必须有包含CLUSTER许可的LICENSE才行(从Bea网站上下载的试用版本就可以进行Cluster配置)
配置前的准备工作
在配置集群应用前要对集群的配置信息有一个良好的设计,下面就是我们这次配置的集群信息:
在同一网段内的不同机器上配置集群
机器类型 | 操作系统 | 硬件配置 | 角色 | 备注 |
PC | Win2003 Server | IP:90.0.12.20 PORT:7001 | Administrator Server | 管理服务 |
PC | Win2003 Server | IP:90.0.12.20 PORT:8080 | Proxy Server | 代理服务 |
PC | Win2003 Server | IP:90.0.12.20 PORT:7082 | Managed Server | 受管理服务 |
PC | Win2003 Server | IP:90.0.12.112 PORT:7084 | Managed Server | 受管理服务 |
硬件配置中90.0.12.20,与90.0.12.112分别是两台不同的机器,集群也可以配置在同一台机器中。
Weblogic安装以及集群配置的操作
使用Domain Configuration Wizard进行配置
创建新的Domain
选择“Toolà Configuration Wizard”,单击“下一步”按钮
选择安装域源
选择安装“WebLogic Server”,单击“下一步”按钮
配置管理员用户名和密码
输入Weblogic管理员管理服务器(AdminServer)的用户名和密码,在此以“weblogic”作用登录管理服务器的用户名和密码,单击“下一步”按钮
配置域启动模式和JDK
选择“生产模式”和“JRockt SDK”后,单击“下一步”按钮
选择是否自定义环境和服务设置
选择“是”后,单击“下一步”按钮
配置管理服务器
输入Administrator Server的名称,监听地址,监听端口,如果需要SSL支持的话可以在“SSL enabled”后面的复选取框上打勾,配置SSL监听端口,单击“下一步”按钮
配置受管理服务器(代理服务器实际上也是一个受管理服务器)
输入Managed Server的名称,监听地址,监听端口,如果需要SSL支持的话,可以在“SSL enabled”复选框上打勾,配置SSL监听端口。可以配置多个Managed Server。单击“下一步”按钮
(注:我这台机的IP是:90.0.12.20,另一台机上要安装受管理服务器的IP地址是:90.0.12.112)
配置群集信息
单击“切换显示”,再单击“添加”,输入Cluster的名称,Multicast address组播地址(这个做什么用暂不明白),Cluster的组播地址和端口,Cluster地址可输可不输。单击“下一步”按钮
将“受管理服务器”添加到“集群”中
选择左面列表中的Managed Server,将其添加到右面的列表中,这里代理服务器不要添加到右边,单击“下一步”按钮
创建HTTP代理应用程序
选中“为群集创建Http代理”,myCluster代理服务器选择前面没有加入myCluster的ProxyServer,单击“下一步”按钮
配置计算机
在此不对计算机进行配置,单击“下一步”按钮
检查Weblogic域
在此检查前面所做的配置,如果没有问题单击“下一步”按钮
创建Weblogic域
输入要创建的域名和位置,此处域名可输入为Clust_domain,输入完成后单击“创建”按钮
正在创建域
创建无误后,单击“完成”按钮
编辑启动WebLogic服务文件
Ø 编辑口令文件
在刚才创建的域目录下建立boot.properties文件,内容为:
username=weblogic
password=weblogic
如果不创建CMD启动服务时,都需要手动输入用户名和密码
Ø 编辑启动管理服务器的文件
在刚才创建的域目录下的bin目录中创建startAdminServer.cmd,内容为:
@ECHO OFF
@REM 启动管理服务器.
start .\startWebLogic
Ø 编辑启动代理服务器的文件
在刚才创建的域目录下的bin目录中创建startProxyServer.cmd,内容为:
@ECHO OFF
@REM 启动代理服务器.
@REM 使用startManagedWeblogic命令启动Managed Server,它的命令格式是:
@REM startManagedWeblogic.cmd Managed Server的名称 Administrator Server地址
@REM startManagedWeblogic 受管理服务器名称 管理服务器URL
start .\startManagedWebLogic ProxyServer http://90.0.12.20:7001
Ø 编辑启动受管理服务器(ManagedServer_1)的文件
在刚才创建的域目录下的bin目录中创建startManagedServer_1.cmd,内容为:
@ECHO OFF
@REM 启动受管理服务器ManagedServer_1.
@REM 启动Managed Server
@REM 使用startManagedWeblogic命令启动Managed Server,它的命令格式是:
@REM startManagedWeblogic.cmd Managed Server的名称 Administrator Server地址
@REM startManagedWeblogic 受管理服务器名称 管理服务器URL
start .\startManagedWebLogic ManagedServer_1 http://90.0.12.20:7001
(注:使用startManagedWeblogic命令启动Managed Server,它的命令格式是:
startManagedWeblogic.cmd Managed Server的名称 Administrator Server地址)
在其它机器上配置受管理服务器
一. 按默认情况安装Weblogic 9.2
二. 点击“开始à所有程序à BEA ProductsàToolsà Configuration Wizard”启动Weblogic域配置向导,按默认选择,直接单击“下一步”
三. 选择域源
按默认选择,单击“下一步”
四. 配置管理员用户名和密码
输入管理员的用户名和密码,这里为:用户名-weblogic,密码-weblogic,完成后单击“下一步”
五. 配置服务器启动模式和JDK
这里选择“生产模式”,JDK选择“JRockit JDK”,完成后单击“下一步”。
六. 生定义环境和服务设置
这里选择“是”,完成后单击“下一步”。
七. 配置管理服务器
输入本机的管理服务器名称和地址以及端口号,完成后单击“下一步”。
八. 配置受管理服务器
这是一是重点,在这里设置的受管理服务器名称和IP地址以及端口号要与群集服务器上设置的一致,完成后单击“下一步”。
九. 配置集群
这里也与群集服务器配置不同,在这里不做任何处理直接单击“下一步”。
因为当前pc上的受管理服务器已被前面集群受管理
一〇. 配置计算机
这一步我们也不做处理,直接单击“下一步”。
一一. 检查Weblogic域
检查你做的配置是否正确,完成后单击“下一步”。
一二. 创建Weblogic域
输入要创建的Weblogic域名称,这里使用MultiIP_domain,完成后单击“创建”。
一三. 正在创建域
稍等待创建完成后单击“完成”。
一四. 编辑启动文件
在刚才创建的域目录下的bin目录中创建startManagedServer_2.cmd,内容为:
@ECHO OFF
@REM 启动受管理服务器ManagedServer_2.
@REM 启动Managed Server
@REM 使用startManagedWeblogic命令启动Managed Server,它的命令格式是:
@REM startManagedWeblogic.cmd Managed Server的名称 Administrator Server地址
@REM startManagedWeblogic 受管理服务器名称 管理服务器URL
start .\startManagedWebLogic ManagedServer_2 http://90.0.12.20:7001
启动WebLogic服务
在集群服务器上所创建的域的bin中做如下操作。
Ø 双击“startAdminServer.cmd”启动管理服务器
Ø 双击“startProxyServer.cmd”启动代理服务器
Ø 双击“startManagedServer_1.cmd”启动管理服务器1
在其它受管理服务器的bin目录下做如下操作。
Ø 双击“startManagedServer_2.cmd”启动受管理服务器2(注意:中间会要你输入管理域的用户名和密码),启动完成后会看到如下屏幕
部署WEB应用
进入Console控制台(http://90.0.12.7001/console)。
进入console控制台后,在左边域结构树中点击“环境”前的“+”,
在展开的菜单中点击“服务器”,在右边的列表中可以看到各服务器是否正常启动。
如果正常启动则单击“部署”,再单击“锁定编辑”, 再单击“安装”,选择要部署的WEB应用程序
完成后,单击“下一步”,再单击“下一步”,
选择群集“myCluster”,再选择“群集中的所有服务器”,之后单击“下一步”,再单击“下一步”,再单击“完成”。再单击左上角的“激活更改”。
启动WEB应用
进入Console控制台(http://90.0.12.7001/console)。
进入console控制台后,点击“部署”
选中列表中的应用,然后选择“为所有请求提供服务”,再单击“是”。
看到状态是“活动”就表示WEB应用启动完成。
注意BEAProxy4_myCluster_ProxyServer ,代理服务web应用是weblogic自带的程序,需要修改web.xml,和weblogic.xml。
Web.xml
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<servlet>
<servlet-name>HttpClusterServlet</servlet-name>
<servlet-class>
weblogic.servlet.proxy.HttpClusterServlet
</servlet-class>
<init-param>
<param-name>WebLogicCluster</param-name>
<param-value>
90.0.12.20 :7082|90.0.12.112:7084
</param-value>
</init-param>
<init-param>
<param-name>DebugConfigInfo</param-name>
<param-value>ON</param-value>
</init-param>
<init-param>
<param-name>verbose</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>HttpClusterServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>HttpClusterServlet</servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>HttpClusterServlet</servlet-name>
<url-pattern>*.htm</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>HttpClusterServlet</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
</web-app>
注意<param-value>元素的值是对应受管理服务的IP和port 如果多个IP必须用“|”分隔。千万不要把90.0.12.20 :7001也配置进去。
测试集群的分发功能
编写测试WEB应用并部署
我们来编写一个简单的WEB应用,它会在控制台和浏览器上同时打印出“OK”字样,然后将这个WEB应用部署到集群中所有Managed Server上面。(代码见附件)
在这里我们将通过Apache中所带的ab包来进行并发访问的模拟测试,使用如下的命令就可以完成压力测试。
ab –n 100 –c 10 http://90.0.12.20:8080/index.jsp
ab是测试程序的名称
参数n代表请求的总数量
参数c代表并发的请求数
url为要测试压力的页面
注:使用这个命令时,一定要在系统路径中能够找到该程序,否则不能执行。
压力测试完成后,我们从Managed Server的控制台上可以看到,ManagedServer_1,ManagedServer_2都打印出了“OK”字样,这说明,在并发请求的情况下,集群能够将请求进行分发,以达到负载平衡的目的。
Session共享问题测试
一. 编辑Weblogic.xml配置文件放到WEB应用程序的WEB-INF目录下,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<wls:weblogic-web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wls="http://www.bea.com/ns/weblogic/90" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd http://www.bea.com/ns/weblogic/90 http://www.bea.com/ns/weblogic/90/weblogic-web-app.xsd">
<session-descriptor>
<persistent-store-type>replicated</persistent-store-type>
<sharing-enabled>true</sharing-enabled>
</session-descriptor>
<wls:context-root>/</wls:context-root>
</wls:weblogic-web-app>
注意 如果replicated发部不成功换成memory,因为在9.2的版本中replicated无效。8.1版本可以用。
二. 在IE地址栏中输入http://90.0.12.20:8080/main.jsp并回车,可以看到只有一个weblogic受管理服务器上打出了“OK”,前且可以看到页面上是显示是未登录状态。这时不要并闭IE,再在地址栏中输入http://90.0.12.20:8080/login.htm,以用户名:kxq,密码:kxq,登录,这里页面上你会看到已是登录状态,这时你可以随便关闭或打开ManagedServer_1或ManagedServer_2测试,只要保持有一个ManagedServer是启动状态,你的页面都会是登录状态。
三. Session保持测试 在main,jsp中代码 如果session.set 一个属性为空,那么设置一个值,否则输出该值。
测试结果:如果http://90.0.12.20:8080/main.jsp, 通过代理连接到20的7082上,那么session为空,该属性设置一个值,这时再把20 7082关闭,那次连接http://90.0.12.20:8080/main.jsp, 这时页面结果显示在20 7082上属性的值那么session保持测试成功。
集群配置中要注意的问题
Ø Admin Server只用于集群的管理,而不能参与集群事务。
Ø Web应用应该部署到集群上,文件的同步是由WebLogic来完成的