首页 > 应用开发 > IT综合 > Jboss集群安装配置
本文转载公司同事中间件大神
作者简介:孙文华,中间件软件十年从业经验,weblogic10g、ocp10g认证,现任职于北京海天起点技术服务股份有限公司。主要从事电信、金融、电力等行业中间件维护工作,涉及weblogic、tuxedo、websphere、JBoss等,致力于帮助客户解决生产系统出现的各种问题。
两台PC服务器:
|
信息项 |
说明 |
| ip地址 | XXX.XXX.1.59|XXX.XXX.1.63 |
| 系统硬件平台 | PC Server |
| 内存 | 6g |
| CPU | Intel(R) Xeon(TM) CPU 3.00GHz *6 |
| 操作系统 | CentOS release 5.5 (Final) |
安装介质 :
1)将jdk介质上传到目标服务器上(XXX.XXX.1.59),并赋上执行权限
[root@XXXHT3 jboss]# chmod +x jdk-6u29-linux-i586-rpm.bin -rwxr--r-- 1 root root 80671698 Apr 25 03:13 jdk-6u29-linux-i586-rpm.bin
|
1 2 |
[ root @ XXXHT3 jboss ] # chmod +x jdk-6u29-linux-i586-rpm.bin - rwxr -- r -- 1 root root 80671698 Apr 25 03 : 13 jdk - 6u29 - linux - i586 - rpm . bin |
2)输入以下命令开始安装
[root@XXXHT3 jboss]# ./jdk-6u29-linux-i586-rpm.bin [root@XXXHT3 jboss]# rpm -ivh jdk-6u29-linux-i586.rpm
|
1 2 |
[ root @ XXXHT3 jboss ] # ./jdk-6u29-linux-i586-rpm.bin [ root @ XXXHT3 jboss ] # rpm -ivh jdk-6u29-linux-i586.rpm |
3)确认jdk已经安装
[root@XXXHT3 jboss]# cd /usr/java/ default/ jdk1.6.0_29/ latest/
|
1 2 |
[ root @ XXXHT3 jboss ] # cd /usr/java/ default / jdk1 . 6.0_29 / latest / |
1)找到用户家目录下的.bash_profile文件,在文件最后加入下面内容
JAVA_HOME=/usr/java/jdk1.6.0_29 PATH=$JAVA_HOME/bin:$PATH CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar export PATH JAVA_HOME CLASSPATH
|
1 2 3 4 |
JAVA_HOME = / usr / java / jdk1 . 6.0_29 PATH = $ JAVA_HOME / bin : $ PATH CLASSPATH = . : $ JAVA_HOME / lib / tools . jar : $ JAVA_HOME / lib / dt . jar export PATH JAVA_HOME CLASSPATH |
保存退出
注销系统重新登录或执行以下命令
[root@XXXHT3 ~]# . .bash_profile
|
1 |
[ root @ XXXHT3 ~ ] # . .bash_profile |
2)安装成功后输入java –version 查看版本是否正确,显示以下信息则正确。
[root@XXXHT3 ~]# java -version java version "1.6.0_29" Java(TM) SE Runtime Environment (build 1.6.0_29-b11) Java HotSpot(TM) Server VM (build 20.4-b02, mixed mode)
|
1 2 3 4 |
[ root @ XXXHT3 ~ ] # java -version java version "1.6.0_29" Java ( TM ) SE Runtime Environment ( build 1.6.0_29 - b11 ) Java HotSpot ( TM ) Server VM ( build 20.4 - b02 , mixed mode ) |
解压jboss介质文件
[root@XXXHT3 jboss]# unzip jboss-5.1.0.GA-jdk6.zip Archive: jboss-5.1.0.GA-jdk6.zip
|
1 2 |
[ root @ XXXHT3 jboss ] # unzip jboss-5.1.0.GA-jdk6.zip Archive : jboss - 5.1.0.GA - jdk6 . zip |
3. 配置JBoss 环境变量
找到用户家目录下的.bash_profile文件,在文件最后加入下面内容
JBOSS_HOME=/data/jboss/jboss-5.1.0.GA PATH=$JBOSS_HOME/bin:$PATH export JBOSS_HOME PATH
|
1 2 3 |
JBOSS_HOME = / data / jboss / jboss - 5.1.0.GA PATH = $ JBOSS_HOME / bin : $ PATH export JBOSS_HOME PATH |
保存退出
注销系统重新登录或执行以下命令
[root@XXXHT3 ~]# . .bash_profile
|
1 |
[ root @ XXXHT3 ~ ] # . .bash_profile |
1)下载apache(httpd-2.2.17)
2)解压
[root@XXXHT3 jboss]# tar -xvf httpd-2.2.17.tar.gz
|
1 |
[ root @ XXXHT3 jboss ] # tar -xvf httpd-2.2.17.tar.gz |
3)编译
进入解压后的apache目录,执行下面命令
[root@XXXHT3 httpd-2.2.17]# ./configure
|
1 |
[ root @ XXXHT3 httpd - 2.2.17 ] # ./configure |
4)然后依次输入:
make clean 回车 make 回车 make install 回车
|
1 2 3 |
make clean 回车 make 回车 make install 回车 |
5)确认apache安装目录
[root@XXXHT3 httpd-2.2.17]# cd /usr/local/apache2/ [root@XXXHT3 apache2]# ls bin build cgi-bin conf error htdocs icons include lib logs man manual modules
|
1 2 3 |
[ root @ XXXHT3 httpd - 2.2.17 ] # cd /usr/local/apache2/ [ root @ XXXHT3 apache2 ] # ls bin build cgi - bin conf error htdocs icons include lib logs man manual modules |
6)修改配置
打开 /usr/local/apache2/conf/httpd.conf文件
将Listen 80 改成Listen 7070
将User daemon和Group daemon 改为 User apache和Group apache
删除ServerName前的# 将该行改为 ServerName 127.0.0.1:8888
然后添加用户和用户组
在终端输入:
groupadd apache useradd apache –g apache
|
1 2 |
groupadd apache useradd apache – g apache |
1)下载mod_jk安装包
mod_jk下载地址
http://tomcat. apache.org/connectors-doc/
2)解压
[root@XXXHT3 jboss]# tar -xvf tomcat-connectors-1.2.40-src.tar.gz
|
1 |
[ root @ XXXHT3 jboss ] # tar -xvf tomcat-connectors-1.2.40-src.tar.gz |
3)编译安装
[root@XXXHT3 jboss]# cd tomcat-connectors-1.2.40-src [root@XXXHT3 tomcat-connectors-1.2.40-src]# cd native [root@XXXHT3 native]# ./configure --with-apxs=/usr/local/apache2/bin/apxs --with-java-home=/usr/java/jdk1.6.0_29 --with-java-platform=2 --enable-jni [root@XXXHT3 native]# make [root@XXXHT3 native]# make install
|
1 2 3 4 5 |
[ root @ XXXHT3 jboss ] # cd tomcat-connectors-1.2.40-src [ root @ XXXHT3 tomcat - connectors - 1.2.40 - src ] # cd native [ root @ XXXHT3 native ] # ./configure --with-apxs=/usr/local/apache2/bin/apxs --with-java-home=/usr/java/jdk1.6.0_29 --with-java-platform=2 --enable-jni [ root @ XXXHT3 native ] # make [ root @ XXXHT3 native ] # make install |
4)拷贝mod_jk.so包到
[root@XXXHT3 native]# cd apache-2.0/ [root@XXXHT3 apache-2.0]# cp ./mod_jk.so /usr/local/apache2/modules/ cd /usr/local/apache/modules/ chmod 755 mod_jk.so
|
1 2 3 4 |
[ root @ XXXHT3 native ] # cd apache-2.0/ [ root @ XXXHT3 apache - 2.0 ] # cp ./mod_jk.so /usr/local/apache2/modules/ cd / usr / local / apache / modules / chmod 755 mod_jk . so |
5)在/usr/local/apache2/conf/httpd.conf的末尾增加:
Include conf/mod_jk.conf
|
1 |
Include conf / mod_jk . conf |
6)建立文件/usr/local/apache2/conf/uriworkermap.properties并输入:
[root@XXXHT3 conf]# vi uriworkermap.properties /jmx-console=loadbalancer /jmx-console/*=loadbalancer /web-console=loadbalancer /web-console/*=loadbalancer
|
1 2 3 4 5 |
[ root @ XXXHT3 conf ] # vi uriworkermap.properties / jmx - console = loadbalancer / jmx - console / *= loadbalancer / web - console = loadbalancer / web - console / *= loadbalancer |
7)该目录下建立文件mod_jk.conf 并输入以下内容:
# Load mod_jk module. Specify the filename # of the mod_jk lib you’ve downloaded and # installed in the previous section LoadModule jk_module modules/mod_jk.so # Where to find workers.properties JkWorkersFile conf/workers.properties # Where to put jk logs JkLogFile logs/mod_jk.log # Set the jk log level [debug/error/info] JkLogLevel info # Select the log format JkLogStampFormat "[%a %b %d %H:%M:%S %Y] " # JkOptions indicate to send SSL KEY SIZE, JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories # JkRequestLogFormat set the request format JkRequestLogFormat "%w %V %T" JkMount /* loadbalancer
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# Load mod_jk module. Specify the filename # of the mod_jk lib you’ve downloaded and # installed in the previous section LoadModule jk_module modules / mod_jk . so # Where to find workers.properties JkWorkersFile conf / workers . properties # Where to put jk logs JkLogFile logs / mod_jk . log # Set the jk log level [debug/error/info] JkLogLevel info # Select the log format JkLogStampFormat "[%a %b %d %H:%M:%S %Y] " # JkOptions indicate to send SSL KEY SIZE, JkOptions + ForwardKeySize + ForwardURICompat - ForwardDirectories # JkRequestLogFormat set the request format JkRequestLogFormat "%w %V %T" JkMount / * loadbalancer |
8)该目录下建立文件workers.properties 并输入以下内容:
worker.list=loadbalancer,node1,node2 # Define the first node... worker.node1.port=8009 worker.node1.host=XXX.XXX.1.59 worker.node1.type=ajp13 worker.node1.lbfactor=1 worker.node1.local_worker=1 worker.node1.cachesize=10 worker.node1.cache_timeout=600 worker.node1.reply_timeout=100 worker.node1.socket_timeout=300 # Define the second node... worker.node2.port=8009 worker.node2.host=XXX.XXX.1.63 worker.node2.type=ajp13 worker.node2.lbfactor=1 worker.node2.local_worker=1 worker.node2.cachesize=10 worker.node2.cache_timeout=600 worker.node2.reply_timeout=100 worker.node2.socket_timeout=300 # Now we define the load-balancing behaviour worker.loadbalancer.type=lb worker.loadbalancer.balanced_workers=node1,node2 worker.loadbalancer.sticky_session=0
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
worker . list = loadbalancer , node1 , node2 # Define the first node... worker . node1 . port = 8009 worker . node1 . host = XXX . XXX . 1.59 worker . node1 . type = ajp13 worker . node1 . lbfactor = 1 worker . node1 . local_worker = 1 worker . node1 . cachesize = 10 worker . node1 . cache_timeout = 600 worker . node1 . reply_timeout = 100 worker . node1 . socket_timeout = 300 # Define the second node... worker . node2 . port = 8009 worker . node2 . host = XXX . XXX . 1.63 worker . node2 . type = ajp13 worker . node2 . lbfactor = 1 worker . node2 . local_worker = 1 worker . node2 . cachesize = 10 worker . node2 . cache_timeout = 600 worker . node2 . reply_timeout = 100 worker . node2 . socket_timeout = 300 # Now we define the load-balancing behaviour worker . loadbalancer . type = lb worker . loadbalancer . balanced_workers = node1 , node2 worker . loadbalancer . sticky_session = |
说明:
worker.node1.host、 worker.node2.host要改成jboss集群各机器的实际IP.
如果有更多的节点,顺序定义更多的 node段,并worker.loadbalancer.balanced_workers 后全部列出.
lbfactor是负载分配权重,值越大分配的负载越多.
worker.loadbalancer.sticky_session它是指session是否是黏着性session,如果是0则代表是非黏着性session,1代表粘连。
1)修改server.xml使它支持所有网络访问
[root@XXXHT3 deploy]# cd /data/jboss/jboss-5.1.0.GA/server/all/deploy/jbossweb.sar [root@XXXHT3 deploy]# vi server.xml
|
1 2 |
[ root @ XXXHT3 deploy ] # cd /data/jboss/jboss-5.1.0.GA/server/all/deploy/jbossweb.sar [ root @ XXXHT3 deploy ] # vi server.xml |
修改
<Connector port="8080" address="${jboss.bind.address}"
|
1 |
< Connector port = "8080" address = "${jboss.bind.address}" |
为
<Connector port="8080" address="0.0.0.0" >
|
1 |
< Connector port = "8080" address = "0.0.0.0" > |
修改
<Connector port="8009" address="${jboss.bind.address}" protocol="AJP/1.3"
|
1 |
< Connector port = "8009" address = "${jboss.bind.address}" protocol = "AJP/1.3" |
为
<Connector port="8009" address="0.0.0.0" protocol="AJP/1.3"
|
1 |
< Connector port = "8009" address = "0.0.0.0" protocol = "AJP/1.3" |
2)修改server.xml使它支持所有网络访问,使得 JBoss知道自己为Node1结点
<Engine name="jboss.web" defaultHost="localhost" jvmRoute="node1" >
|
1 |
< Engine name = "jboss.web" defaultHost = "localhost" jvmRoute = "node1" > |
注意,jvmRoute是节点号,要与在 apache的 workers.properties中的定义相对应.
3)增加节点配置
[root@XXXHT3 deploy]# cd /data/ jboss/jboss-5.1.0.GA /server/all/deploy/cluster/jgroups-channelfactory.sar/META-INF [root@XXXHT3 deploy]# vi jgroups-channelfactory-stacks.xml
|
1 2 |
[ root @ XXXHT3 deploy ] # cd /data/ jboss/jboss-5.1.0.GA /server/all/deploy/cluster/jgroups-channelfactory.sar/META-INF [ root @ XXXHT3 deploy ] # vi jgroups-channelfactory-stacks.xml |
修改
292行为
<TCPPING timeout="3000" initial_hosts="${XXX.XXX.1.59[7810], XXX.XXX.1. 63[7810]}" port_range="1"
|
1 2 3 |
< TCPPING timeout = "3000" initial_hosts = "${XXX.XXX.1.59[7810], XXX.XXX.1. 63[7810]}" port_range = "1" |
其中59是本机Node的ip地址,63是另一个机器Node的ip地址。端口7810是JBoss内定的。
修改374行为
<TCPPING timeout="3000" initial_hosts="${XXX.XXX.1.59[7810], XXX.XXX.1. 63[7810]}" port_range="1" num_initial_members="3"/>
|
1 2 3 4 |
< TCPPING timeout = "3000" initial_hosts = "${XXX.XXX.1.59[7810], XXX.XXX.1. 63[7810]}" port_range = "1" num_initial_members = "3" / > |
在另一台机器Node节点上,此文件修改如下
<TCPPING timeout="3000" initial_hosts="${XXX.XXX.1.63[7810], XXX.XXX.1.59[7810]}" port_range="1" num_initial_members="3"/>
|
1 2 3 4 |
< TCPPING timeout = "3000" initial_hosts = "${XXX.XXX.1.63[7810], XXX.XXX.1.59[7810]}" port_range = "1" num_initial_members = "3" / > |
相对于59机器,63就是ip地址进行了对换。
4)定义集群
session共享级别(重要)
修改
war-deployers-jboss-beans.xml
文件,这个文件比较重要,它定义了集群
session
的共享级别。
[root@XXXHT3 deploy]# cd / data/jboss/jboss-5.1.0.GA/server/all/deployers/jbossweb.deployer/META-INF [root@XXXHT3 deploy]# vi war-deployers-jboss-beans.xml
|
1 2 |
[ root @ XXXHT3 deploy ] # cd / data/jboss/jboss-5.1.0.GA/server/all/deployers/jbossweb.deployer/META-INF [ root @ XXXHT3 deploy ] # vi war-deployers-jboss-beans.xml |
找到:
<property name=”useJK”>false</property>
//需要去掉旁边的注释<!– –>
改为:
<property name=”useJK”>true</property>
5)修改ssaging-service.xml文件
[root@XXXHT3 deploy]# cd /data/jboss/jboss-5.1.0.GA/server/all/deploy/messaging [root@XXXHT3 deploy]# vi messaging-service.xml
|
1 2 |
[ root @ XXXHT3 deploy ] # cd /data/jboss/jboss-5.1.0.GA/server/all/deploy/messaging [ root @ XXXHT3 deploy ] # vi messaging-service.xml |
修改20行
<attribute name="ServerPeerID">${jboss.messaging.ServerPeerID:1}</attribute>
|
1 |
< attribute name = "ServerPeerID" > $ { jboss . messaging . ServerPeerID : 1 } < / attribute > |
此时只要是整数值就可以
另一个机器配置
<attribute name="ServerPeerID">${jboss.messaging.ServerPeerID:2}</attribute>
|
1 |
< attribute name = "ServerPeerID" > $ { jboss . messaging . ServerPeerID : 2 } < / attribute > |
需要注意的就是同一个集群里不同Node的这个ID数值不能一致。
在自己的项目应用的war包中的web.xml加入下面一句话
<distributable/>
|
1 |
< distributable / > |
将其放到最顶层,如下
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <distributable/> <welcome-file-list> <welcome-file>hello.jsp</welcome-file> </welcome-file-list> </web-app>
|
1 2 3 4 5 6 7 8 9 10 11 |
<? xml version = "1.0" encoding = "UTF-8" ?> < web - app version = "2.5" xmlns = "http://java.sun.com/xml/ns/javaee" xmlns : xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi : schemaLocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" > < distributable / > < welcome - file - list > < welcome - file > hello . jsp < / welcome - file > < / welcome - file - list > < / web - app > |
在
web.xml
同一级文件夹下,加入
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>
|
1 2 3 4 5 6 7 8 9 10 11 12 |
< 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 > |
在/usr/local/apache2/bin目录下执行./httpd –k start (终止命令: ./httpd –k stop)
在/usr/local/apache2/logs/mod_jk.log 中,看到 apache初始化mod_jk的日志:
[Wed Aug 01 10:36:11 2007][6636:63168] [info] init_jk::mod_jk.c (2743): mod_jk/1.2.23 initialized [Wed Aug 01 10:36:11 2007][6637:63168] [info] init_jk::mod_jk.c (2743): mod_jk/1.2.23 initialized
|
1 2 3 4 5 6 7 |
[ Wed Aug 01 10 : 36 : 11 2007 ] [ 6636 : 63168 ] [ info ] init_jk :: mod_jk . c ( 2743 ) :
mod_jk / 1.2.23 initialized
[ Wed Aug 01 10 : 36 : 11 2007 ] [ 6637 : 63168 ] [ info ] init_jk :: mod_jk . c ( 2743 ) :
mod_jk / 1.2.23 initialized |
后面如有错误信息,是因为集群中的节点尚未启动,暂时忽略。
用 netstat检查 7070监听端口存在,apache启动成功. (netstat -an | grep 7070)
在${JBOSS_HOME}\bin下建立一个run-all.sh文件,( 记住:一定要以配置IP的方式启动,Session赋值才有效 )内容如下:
run.sh -c all -b XXX.XXX.1.59
|
1 |
run . sh - c all - b XXX . XXX . 1.59 |
如果是63 Node机器,内容如下
run.sh -c all -b XXX.XXX.1.63
|
1 |
run . sh - c all - b XXX . XXX . 1.63 |
终止命令:./shutdown.sh -S
用 netstat检查 8080端口监听存在.
用浏览器访问各节点的 8080端口,能够看到jboss的状态.
Jboss启动成功.
通过Hello World小应用,完成了以下集群负载及容灾测试:
|
测试场景 |
测试结果 |
是否通过 |
| 59、63两个JBoss节点状态正常 | 请求会轮询的平均转发给两个节点 | 通过 |
| 59节点宕掉,63节点正常 | 请求转发到63节点,能正常返回 | 通过 |
| 63节点宕掉,59节点正常 | 请求转发到59节点,能正常返回 | 通过 |
| 宕掉的其中一个节点重新启动 | 请求会轮询的平均转发给两个节点 | 通过 |
|
测试场景 |
测试结果 |
是否通过 |
| 59、63两个JBoss节点状态正常 | 请求只转发给1个节点 | 通过 |
| 59节点宕掉,63节点正常 | 请求转发到63节点,能正常返回 | 通过 |
| 63节点宕掉,59节点正常 | 请求转发到59节点,能正常返回 | 通过 |
| 宕掉的其中一个节点重新启动 | 请求只转发给原来正常的节点 | 通过 |
|
|
JBoss |
WebLogic |
| 软件费用 | 开源软件,免费 | 商业软件,收费 |
| 版本升级 | 版本跨度大,需要修改源代码 | 升级方便,基本不需要修改 |
| 集群安装部署 | 比较复杂 | 简单 |
| 集群扩展 | 比较简单 | 简单 |
| 管理 | 每个节点进行管理 | 所有节点同一个控制台统一管理 |
| 热部署 | 支持,但要每个节点进行部署 | 支持而且更稳定,一次性部署整个集群 |
| 适用对象 | 中小型应用项目 | 企业级开发大项目 |
| 稳定性 | 一般 | 稳定性更高 |
| 技术支持 | 无 | 提供专业技术支持 |
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29674916/viewspace-2152489/ ,如需转载,请注明出处,否则将追究法律责任。