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
保存并注销系统
四、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
五、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
说明: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 中的定义相对应.
七、 启动 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 启动成功.
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
八、总结
总结一下最近几天给公司搭建服务器遇到的问题。
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
顺利通过。
http://blog.csdn.net/yeah898/article/details/10180579