JBOSS高可用方案以及配置流程

原创 2007年09月19日 14:06:00

一、基础知识

11高可用方案的2个基本问题

(1) Load Balance

需要注意负载均衡问题, 使得请求可以较好分配。

它有2种表现形式

(a) 访问地址不同

例如, 网站www.hello.com. 当访问www.hello.com/us, Node1做出响应. 当访问www.hello.com/cn, Node2做出相应

(b) 任务分发

例如, 网站www.hello.com. 当有50000request到达时候, 将这些request按照2:1的比例分发给Node1Node2

(2) High Availability

       需要注意Session状态转移问题, 即在某个Server Node发生故障时保持Session连接。例如,当Apache将某个request分发给Node1, 并且进行了某些操作,这时候Node1突然crash或者Node1出现了网络故障, 这时要保证Session不会丢失, Session ID唯一和保留在Session中的内容不会丢失。

12基本原理介绍

如图1 所示,Node 1Node 2所是Apache的两个worker。当有request到达时, Apache通过Ajp13 协议动态的将请求分发给Node 1Node 2 例如, 当发送的request送给Node 1时,由Node 1处理发送来的request 进行处理后将response按照原路径返回,交给Apache。此后Apache再将收到的response返回给client端。

两个workerNode 1Node 2是真正负责处理client端发送来的请求。为了保持Session的一致性和稳定性,两个Node需要进行同步,即Session的复制,才能保证数据的统一。

二、举例说明配置

21环境说明

【机器A

操作系统: Window Home Edition

IP地址: 192.168.0.42

JBoss 服务器: Apache, 2.2.4

JBoss 4.2 (Node 1)

JDK版本: 1.5.0

【机器B

操作系统: FreeBSD

IP: 192.168.0.180

Server:    JBoss 4.2 (Node 2)

JDK: 1.5.0

22配置流程

(1)              %Apache_HOME%目录下

(a)          www.apache.com下载mod_jk.somodules目录

(b)          conf目录下的httpd.conf文件最后写入

# Include mod_jk's specific configuration file

Include conf/mod-jk.conf

(c)          conf目录下创建mod-jk.conf文件、uriworkermap.properties文件、workers.properties文件,文件的内容见附录一。其目的是为Apache设置2worker为其服务。

 

(2)              Node1%JBOSS_HOME%/server/all目录下

(a)    修改访问地址, 使得外部可以以主机IP地址进行访问

deploy/jboss-web.deployer目录下的server.xml

<Connector port="8080" address= {jboss.bind.address}…>改为<Connector port="8080" address="0.0.0.0"…>;

<Connector port="8009" address= {jboss.bind.address}…>改为<Connector port="8009" address="0.0.0.0"…>

(b)    使得JBoss知道自己为Node1结点

deploy/jboss-web.deployer目录下的server.xml

<Engine name="jboss.web" defaultHost = "localhost">

改为

<Engine name="jboss.web" defaultHost= "localhost" jvmRoute="node1">

(c)    通知Node 1添加一个jvmRoute值到会话cookies中,以便mod_jk可以路由随后的请求

deploy/jboss-web.deployer/META-INF目录下的jboss-service.xml

<attribute name="UseJK">false</attribute>改为

<attribute name="UseJK">true</attribute>

(d)    定义重定向地址

deploy/jboss-web-cluster.sar/META-INF目录下的jboss-service.xml

<TCP bind_addr = "thishost" start_port = "7810" loopback= "true"…>

改为

<TCP bind_addr = "192.168.0.42" start_port= "7810" loopback="true"…>;

<TCPPING initial_hosts= "thishost[7810], otherhost[7810]" port_range="3"…>

改为

<TCPPING initial_hosts= "192.168.0.42[7810], 192.168.0.180[7810]" port_range="3"…>

 

(3)              Node2%JBOSS_HOME%/server/all目录下

(a)    修改访问地址, 使得外部可以以主机IP地址进行访问

deploy/jboss-web.deployer目录下的server.xml

<Connector port="8080" address= {jboss.bind.address}…>改为<Connector port="8080" address="0.0.0.0"…>;

<Connector port="8009" address= {jboss.bind.address}…>改为<Connector port="8009" address="0.0.0.0"…>

(b)    使得JBoss知道自己为Node2结点

deploy/jboss-web.deployer目录下的server.xml

<Engine name="jboss.web" defaultHost = "localhost">

改为

<Engine name="jboss.web" defaultHost= "localhost" jvmRoute="node2">

(c)    通知Node 2添加一个jvmRoute值到会话cookies中,以便mod_jk可以路由随后的请求

deploy/jboss-web.deployer/META-INF目录下的jboss-service.xml

<attribute name="UseJK">false</attribute>改为

<attribute name="UseJK">true</attribute>

(d)    定义重定向地址

deploy/jboss-web-cluster.sar/META-INF目录下的jboss-service.xml

<TCP bind_addr = "thishost" start_port = "7810" loopback= "true"…>

改为

<TCP bind_addr = "192.168.0.180" start_port= "7810" loopback="true"…>;

<TCPPING initial_hosts= "thishost[7810], otherhost[7810]" port_range="3"…>

改为

<TCPPING initial_hosts= "192.168.0.180[7810], 192.168.0.42[7810]" port_range="3"…>

 

(4)              在自己的应用程序中

(a)    设置使得自己的应用程序使用集群

WEB-INF目录下的web.xml文件中<web-app>下添加

<distributable/>

(b)    在设置Jboss配置信息

WEB-INF目录下创建jboss-web.xml文件,文件内容见附录二

 

三、实验方案

【实验一】验证负载分配

实验步骤:

(1)              在浏览器中输入http://l92.168.0.42/jmx-console/

(2)              另开一个浏览器窗口, 输入http://l92.168.0.42/jmx-console/,可能会出现另外一个nodejmx-console

 

【实验二】验证负载分配和Session ID保持

实验步骤:

(1)              创建文件test.jsp, test.jsp中打印nodeIP地址, session idsingleton实例的某一自增变量

(2)              在一个浏览器窗口中访问test.jsp, 显示单一nodeIP地址, session idsingleton实例的某一自增变量, 点击刷新按钮, 看见同一IP地址和Session id

(3)              另开一个浏览器窗口访问test.jsp, 可能会显示另一nodeIP地址, session idsingleton实例的某一自增变量, 点击刷新按钮, 看见一IP地址和Session id. 在这里每个singleton变量的自增值是分别增加的.

(4)              仅保留一个浏览器窗口, ip显示42机器, 则把42机器上的jboss停止掉. 否则把180上的jboss停止掉. 刷新浏览器窗口. 可以看见ip值发生变化, session id保持不变

 

【实验三】验证Session内容

(1)              创建文件first.jsp, first.jsp中输入一个值, 将其存入session, post方法在second.jsp中显示session中存在的值和打印值到控制台.

(2)              刷新second.jsp, 显示session中存在的值

(3)              停止掉刚刚在控制台打印信息的node结点server

(4)              刷新second.jsp, 显示session中存在的值

 

【实验四】数据统计, 查看性能

%APACHE_HOME%/bin目录有应用程序ab, 利用ab做数据统计

分别向服务器发送500个请求,每次发送20个,查看最终的数据统计结果

ab -n 500 -c 20 http://192.168.0.428080/web-console/

ab -n 500 -c 20 http://192.168.0.1808080/web-console/

ab -n 500 -c 20 http:// 192.168.0.42/web-console/

四、注意事项

8080端口问题

有时可能出现JBOSS端口冲突问题, 可以将%JBOSS_HOME%/all/deploy/jboss-web.deployer/Server.xml中定义的默认端口8080改为其他不用端口

 

ALL 模式运行问题

JBOSSALL模式在windows运行的命令为%JBOSS_HOME%/bin/run.bat –c all, FreeBSD运行的命令为%JBOSS_HOME%/bin/run.sh –c all

 

端口冲突问题

JBossALL模式启动时候, 有时可能与某些应用程序冲突. 例如FirefoxMSN(曾遇到以上2这个应用程序端口冲突). 利用netstat –ano 来查看现在访问网络端口的应用程序的PID. 然后利用任务管理器去查找相应的程序,结束即可.

 

FreeBSD安装问题

FreeBSD下安装JBoss, ALL模式并不能正常运行. 需要调整几个参数, 才能运行.进入%JBOSS_HOME%server/all/deploy目录.

(1)              cluster-service.xml文件

<UDP …enable_bundling="false" max_bundle_size="64000 max_bundle_timeout="30"…>

改为

<UDP …enable_bundling="false" max_bundle_size="8000 max_bundle_timeout="30"…>;

<TCP enable_bundling="false" max_bundle_size="64000" max_bundle_timeout="30">

改为

<TCP enable_bundling="false" max_bundle_size="8000" max_bundle_timeout="30">

 

(2)  ejb3-clustered-sfsbcache-service.xml文件

<UDP …enable_bundling="false" max_bundle_size="64000 max_bundle_timeout="30"…>

改为

<UDP …enable_bundling="false" max_bundle_size="8000 max_bundle_timeout="30"…>

 

(3)  ejb3-entity-cache-service.xml文件

<UDP …enable_bundling="false" max_bundle_size="64000 max_bundle_timeout="30"…>

改为

<UDP …enable_bundling="false" max_bundle_size="8000 max_bundle_timeout="30"…>

 

(4)  jboss-web-cluster.sar/META-INF/jboss-service.xml文件

<UDP …enable_bundling="false" max_bundle_size="64000 max_bundle_timeout="30"…>

改为

<UDP …enable_bundling="false" max_bundle_size="8000 max_bundle_timeout="30"…>;

<TCP enable_bundling="false" max_bundle_size="64000" max_bundle_timeout="30">

改为

<TCP enable_bundling="false" max_bundle_size="8000" max_bundle_timeout="30">


附录

附录一

mod-jk.conf文件

 

//加载mod_jk模块

LoadModule jk_module modules/mod_jk.so

//设置worker配置文件

JkWorkersFile conf/workers.properties

//设置日志记录位置

JkLogFile logs/mod_jk.log

//设置日志记录级别

JkLogLevel info

//设置日志记录格式

JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"

//设置提交SSL KEY SIZE

JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories

//设置请求格式

JkRequestLogFormat "%w %V %T"

//设置负载转发请求

JkMount /ClusterTest/* loadbalancer

//设置负载转发文件

JkMountFile conf/uriworkermap.properties

 

uriworkermap.properties文件

/jmx-console=loadbalancer

/jmx-console/*=loadbalancer

/web-console=loadbalancer

/web-console/*=loadbalancer

 

workers.properties文件

# 定义workers 列表

worker.list=loadbalancer, node1, node2

# 定义 Node1

# 修改主机IP地址等参数

worker.node1.port=8009

worker.node1.host=localhost

worker.node1.type=ajp13

worker.node1.lbfactor=1

# 定义 Node2

# 修改主机IP地址等参数

worker.node2.port=8009

worker.node2.host=192.168.0.180

worker.node2.type=ajp13

worker.node2.lbfactor=1

# 设置Load-balancing 行为

worker.loadbalancer.type=lb

worker.loadbalancer.balance_workers=node1, node2

worker.loadbalancer.sticky_session=1


 

附录二

jboss-web.xml文件

<jboss-web>

<replication-config>

    <replication-trigger>

        SET_AND_NON_PRIMITIVE_GET

    </replication-trigger>

    <replication-granularity>SESSION</replication-granularity>

    <replication-field-batch-mode>

        true

    </replication-field-batch-mode>

</replication-config>

</jboss-web>

相关文章推荐

JBoss配置环境变量及部署Web项目

首先从JBoss的官方下载 相关的程序,我这里下载的5.1版本的----jboss-5.1.0.GA.zip,之后 解压文件。 1. 配置Jboss的环境变量 1)在jboss-5.1.0.GA\...
  • wl_ldy
  • wl_ldy
  • 2012年02月09日 21:17
  • 35529

JBOSS的下载安装、环境变量配置以及部署

JBoss是纯Java的EJB(企业JavaBean)服务器。 1. 下载安装 http://jbossas.jboss.org/downloads/  我下载的是:JBoss AS7.1....

Jboss 环境配置与项目部署

Jboss 环境配置与项目部署 环境搭建: 1. jdk-6u16-windows-i586.exe 2. jboss-5.1.0.GA-jdk6.zip JDK安装: ...

JBOSS的下载安装、环境变量配置以及部署

最近学习java学习了一下JBOSS,这篇文章记录了一下自己安装jboss的过程。 JBoss是纯Java的EJB(企业JavaBean)服务器。 1. 下载安装 http://jbossas.j...

JBoss服务器环境安装与配置及错误分析

JBoss下载地址:http://jbossas.jboss.org/downloads/ 目前最新下载的版本是JBoss AS 7.1.1.Final. 坏境配置完成目录如下: ...

JBOSS安装配置详细教程

第一章 安装运行JBOSS 1 安装JBOSS JBOSS最新发布的AS(Application Server)版本是5.0.0.Beta1,最近一个稳定版本是4.0.5,我们使用的版本是4.0....

redis的安装配置使用(一)

下载地址:http://redis.io/download下载文件:redis-2.4.14.tar.gz官方教程:http://redis.io/topics/quickstart 关于redis....
  • cuiran
  • cuiran
  • 2012年12月05日 09:06
  • 15741

IDEA中配置Redis连接池,实现基本String类型Get/Set

1.搭建环境: 下载Redis地址:https://github.com/MSOpenTech/redis/releases。 下载到的Redis支持32bit和64bit。根据自己实际情况选...

Redis 主从配置心得及其高可用方案

redis主从复制过程: 当配置好slave后,slave与master建立连接,然后发送sync命令。无论是第一次连接还是重新连接,master都会启动一个后台进程,将 数据库快照保存到文件中,同...

MongoDB高可用集群配置的方案-对称集群(一致对外)与非对称集群(只有我对外,其它待命)

高可用性即HA(High Availability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非计划)所导致的停机时间,以提高系统和应用的可用性。 高可用集群的解决方案 ...
  • doitsjz
  • doitsjz
  • 2017年06月04日 22:17
  • 436
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JBOSS高可用方案以及配置流程
举报原因:
原因补充:

(最多只允许输入30个字)