CentOS下apache负载均衡与JBoss集群配置总结

时间:2022-10-05 00:25:02

http://blog.csdn.net/yeah898/article/details/10180579

 

CentOS下apache负载均衡与JBoss集群配置总结

CentOS下apache负载均衡与JBoss集群配置总结


说明:Apache Session转发服务器可以和其中一台JBOSS WEB服务器在同一台硬件机器上,但是如果这样则JBOSS WEB间只是实现了JBOSS应用程序的热备份,而不是硬件机器的热备份。两台JBOSS WEB同时实现了负载均衡。

一、环境工具:

    CentOS 6.3   下载网址:http://www.cnbeta.com/articles/196464.htm

    Jdk-6u29-linux-i586-rpm.bin

    httpd-2.0.65.tar.gz

    mod_jk-apache-2.0.46-linux-i686.so  

    下载网址: http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/linux/jk-1.2.23/

    jboss-4.2.2.GA.zip 

    MySQL-5.6.13-1.el6.i686.rpm-bundle.tar

二、安装并配置JDK:

  2.1 下载jdk(1.5版本以上)

  Jdk-6u29-linux-i586-rpm.bin

  2.2 安装

1) 首先将安装包放到/usr/jdk目录下,然后启动终端输入

 [root@hbx jdk]# ./jdk-6u29-linux-i586-rpm.bin 

 然后根据提示输入 yes //解压缩在当前文件夹出现.rpm 文件,解压后的文件如下: 

 jdk-6u29-linux-i586.rpm

 sun-javadb-core-10.6.2-1.1.i386.rpm       

 sun-javadb-demo-10.6.2-1.1.i386.rpm 

 sun-javadb-client-10.6.2-1.1.i386.rpm  

 sun-javadb-docs-10.6.2-1.1.i386.rpm 

 sun-javadb-common-10.6.2-1.1.i386.rpm  

 sun-javadb-javadoc-10.6.2-1.1.i386.rpm 

2) 安装程序

 rpm -ivh jdk-6u29-linux-i586.rpm 

3) 设置环境变量

 找到/etc/profile 文件打开在最后面加入 

  JAVA_HOME=/usr/java/jdk1.6.0_29 

      export PATH=$PATH:$JAVA_HOME/bin 

export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar 

4) 保存退出 

5) 注销系统

6) 安装成功后输入 java –version 查看版本是否正确,显示以下信息则正确。 

[root@hbx jdk]# 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 环境变量 :

  3.1 下载 jboss-4.2.2.GA.zip

        网址就不贴了。

  3.2 安装jboss-4.2.2.GA.zip 

  解压到 usr /jboss(在user下创建jboss文件夹)目录下即可 

    [root@hbx usr]# cd jboss/ 

    [root@hbx jboss]# ls 

    jboss-4.2.2.GA.zip 

  3.3  配置 JBoss 环境变量

   找到/etc/profile 文件打开在最后面加入: 

JBOSS_HOME=/usr/jboss/jboss-5.1.0.GA 

PATH=$JBOSS_HOME/bin:$PATH 

export JBOSS_HOME PATH 

     CentOS下apache负载均衡与JBoss集群配置总结

  保存并注销系统

        

四、Jboss 集群负载均衡器配置 

  4.1 httpd-2.0.65.tar.gz 

1) 下载 apache ( httpd-2.0.65.tar.gz ) 

2) 解压 

右键解压到此处。 

3) 配置【这个部分安装的时候可能提示会报错,后面分析】 

打开解压获得的文件夹然后在空白处打开终端输入: 

[root@hbx jboss-4.2.2.GA]# ./configure --prefix=/usr/local/apache2

      --prefix参数指定了将要安装到的目录。此时/usr/local下还没有该目录,make  install后才会出现。

     注意:Apache在安装时不会检查参数是否正确,错误的参数会直接被丢弃,不会 报告给用户。所以使用echo $?命令检查是否有错误,当输出结果为0时表示没有错 误。

4) 编译【这个部分安装的时候可能提示会报错,后面分析】 

        [root@hbx jboss]# cd jboss-4.2.2.GA 

[root@hbx jboss-4.2.2.GA]# make 

5) 安装

[root@hbx jboss-4.2.2.GA]# make install 

  4.2 修改jboss配置

    //本例中,提供服务的监听端口是 7070,请根据实际情况修改。 

打开 /usr/local/apache2/conf/httpd.conf 文件 

将 Listen 80 

改成 Listen 7070 

CentOS下apache负载均衡与JBoss集群配置总结

五、apache mod_jk 的配置 

  5.1 下载 mod_jk-apache-2.0.46-linux-i686.so

http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries

/linux/jk-1.2.23/

注意:这里要选择apache对应的版本的 mod_jk.so,否则配置出错,将其改名为  mod_jk.so,拷贝到/usr/local/apache2/modules 下 

  5.2 配置httpd.conf

在 /usr/local/apache2/conf/httpd.conf 的末尾增加: Include conf/mod_jk.conf 

  5.3 建立文件 

5.3.1 新建uriworkermap.properties 

在/usr/local/apache2/conf/uriworkermap.properties 

/*=loadbalancer 

# 静态文件不由任何worker处理,交给apache httpd 

!/*.gif=loadbalancer 

!/*.jpg=loadbalancer 

!/*.png=loadbalancer 

!/*.css=loadbalancer 

!/*.js=loadbalancer 

!/*.htm=loadbalancer 

!/*.html=loadbalancer 

5.3.2 新建 mod_jk.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 /application/* loadbalancer  //将所有的请求交给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 

<Location /jkstatus/> 

JkMount status 

Order deny,allow 

Deny from all 

Allow from 127.0.0.1 

</Location> 

保存 

在该目录下建立文件 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=127.0.0.1 

    worker.node1.type=ajp13 

    worker.node1.lbfactor=1 

    #worker.node1.local_worker=1 

    #worker.node1.cachesize=10 

  ###################################

# Define Node2 

    #modify the host as your host IP or DNS name. 

     worker.node2.port=8009 

     worker.node2.host= 192.1.68.3.1 

     worker.node2.type=ajp13 

     worker.node2.lbfactor=1 

     #worker.node2.local_worker=1     

     #worker.node2.cachesize=10 

     ######################################

     #Load-balancing behaviour 

     worker.loadbalancer.type=lb 

     worker.loadbalancer.balance_workers=node1,node2 

     worker.loadbalancer.sticky_session=1 

     #worker.loadbalancer.local_worker_only=1 

     #worker.list=loadbalancer 

     #Status worker for managing load balancer 

     worker.status.type=status 

    CentOS下apache负载均衡与JBoss集群配置总结

说明:port参数是配置JBoss AJP所监听的端口号,要和jboss的ajp13配置的端口一致,默认为8009,可以在jboss/server/default/deploy/jbossweb.deployer/server.xml看到,如下:

<!-- Define an AJP 1.3 Connector on port 8009 -->

 <Connector port="8009" address="${jboss.bind.address}" protocol="AJP/1.3"

  emptySessionPath="true" enableLookups="false" redirectPort="8443" />

注意:要在Linux服务器中将这个tcp端口开放。

1) 其中worker.node1.host中,node1代表节点名,host值为节点IP(web服务器的IP地址或机器名。注意:最好使用IP地址), 如果有更多节点,顺序定义更多的node段,并在worker.loadbalancer.balance_workers后全部列出。

2) balanced_workers配置的名称为负载均衡的服务器列表,这个名称必须和之前配置的服务器的名称一致,如例子中的node1和node2。

3) lbfactor为负载均衡因子,值越大服务的Session数越多(分配的负载越多)。注意:如果Apache Session转发服务器和其中一台的web服务器是同一台机器则该机器的lbfactor要比另外一台的lbfactor值小。

4) cachesize是servlet线程池的大小(对session复制有影响)。

5) worker.loadbalancer.sticky_session,设置为1使用粘着session,设置为0不使用粘着session。如果sticky_session设为true时,建议sticky_session_force也设为false,此参数表明如果集群中某台服务器在多次请求没有响应后,是否将当前的请求,转发到其它服务器上处理;sticky_session=true时,影响比较大,会导致转发到其它服务器上的请求,找不到原来的session,所以如果此时请求中有读取session中某些信息的话,就会导致应用的null异常。 

sticky_session

sticky_session_force 

含义

true

false  

SESSION会复制,有粘性 

 true 

 true 

SESSION不复制,有粘性 

false  

 false      

SESSION会复制,无粘性 

 false 

true  

 SESSION会复制,无粘性

ServerName#去掉,改为ServerName 127.0.0.1:7070;

注意:如果要修改端口,例如使用端口8080,还需要将Listen 80改成Listen 7070;

需要的话,可修改/etc/httpd/conf/httpd.conf文件,将AddDefaultCharset UTF-8改为AddDefaultCharset GB2312,使apache支持中文。

六、JBoss 集群节点配置 

6.1 配置server.xml

 打开JBoss 目录下/usr/local/jboss/server/all/deploy/jboss-web.sar/server.xml 和 

/usr/local/jboss/server/default/deploy/jboss-web.sar/server.xml 找到 

<Connector port="8080" address="${0.0.0.0}"(如有外部不可以通过 web 浏览 

器访问 jboss,则要改成 0.0.0.0) 

找到 

<Engine name="jboss.web" defaultHost="localhost" 添加: jvmRoute="nodeX" > 

注意jvmRoute 是节点号,要与在 apache 的 workers.properties 中的定义相对应.

CentOS下apache负载均衡与JBoss集群配置总结


七、 启动 JBoss 集群 

7.1 启动负载均衡器 apache 

在/usr/local/apache2/bin 目录下执行

[root@hbx bin]#./httpd –k start (终止命令: ./httpd –k stop) 

后面如有错误信息,是因为集群中的节点尚未启动,暂时忽略。 

用 netstat 检查 7070 监听端口存在,apache 启动成功. (netstat -an | grep 7070) 

7.2 启动 JBoss 节点 

7.2.1 在集群各机器的/usr/local/jboss/bin,分别执行

[root@hbx bin]# ./run.sh -b 127.0.0.1 //为节点 

的 IP 地址 (终止命令:./shutdown.sh –S) 

用 netstat 检查 8080 端口监听存在. 

用浏览器访问各节点的 8080 端口,能够看到 jboss 的状态. 

Jboss 启动成功. 

CentOS下apache负载均衡与JBoss集群配置总结

7.3 查看日志

 这时你可以去/usr/local/apache2/logs日志记录看启动日志:

[Thu Aug 22 10:38:23 2013]loadbalancer 127.0.0.1 0.050585 

[Thu Aug 22 10:38:23 2013]loadbalancer 127.0.0.1 0.001106 

[Thu Aug 22 10:38:23 2013]loadbalancer 127.0.0.1 0.002499

CentOS下apache负载均衡与JBoss集群配置总结

八、总结

总结一下最近几天给公司搭建服务器遇到的问题。

8.1 安装apache的时候出错

make[2]: *** [install] Error 1 

make[2]: Leaving directory `/tmp/httpd-2.2.22/srclib/apr-util' 

make[1]: *** [install-recursive] Error 1 

make[1]: Leaving directory `/tmp/httpd-2.2.22/srclib' 

make: *** [install-recursive] Error 1

解决方法:

Apache2.0.x与Apache2.2.x在apr上有本质的区别,前者为依赖公用apr,后者依赖于自身的apr。2.0.x的编译基本上没有 apr方面的问题,除非,在编译前,安装了非2.0.x所需的apr,如果是这样,则需要将已经安装的apr去除,然后再编译。HTTP Sever2.2.22修复了不少重要安全问题,包含APR(Apache Portable Runtime)1.4.5和APR-util(Apache Utility Library)1.4.2。因此不需要像网上其它教程那样从外部找源码安装apr和apr-util。将安装前已存在于系统中的apr去除后,再编译 apache2.2.x自身srclib里的apr和apr-util。安装完apr和 apr-util后,./configure配置Apache时可能会出现下面错误:

configure: error: Cannot use an external APR with the bundled APR-util

configure: error: APR version 1.2.0 or later is required

【推荐完整步骤】

1. 安装apr

[root@hbx bin]# ./run.sh -b 127.0.0.1 //为节点 

[root@hbx bin]:/usr/apache/cd httpd-2.0.65

[root@hbx bin]:/usr/apache/httpd-2.0.65# cd apr

[root@hbxbin]:/usr/apache/httpd-2.0.65/apr#./configure --prefix=/usr/local/apr

[root@hbx bin]:/usr/apache/httpd-2.0.65/apr# make

[root@hbx bin]:/usr/apache/httpd-2.0.65/apr# make install

2. 安装apr-util

[root@hbx bin]:/usr/local/apache/httpd-2.0.65/apr# cd ..

[root@hbx bin]:/usr/local/apache/httpd-2.0.65# cd apr-util

[root@hbx bin]:/usr/local/apache//httpd-2.0.65/apr-util# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr

[root@hbx bin]:/usr/local/apache/httpd-2.0.65/apr-util# make

[root@hbx bin]:/usr/local/apache/httpd-2.0.65/apr-util# make install

8.2 安装apache的时候出错[遭遇拦路虎]

编译的时候遇到下面的错误:

configure: error: in `/usr/local/src/apache/httpd-2.0.65/srclib/apr':

configure: error: no acceptable C compiler found in $PATH

google发觉时没有安装c的编译器导致的,网上说yum -y install gcc就可以了,试了一下,然后发觉yum没有安装,安装一下。

apt-get install yum

结果获得了下面的提示。。。。。(各种不利)

E: Unable to locate package yum

说明找不到yum的安装源。。。ubuntu怎么搞的,后来想了一下,服务器是别人用镜像给做的,极有可能安装源信息不对,经google后使用

apt-get update

更新一下安装源,再次安装:

apt-get install yum

成功,然后再来安装gcc

yum -y install gcc

............. 还是不行说什么没有源,看来这个yum还需要一个安装源但是我的系统上没有,算了,google到下面的命令:

apt-get install g++

运行之:终于安装完成,再次configure.

[root@hbx bin]./configure --prefix=/usr/local/httpd-2.0.65  --enable-so --enable-mods-shared=most --with-mpm=worker

顺利通过。