ITPub博客

首页 > 应用开发 > IT综合 > Jboss集群安装配置

Jboss集群安装配置

IT综合 作者:swq618 时间:2018-04-02 12:09:06 0 删除 编辑

 本文转载公司同事中间件大神


作者简介:孙文华,中间件软件十年从业经验,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)

安装介质 :


安装并配置JDK

下载JDK(版本为1.6)

安装

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 环境变量

下载JBoss(JBoss5的jdk6版本安装包)

安装JBoss

解压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



Jboss集群负载均衡器配置

安装apache

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



apache mod_jk 的配置

1)下载mod_jk安装包

mod_jk下载地址

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代表粘连。

 JBoss 集群节点配置

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文件

在自己的项目应用的war包中的web.xml加入下面一句话



<distributable/>



1

< distributable / >



将其放到最顶层,如下



<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns=" xmlns:xsi=" xsi:schemaLocation=" /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 = "

xmlns : xsi = "

xsi : schemaLocation = "

/web-app_2_5.xsd" >

< distributable / >

   < welcome - file - list >

     < welcome - file > hello . jsp < / welcome - file >

   < / welcome - file - list >

< / web - app >



war包里的jboss-web.xml文件

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 >



启动JBoss集群

启动负载均衡器apache

在/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节点

在${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小应用,完成了以下集群负载及容灾测试:

设置非session粘连状态

测试场景

测试结果

是否通过

59、63两个JBoss节点状态正常 请求会轮询的平均转发给两个节点 通过
59节点宕掉,63节点正常 请求转发到63节点,能正常返回 通过
63节点宕掉,59节点正常 请求转发到59节点,能正常返回 通过
宕掉的其中一个节点重新启动 请求会轮询的平均转发给两个节点 通过

设置session粘连状态

测试场景

测试结果

是否通过

59、63两个JBoss节点状态正常 请求只转发给1个节点 通过
59节点宕掉,63节点正常 请求转发到63节点,能正常返回 通过
63节点宕掉,59节点正常 请求转发到59节点,能正常返回 通过
宕掉的其中一个节点重新启动 请求只转发给原来正常的节点 通过

JBoss与WebLogic产品比较


JBoss

WebLogic

软件费用 开源软件,免费 商业软件,收费
版本升级 版本跨度大,需要修改源代码 升级方便,基本不需要修改
集群安装部署 比较复杂 简单
集群扩展 比较简单 简单
管理 每个节点进行管理 所有节点同一个控制台统一管理
热部署 支持,但要每个节点进行部署 支持而且更稳定,一次性部署整个集群
适用对象 中小型应用项目 企业级开发大项目
稳定性 一般 稳定性更高
技术支持 提供专业技术支持


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29674916/viewspace-2152489/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-05-24

  • 博文量
    104
  • 访问量
    253764