Jboss + Apache 集群安装文档

回复 收藏
Jboss4.2.3集群安装文档
以下是我实际的操作,并成功实现,现在我说下我的系统环境。两台服务器,10.10.13.186和10.10.13.187,分别安装jboss,在186上面配置apache服务器,作为集群。部署名称为crm的war包。

一、        基础环境搭建
RHEL4.8,jboss4.2.3,jdk1.6,Apache2.2.4
1.安装jdk,两台服务器都要做。
1)        建立jboss组和jboss用户。
groupadd jboss
useradd jboss –g jboss –G jboss
在给jboss用户设置个密码
将jboss和apache建立在/usr/local/jboss和/usr/local/java,用root用户赋予jboss用户操作jboss文件夹和java文件夹权限。
chown -R jboss:jboss java
chown -R jboss:jboss jboss
2)        下载jdk-6u21-linux-i586.bin,上传到linux系统,/usr/local/java的文件夹。Jdk下载地址:
https://cds.sun.com/is-bin/INTER ... R@CDS-CDS_Developer
进入后,需要选择你操作系统的平台,选择linux就可以了。然后有两种包,一个bin包一个rpm.bin包。我选择的是jdk-6u21-linux-i586.bin。
3)        添加执行权限:chmod 755 jdk-6u21-linux-i586.bin
4)        执行该文件:./jdk-6u21-linux-i586.bin,会出现jdk的文件夹,改名为jdk1.6,方便记忆。
mv jdk1.6.0_21 jdk1.6
5)        更改系统环境变量:用root用户,vi /etc/profile,在后面添加:
#Set Environment of java & jboss
JAVA_HOME=/usr/local/java/jdk1.6
JRE_HOME=/usr/local/java/jdk1.6/jre
PATH=$PATH:$JAVA_HOME/bin:JRE_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:
修改后通过source /etc/profile使它生效。
6)        替换系统jdk:RHEL好多都自带jdk,但是版本比较老,要使用新下载的jdk,需要重新连接。
cd /usr/bin
ln -s -f /usr/local/java/jdk1.6/jre/bin/java
ln -s -f /usr/local/java/jdk1.6/bin/javac
7)        检查jdk版本:java –version。出现下面显示,表示安装成功。
java version "1.6.0_21"
Java(TM) SE Runtime Environment (build 1.6.0_21-b06)
Java HotSpot(TM) Server VM (build 17.0-b16, mixed mode)
8)        Jdk安装很简单,下面是重头戏jboss的配置。
2.安装、配置jboss,两台服务器都要做。
1)        下载jboss-4.2.3.GA.zip,上传linux操作系统,/usr/local/jboss的文件夹。
Jboss下载地址:
http://www.jboss.org/jbossas/downloads/
我之所以选择版本4,是因为这个版本的技术文档相对比较多,而4.2.3是版本4中最稳定的。
2)        解压缩:unzip jboss-4.2.3.GA.zip,出现jboss-4.2.3.GA文件夹,并改名jboss4.2.3。
3)        更改系统环境变量:vi /etc/profile,在之前添加路径中加入下面一行:(可以加在JRE_HOME的 下面)
JBOSS_HOME=/usr/local/jboss/jboss4.2.3
PATH=$PATH:$JAVA_HOME/bin:JRE_HOME/bin:JBOSS_HOME/bin
修改后通过source /etc/profile使它生效。
4)        编辑vi $JBOSS_HOME/server/default/deploy/jboss-web.deployer/server.xml,将文件里面所有的(一共2处)${jboss.bind.address}修改为0.0.0.0。具体如下:

这样做的目的是可以远程访问jboss的,否则用其他ip地址在ie中是看不到jboss的欢迎界面的。
5)        更改端口:我希望我访问项目的时候用ie默认的端口,所以需要修改端口:在同样的文件下vi $JBOSS_HOME/server/default/deploy/jboss-web.deployer/server.xml,找到jboss默认的8080端口,修改成80。(这里要根据自己的实际需要。)
修改为

6)        运行jboss并运行:
cd JBOSS/bin
./run.sh
这里有个问题,就是非root只能打开1024以上的端口,所以jboss用户启动是不能访问的,这里我是采用的,root开启jboss,而其他的配置用jboss用户完成。
注:有个有趣的地方,就是我关掉远程终端的时候,jboss服务也会随着我的终端一起关掉。解决这个的办法就是在/bin的文件夹中通过:nohup ./run.sh来运行jboss。
通过ie登录:http://10.10.13.186。(因为是默认80端口,所以不用输入端口号),这时可以看到jboss的欢迎界面。安装成功,下面就是对它配置一番。
7)        部署程序:将war包上传至$JBOSS/server/default/deploy的文件夹下面,解压缩,unzip crm.war,在deploy文件下生成部署的文件夹。登录ie输入http://10.10.13.186/crm。就可以成功访问到你的war包了。jboss的deploy目录是热部署的,所以不用重启jboss就可以看到这个包里面的内容。
8)        去掉war包名称后缀:去掉访问地址后面的war包名称,只是通过地址就访问war包,即访问http://10.10.13.186达到效果。需要修改两个地方。首先进入部署war包下的/WEB-INF的文件夹下。
cd $JBOSS/server/derfault/deploy/crm.war/WEB-INF
文件夹,新建jboss-web.xml文件:vi jboss-web.xml,在里面写入:
<?xml version="1.0" encoding="UTF-8"?>

/
保存退出。
这个时候,在输入http://10.10.13.186 看到的就不是jboss的欢迎界面,而是war包的界面了。
注:有的war包数据库连接是写在里面了,有的则需要通过jboss配置连接数据库,才可以部署的。我的配置实例是不需要jboss配置数据库连接的,有需要的可以上百度搜索,或者找我要都行。
9)        建立日志文件。在jboss下建立日志文件夹logs。进入到crm.war的包中
vi $JBOSS_HOME/server/defauclt/depoly/crm.war/WEB-INF/classes/log4j.properties
修改LOG_DIR=/usr/local/jboss/jboss4.2.3/logs,更改日志路径。根据自己的war包情况来修改。
10)        基本的配置已经完成,下面就是我做的一些小优化。设置内存:
在这里需要根据操作系统来选择文件配置,我的系统是linux操作系统。修改bin文件夹下面的run.conf文件中的:if [ "x$JAVA_OPTS" = "x" ]; then下面添加配置,替换到原有的。
JAVA_OPTS="-Xms128m –Xmx3100m -XX:MaxNewSize=256m -XX:MaxPermSize=512m -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000"
如果是windows操作系统,修改run.bat文件
set JAVA_OPTS=%JAVA_OPTS% -Xms128m -Xmx512m -Xss 128k -XX:PermSize=256m -XX:MaxPermSize=256m
再根据服务器的实际情况,修改参数配置。
这个内存大小和操作系统有关系,64位的操作系统和32位的操作系统相比,jboss的内存可以设置大些,64位的设置物理内存的一半。
11)        安全性设置:添加jmx-console和web-console的登录用户名和密码。在这里我直接进入的部署包,跳过了jboss的配置界面,但是为了安全还是要设置用户名和密码。因为改得东西太长,所以我单独写了出来,见我下篇文章jboss安全性配置,或者上网查询。
12)        开机自动启动jboss:
将以下代码保存名为jboss的文件放到/etc/init.d目录下,别忘了加执行权限。
#!/bin/sh
#
# JBoss Control Script
#
# chkconfig: 3 80 20
# description: JBoss EJB Container
#
# To use this script
# run it as root - it will switch to the specified user
# It loses all console output - use the log.
#
# Here is a little (and extremely primitive)
# startup/shutdown script for RedHat systems. It assumes
# that JBoss lives in /usr/local/jboss, it's run by user
# 'jboss' and JDK binaries are in /usr/local/jdk/bin. All
# this can be changed in the script itself.
# Bojan
#
# Either amend this script for your requirements
# or just ensure that the following variables are set correctly
# before calling the script
# [ #420297 ] JBoss startup/shutdown for RedHat
#define where jboss is - this is the directory containing directories log, bin, conf etc
JBOSS_HOME=${JBOSS_HOME:-"/usr/local/jboss/jboss4.2.3"}
#make java is on your path
JAVAPTH=${JAVAPTH:-"/usr/local/java/jdk1.6/bin"}
#define the classpath for the shutdown class
JBOSSCP=${JBOSSCP:-"$JBOSS_HOME/bin/shutdown.sh -S"}
#define the script to use to start jboss
JBOSSSH=${JBOSSSH:-"$JBOSS_HOME/bin/run.sh -c default"}
if [ -n "$JBOSS_CONSOLE" -a ! -d "$JBOSS_CONSOLE" ]; then
  # ensure the file exists
  touch $JBOSS_CONSOLE
fi
if [ -n "$JBOSS_CONSOLE" -a ! -f "$JBOSS_CONSOLE" ]; then
  echo "WARNING: location for saving console log invalid: $JBOSS_CONSOLE"
  echo "WARNING: ignoring it and using /dev/null"
  JBOSS_CONSOLE="/dev/null"
fi
#define what will be done with the console log
JBOSS_CONSOLE=${JBOSS_CONSOLE:-"/dev/null"}
#define the user under which jboss will run, or use RUNASIS to run as the current user
JBOSSUS=${JBOSSUS:-"root"}
CMD_START="cd $JBOSS_HOME/bin; $JBOSSSH"
CMD_STOP="cd $JBOSS_HOME/bin; $JBOSSCP"
if [ "$JBOSSUS" = "RUNASIS" ]; then
  SUBIT=""
else
  SUBIT="su - $JBOSSUS -c "
fi
if [ -z "`echo $PATH | grep $JAVAPTH`" ]; then
  export PATH=$PATH:$JAVAPTH
fi
if [ ! -d "$JBOSS_HOME" ]; then
  echo JBOSS_HOME does not exist as a valid directory : $JBOSS_HOME
  exit 1
fi
case "$1" in
start)
    echo CMD_START = $CMD_START
    cd $JBOSS_HOME/bin
    if [ -z "$SUBIT" ]; then
        eval $CMD_START >${JBOSS_CONSOLE} 2>&1 &
    else
        $SUBIT "$CMD_START >${JBOSS_CONSOLE} 2>&1 &"
    fi
    ;;
stop)
    echo CMD_STOP = $CMD_STOP
    if [ -z "$SUBIT" ]; then
        eval $CMD_STOP >${JBOSS_CONSOLE} 2>&1 &
    else
        $SUBIT "$CMD_STOP  >${JBOSS_CONSOLE} 2>&1 &"
    fi
    ;;
restart)
    $0 stop
    $0 start
    ;;
*)
    echo "usage: $0 (start|stop|restart|help)"
esac
将以上代码保存名为jboss的文件放到/etc/init.d目录下,别忘了加执行权限。
修改jboss文件中的jdk路径和jboss路径
修改启动jboss的用户
chkconfig --add jboss
chkconfig --level 3 jboss on
chkconfig --level 5 jboss on
重新启动计算机即可。
13)        因为jboss和apache安装在一台机子上面,我想用ip地址去区分它们,而不是端口,所以我在10.10.13.186的机子上面配置了一个虚拟网卡,地址是10.10.13.189。作为apache的地址。
cd /etc/sysconfig/network-scripts
vi ifcfg-eth0:0
DEVICE=eth0:0
BOOTPROTO=static
IPADDR=10.10.13.189
NETMASK=255.255.255.0
ONBOOT=yes
HWADDR=78:E7:D1:E6:3F:E6
保存后:
ifup  ifcfg-eth0:0
激活这个网卡
将10.10.13.186绑定在jboss上面。
vi $JBOSS_HOME/server/default/deploy/jboss-web.deployer/server.xml
将之前修改的两处0.0.0.0改为10.10.13.186。
14)        以上就是我配置的jboss,如果还有什么添加或删除,我会及时更新补充的。那么恭喜你,离成功又进了一步。现在jboss已经可以正常使用,但是我们为了提高冗余性,还要结合apache去做集群。
3. 安装apache,只是186配置。
                要先卸载自带的apache,再安装新的apache。
1)        我安装的是apache2.2.4,那么安装前要卸载系统自带的apache2.0。避免冲突,rpm –qa|grep httpd,系统会列出所有的httpd的包,我的是有个四个,下面需要一个一个卸载,rpm –e 包的名称,将他们卸载完毕,在这里不用输入包的版本号,只是输入名称就可以卸载。卸载干净后就可以安装高版本的apache了。
注:有的包之间有连带关系,需要注意卸载的先后顺序。
注:有的包卸载会报依赖关系的通知,输入:rpm -e 包的名称 --nodeps
2)        仿照jboss用户建立,建立apache的组合用户,用root用户建立apache文件夹并分给apache用户权限,但是apache用户不能起”apache”这个名字,这个名字系统有了,换个名字起。
3)        下载Apache224.tar.gz。并上传至系统,放在/home的文件夹下面。
4)        安装:进入安装文件所在目录,解压缩:
tar –zxvf Apache224.tar.gz
完后会看到httpd的文件夹,进入。进行配置:
./configure --prefix=/usr/local/apache --enable-so --enable-vhost-alias --enable-rewrite --enable-deflate --enable-mods-shared=all --with-mpm=worker --enable-proxy --enable-proxy-ajp --enable-proxy-http --enable-proxy-ftp --enable-proxy-connect --enable-proxy-balancer(--enable-lib64-libdir=/usr/lib64 --with-expat=builtin) 括号里面是64位系统时添加的
make clean
make
               make install
因为要我要配置集群轮询操作,所以在配置的时候,在后面加入相应so文件模型是必要的,要不后期还要重新编译,我试过还不如重装快呢。所以后面参数都不能少。
5)        修改apache的端口,它默认是80 ,但是这个端口之前已经被jboss使用了。
vi /usr/local/apache/conf/http
Listen 10.10.13.189:80
进行修改。同时给apache配置10.10.13.189地址。区分jboss服务。
6)        运行:进入/usr/local/apache/bin文件夹下,输入:./httpd –version检查安装版本。然后service httpd start运行。如果出现httpd未识别的服务,把/usr/local/apache2/bin中apachectl文件拷贝到/etc/init.d,命名为httpd,即可。
cp /usr/local/apache/bin/apachectl /etc/init.d/httpd
注:在运行的时候会出现httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName。
这个问题应该是没有在 /etc/httpd/conf/httpd.conf 中设定 ServerName 所以它会用主机上的名称来取代,首先会去找 /etc/hosts 中有没有主机的定义。
所以要解决这个问题可以设定ServerName或者在 /etc/hosts 中填入自己的主机名称 MYHOST,像这样:
vi /etc/hosts
127.0.0.1 localhost.localdomain localhost 服务器名称
7)        通过ie访问acaphe服务,http://10.10.13.189会看到“it’s work”的字样。说明他已经运行了。
8)        随着linux系统开机自动启动apache。
首先将apachectl命令拷贝到 /etc/init.d 目录下,改名为 httpd;
            使用编辑器打开 httpd 文件,并在第一行 #!/bin/sh 下增加两行文字,如下:
         #chkconfig: 35 70 30
         #description: Apache
      接着注册该服务:
         chkconfig --add httpd
    启动服务:
         service httpd start
9)        到此,系统独立的服务已经安装完毕。下面就是集群整合。
二、        Jboss集群整合
1.Apache配置,只是186配置。
1)        修改$apache\conf\httpd.conf在文件末尾添加:Include conf/mod_jk.conf
2)        下载mod_jk,我下载的是mod_jk-1.2.30-httpd-2.2.X.so,将其改名为mod_jk.so,拷贝到/usr/local/apache2/modules下。
下载地址:http://www.apache.org/dist/tomca ... nux/jk-1.2.30/i586/
并给予执行权限:
chmod 755 /usr/local/apache/modules/mod_jk.so
3)        在$apache\conf下新建文件mod_jk.conf文件内容如下:
# Load mod_jk module
# Specify the filename of the mod_jk lib
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 indicates to send SSK KEY SIZE
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
# JkRequestLogFormat
JkRequestLogFormat “%w %V %T”
# Mount your applications
JkMount /* loadbalancer              
# You can use external file for mount points.
# It will be checked for updates each 60 seconds.
# The format of the file is: /url=worker
# /examples/*=loadbalancer
JkMountFile conf/uriworkermap.properties
# Add shared memory.
# This directive is present with 1.2.10 and
# later versions of mod_jk, and is needed for
# for load balancing to work properly
JkShmFile logs/jk.shm
# Add jkstatus for managing runtime data

JkMount status
Order deny,allow
Deny from all
Allow from 127.0.0.1

4)        在$apache\conf下新建文件workers.properties其内容为:
# Define list of workers that will be used
# for mapping requests
worker.list=loadbalancer,status
# Define Node1
# modify the host as your host IP or DNS name.
worker.node1.port=8009
worker.node1.host=10.10.13.186
worker.node1.type=ajp13
worker.node1.lbfactor=1
# Define Node2
# modify the host as your host IP or DNS name.
worker.node2.port=8009
worker.node2.host=10.10.13.187
worker.node2.type=ajp13
worker.node2.lbfactor=1
# Load-balancing behaviour
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=node1,node2
worker.loadbalancer.sticky_session=1
#worker.list=loadbalancer
# Status worker for managing load balancer
worker.status.type=status
注:worker.node1.host、worker.node2.host和worker.node3.host要改成jboss集群各机器的实际IP.
如果有更多的节点,顺序定义更多的node段,并在worker.loadbalancer.balance_workers后全部列出.
lbfactor是负载分配权重,值越大分配的负载越多.
5)        在$APACHE/conf/目录创建新文件uriworkermap.properties,内容:
/jmx-console=loadbalancer
/jmx-console/*=loadbalancer
/web-console=loadbalancer
/web-console/*=loadbalancer
2.客户端配置,两台都要配置。
1)        修改$JBOSSE/server/default/deploy/jboss-web.deployer/server.xml文件,将Engine 修改如下:

给它增加一个jvmRoute属性:
   
2)        修改 $JBOSS_HOME/server/default/deploy/ jboss-web.deployer /META-INF/jboss-service.xml    找到该为:
true
3)        修改$JBOSS_HOME\server\default\deploy\jboss-web.deployer\ROOT.war\WEB-INF\web.xml
在紧跟着下面添加  
4)        在vi $jboss\server\all\deploy\jboss-web-cluster.sar\META-INF\jboss-service.xml
下面要做的是基于request的cluster,也就让各个节点之间互相复制session状态。有两种复制模式,同步与异步。使用同步的方式,jboss会把session复制的操作和对request的响应放到一个应用事务(application transaction),session复制完成后才去处理request。异步复制则发送session复制的消息后马上处理request,session复制则会稍有延迟。但是在多框架的web页面中,这样的集群方式会有问题。由于frame在同一时间发出多个request,会造成一些混乱,这也是采用基于用户的集群方式的原因之一。
REPL_ASYNC
REPL_ASYNC(异步)或者REPL_SYNC(同步)。
在这个文件下面一点,还有一个config标签,里面指定了各个节点在进行session复制的时候如何通信,有udp和tcp两种可选,如果使用udp方式,那么应该将udp的lookback属性指定为true,因为windows上有一个叫做media sense的东西会影响udp multicast。注意如果你不了解multi address的ip规则,请不要随便修改mcast_addr的值。如果采用tcp方式的话,应该指定bind_addr的值为本机ip,并且在TCPPING标签的initial_hosts属性中列出所有节点,格式是”机器名[端口号]”,比如在我们的例子中,就应该这样配置tcp(以其中一个节点为例):
   ( 在config之前有个注释符号也去掉)
SET_AND_NON_PRIMITIVE_GETSESSIONtrue/
6)        配置default目录,让该目录支持集群
将如下文件从%JBoss_Home%\server\all\lib里面拷到%JBoss_Home%\server\default\lib目录下:
jbossha.jar(加载org.jboss.ha.framework.server.ClusterPartition)
jgroups.jar(JBoss集群底层通信协议)
jboss-cache-jdk50.jar(加载org.jboss.cache.aop.TreeCacheAop)
将如下文件从%JBoss_Home%\server\all\deploy里面拷到%JBoss_Home%\server\default\deploy目录下:
deploy.last
jboss-web-cluster.sar
cluster-service.xml
ejb3-clustered-sfsbcache-service.xml
以下为jboss集群中的另一台服务器配置,基本方法同上,有一点点不同。
7)        使得JBoss知道自己为Node2结点
deploy\jboss-web.deployer目录下的server.xml

改为

8)        通知Node 2添加一个jvmRoute值到会话cookies中,以便mod_jk可以路由随后的请求
在deploy\jboss-web.deployer\META-INF目录下的jboss-service.xml
false改为
true
9)        定义重定向地址
在deploy\jboss-web-cluster.sar\META-INF目录下的jboss-service.xml

改为
;

改为

10)        通过上述配置,jboss集群配置已经基本实现。祝大家成功。
3.集群轮询操作
这个步骤是实现节点间的轮询操作,将Apache作为LoadBalance前置机分别有三种不同的部署方式。进入Apache的conf目录,打开httpd.conf文件,在文件的末尾加入:
1)        轮询均衡策略的配置
ProxyPass / balancer://proxy/        

       BalancerMember http://10.10.13.186:80/
       BalancerMember http://10.10.13.189:80/

2)        按权重分配均衡策略的配置
ProxyPass / balancer://proxy/        

        BalancerMember http://192.168.6.37:6888/  loadfactor=3
        BalancerMember http://192.168.6.38:6888/  loadfactor=1

3)        权重请求响应负载均衡策略的配置
ProxyPass / balancer://proxy/ lbmethod=bytraffic  

         BalancerMember http://192.168.6.37:6888/  loadfactor=3
         BalancerMember http://192.168.6.38:6888/  loadfactor=1
下面还有
(注:每次修改httpd.conf,重新启动Apache。Apache与节点jboss安装方法及设制与上一方法相同。不需要安装mod_JK)



部署包要更系统的字体。
# vi  /etc/sysconfig/i18n

LANG="zh_CN.GB18030"
SUPPORTED="zh_CN.GB18030:zh_CN:zh:en_US.UTF-8:en_US:en"
SYSFONT="latarcyrheb-sun16"

重启系统。
2011-06-07 10:56 举报
已邀请:
0

zhangzihao

赞同来自:

怎么才4版本

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: