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

charles windows proxy打开无法上网_Apache


说明: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

    

charles windows proxy打开无法上网_CentOS_02

  保存并注销系统

        

四、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 
   
打开 /usr/local/apache2/conf/httpd.conf
将 Listen 80 
改成 Listen 7070

charles windows proxy打开无法上网_负载均衡_03

五、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

    

charles windows proxy打开无法上网_服务器_04

说明: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 中的定义相对应.

charles windows proxy打开无法上网_Apache_05



七、 启动 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 启动成功. 

charles windows proxy打开无法上网_服务器_06

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

charles windows proxy打开无法上网_Apache_07

八、总结

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

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
顺利通过。