jboss-5.1.0.GA 集群环境搭建 APACHE 双节点 单网卡地址 单机

此文章仅为了解APACHE+JBOSS集群部署

1        文档概要

  • 前期准备
  • JBOSS部署 NODE 建立
  • APACHE部署
  • APACHE mod_jk集成

2        前期准备:

下载 jboss-5.1.0.GA-jdk6.zip  http://www.jboss.org/jbossas/downloads/

PC: WIN7

网卡:单网卡

APACHE:官方无64 bit WIN 版本,下载位置 https://blackdot.be/download-archive/,下载httpd-2.2.19-win64.zip mod_jk1.2.30_x64.zip

关于APACHE mod_jk 若其他系统版本可参考http://httpd.apache.org/  http://www.apache.org/dist/jakarta/tomcat-connectors/jk/binaries/ 进行下载

 

3        JBOSS 部署:

  • 下载jboss-5.1.0.GA-jdk6.zip ,解压至E:\tools\jboss-5.1.0.GA
  • 进入 E:\tools\jboss-5.1.0.GA\server\ 目录
  • 复制all目录两次,分别命名为node1 node2
  • 进入 E:\tools\jboss-5.1.0.GA\bin 目录,执行以下命令启动NODE、
run.bat -c node1 -g DocsPartition -u 239.255.100.100 ^
-b 10.120.249.138 -Djboss.messaging.ServerPeerID=1 ^
-Djboss.service.binding.set=ports-default
run.bat -c node2 -g DocsPartition -u 239.255.100.100 ^
-b 10.120.249.138 -Djboss.messaging.ServerPeerID=2 ^
-Djboss.service.binding.set=ports-01


命令说明
-c 开关指明JBOSS启动哪个服务 
-g 开关指明集群名称
-u 开关设置广播地址(建议??)
-b 开关设置网络地址(建议与网卡静态地址保持一致)
-Djboss.messaging.ServerPeerID 指定NODE ID
-Djboss.service.binding.set 指定服务绑定端口号组(e.g ports-default http为8080 ,ports-01 为 8090 ),由于单机多


服务,所以需要使用不同端口启动NODE

 

这个-u地址到现在没弄明白,广播地址,但配置成什么?等待。。。。

4        APACHE部署:

解压httpd-2.2.19-win64.zip 至d:\httpd-2.2-x64

编辑 D:/httpd-2.2-x64/conf/httpd.conf  文件 ,替换所有/httpd-2.2-x64 为 d:/httpd-2.2-x64

若需要解决盗链或者提供友好请求地址则修改配置文件将#LoadModule rewrite_modulemodules/mod_rewrite.so 行,去除#注释

加入WIN 服务

运行-cmd

cdD:\httpd-2.2-x64\bin

httpd.exe -kinstall

启动服务:httpd.exe -k start

验证:启动IE,输入http://localhost/,若页面显示It works! 安装成功!

停止服务:httpd.exe -k stop

 

4.1     配置mod_jk:***** 初步复杂

注意版本为1.2.x,不要用2.x

将 mod_jk1.2.30_x64.zip 解压后, 拷贝modules目录中mod_jk.so 至 D:\httpd-2.2-x64\modules(由于此部分参照JBOSS Clustering_Guide,因此,不是压缩包内全部内容拷贝)

 

4.2     APACHE 加入mod_jk

修改APACHE_HOME/conf/httpd.conf 文件,末尾加入

# Include mod_jk'sspecific configuration file
Include conf/mod-jk.conf

4.3     mod_jk新增负载均衡处理规则

在APACHE_HOME/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
<Location /jkstatus/>
    JkMount status
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
</Location>



 


其中有两个非常重要的设置

  • LoadModule 指令所指向的文件必须与之前下载放置的mod_jk.so相同
  • JkMount 指令 配置哪些URL应该被负载均衡所加载,换句话说就是一旦有人访问了该URL,则mod_jk就会负责负载均衡的转发,若想全部路径均使用,则可配置/*

/application/* 这个有点意思,JBOSS文档给出这个,是说非application路径的访问时静态的页面,涉及至业务逻辑application 的需要转发至负载均衡,也正是分布式部署的目标吧


除了使用JkMount ,也可以使用JkMountFile 指令指定一个负责负载均衡的配置文件,该文件一般存在APACHE_HOME/conf 目录下,名称为 uriworkermap.properties,以下为该文件内容样例

#Simple worker configuration file
#Mount the Servlet context to the ajp13 worker
/jmx-console=loadbalancer
/jmx-console/*=loadbalancer
/web-console=loadbalancer
/web-console/*=loadbalancer

上面文件配置指出jmx_console web-console访通过负载均衡分发

4.4     在mod_jk中配置工作WORKER

顾名思义,你不告诉mod_jk你的node在哪里,它怎么知道转发http请求给谁,所以需要一个配置文件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.120.249.138
worker.node1.type=ajp13
worker.node1.lbfactor=1
#worker.node1.cachesize=3


# Define Node2
# modify the host as your host IP or DNS name.
worker.node2.port=8109
worker.node2.host= 10.120.249.138
worker.node2.type=ajp13
worker.node2.lbfactor=1
#worker.node2.cachesize=3


# Load-balancing behaviour
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=node1,node2
worker.loadbalancer.sticky_session=0
#worker.list=loadbalancer


# Status worker for managing load balancer
worker.status.type=status

 

看到很多人堆这部分配置,都说会在目录log下,出现配置中部分属性(worker.node2.cachesize)的不支持。关于具体mod_jk版本对应属性可以参看http://tomcat.apache.org/connectors-doc/reference/workers.html

  

读一下这个配置文件内容!

  •  worker.node2.port 这个地方,JBOSS官方文档两个NODE都是8009,单机情况下是不对的,注意,这个port 指的是AJP/1.3 协议的端口,默认8009 ,port-01 是8109
  •  lbfactor 为负载权重,值越大,分的活越多
  • worker.node1.host 可以填写域名也可以填写IP,当然域名需要在HOSTS文件中配置的
  •  cachesize ,缓存大小,不要大于目标servlet容器缓存大小就可以了。
  • 有个type=ajp13  ajp是一个协议

扩充:mod_jk模块的典型工作流程是这样的:一个HTTP请求过来,mod_jk模块根据其URI选择合适的worker来进行处理。如果是lb_worker(负载均衡的worker),就再根据各种条件选择后台合适的ajp_worker(处理AJP协议的worker)。ajp_worker将HTTP协议的包,组装成AJP协议格式的包,然后选取一条空闲的链接,发送给后台的tomcat服务器。等到后台将数据发送过来时,接收并解析AJP协议,重新组装成HTTP协议,然后把结果发送给客户端

  • worker.node1.host、worker.node2.host需要改成jboss集群各机器的实际IP. 如果有更多的节点,新增更多的node段,并在worker.loadbalancer.balance_workers 后加入新增节点. 
  • 好的,还有worker.loadbalancer.sticky_session=1

这个也挺有意思,假设一种情况,客户端发送两个请求给jk ,jk分别转发至两个NODE,那么此时在NODE之间的SESSION就会存在不同,就是JBOSS的粘性SESSION sticky_session概念。为了避免该情况,通过配置worker.loadbalancer.sticky_session=1 设置为当同一个IP过来始终又同一台服务器进行处理。若设置为0则,可多台机器处理(更符合分布式处理架构)。那这样又会出现一个问题,当一个正在处理用户请求的服务器出现问题,那么另外一台服务器没有该用户SESSION信息,这样就用到了SESSION复制技术(会在文末解释)。

5        JBOSS节点信息修改

mod_jk 至此配置结束,下面配置JBOSS的节点,让他们知道节点名字信息

编辑JBOSS_HOME/server/node1/deploy/jbossweb.sar/server.xml

找到Engine 节点,新增属性 jvmRoute="node1" ,修改后如下

<Enginename="jboss.web" defaultHost="localhost"jvmRoute="node1">

确认该文件中AJP连接器启用,查看 Connector protocol="AJP/1.3" 节点是否被注释,默认启用

同样对 JBOSS_HOME/server/node2/deploy/jbossweb.sar/server.xml进行操作,新增jvmRoute="node2"属性。

至此大功告成

6        发布

JOBSS集群发布,可以找到 E:\tools\jboss-5.1.0.GA\server\node2\farm目录,将发布的内容拷贝进来。通过控制台可以很清楚的看到 NODE2,开始发布,过一会儿NODE1控制台开始自动同步。

7        测试

注意:当localhost/jmx-console可以访问,但自定义应用不能访问,请检查JkMount,开为/*,或者在uriworkermap.properties 文件中添加映射路径。

HTTP测试

保证启动APACHE 、JBOSS NODE1/2 ,地址栏输入http://localhost/jmx-console/ ,会自动跳转至jmx-console。

地址栏输入自定义应用,尝试访问自定义应用。

确认正常访问后,停止NODE1 NODE2 中的一个,另一个可以正常访问。

8        Jboss集群session复制  

前文有个配置叫worker.loadbalancer.sticky_session=1 , 就是强制一个访问端的所有请求都发送至一个NODE,但当NODE down时候,不可避免的会丢失session信息。所以会用到session复制。

8.1     一般情况

在JavaEE开发中,写入web.xml中

<?xml version="1.0"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
      <distributable/>
</web-app>


写入 dirtributable标签即可。

8.2     进一步配置session复制

可单独写入jboss-web.xml文件

<!DOCTYPE jboss-web PUBLIC
-//JBoss//DTD Web Application 5.0//EN
http://www.jboss.org/j2ee/dtd/jboss-web_5_0.dtd>
<jboss-web>
    <max-active-sessions>20</max-active-sessions>
        <passivation-config>
        <use-session-passivation>true</use-session-passivation>
        <passivation-min-idle-time>60</passivation-min-idle-time>
        <passivation-max-idle-time>600</passivation-max-idle-time>
    </passivation-config>
</jboss-web>


具体节点含义,后记会增加,暂时可参考《JBoss AS 5.1 Clustering Guide》
9 参考文献:
JBoss AS 5.1 Clustering Guide 
http://wenku.baidu.com/view/ea7b6247b307e87101f69658.html


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值