Apache+JBoss配置多实例+负载均衡(mod_jk实现)

最近需要使用JBoss配置项目的负载均衡(最好能有多实例保证并发量),经过1整天的搜索和实践,最终终于成功,在此记录下来,以便他人和自己日后参考。

系统环境:

Windows Server 2003

软件环境:

JDK 7 (Update 55)

VC9 (http://www.microsoft.com/download/en/details.aspx?id=5582)

Apache httpd 2.2.29 (http://www.apachelounge.com/download/additional/)

JBoss-5.1.0.GA (http://jbossas.jboss.org/downloads)

注意:尽量使用规定版本的程序,尤其是JBoss(版本差异太大),否则可能会出现未知的错误

一、安装JDK及环境变量配置(略)

二、解压httpd服务器(进行初始化即可)

注意:该httpd解压后,需要手动修改conf/httpd.conf配置文件中的部分内容(如:ServerName、DocumentRoot等)

三、解压JBoss服务器(暂时不配置)

四、配置httpd服务器

1、下载mod_jk.so模块(http://tomcat.apache.org/download-connectors.cgi),使用对应httpd服务器的版本文件,本人这里使用的是mod_jk-1.2.31-httpd-2.2.3.so(http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.31/

2、为httpd服务器添加mod_jk模块,将mod_jk-1.2.31-httpd-2.2.3.so改名为mod_jk.so,放入modules文件夹下即可

3、在conf文件夹下添加文件mod_jk.conf(主要是载入刚刚的mod_jk模块,并做配置):

# 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
# 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>

4、修改conf/httpd.conf,在最下方加入如下配置(意思即为引用mod_jk.conf设置文件):

#JBoss conf
Include conf/mod_jk.conf

5、在conf文件夹下增加uriworkermap.properties(负载均衡的访问路径配置,在mod_jk.conf提及):

/*=loadbalancer

6、在conf文件夹下增加workers.properties(负载均衡的服务器节点配置,在mod_jk.conf提及):

注意:worker.node1.port和worker.node2.port是服务器的ajp端口,这里两个节点的端口相隔100,是因为后边在JBoss设置中,多实例的端口偏移量设置了100。

# Define list of workers that will be used for mapping requests
worker.list=loadbalancer,status
# Load-balancing behaviour
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=node1,node2
worker.loadbalancer.sticky_session=1
# Status worker for managing load balancer
worker.status.type=status

# Node1
worker.node1.port=8009
worker.node1.host=127.0.0.1
worker.node1.type=ajp13
worker.node1.lbfactor=1
worker.node1.cachesize=10
# Node2
worker.node2.port=8109
worker.node2.host=127.0.0.1
worker.node2.type=ajp13
worker.node2.lbfactor=1
worker.node2.cachesize=10

五、配置多实例的JBoss服务器

由于是多实例(多进程,不同端口),所以我们需要使用两份一样的部署应用,我们先将JBoss解压后的server/all文件夹复制两份,分别为server/node1文件夹和server/node2文件夹。

两个文件夹即为两个实例启动的部署应用,现在开始详细的配置:

1、node1与node2类似的配置:

(1)修改server/node1(node2)/deploy/jbossweb.sar/server.xml配置文件:

A、两个${jboss.bind.address}均替换为${0.0.0.0}(出于安全性考虑,JBoss会绑定服务器IP,设置为0.0.0.0将解除这一绑定的限制)

B、将node1中<Engine name="jboss.web" defaultHost="localhost">修改为<Engine name="jboss.web" defaultHost="localhost" jvmRoute="node1">,node2做对应修改(表示不同的节点,节点名称需要和httpd服务器配置workers.properties文件中的节点名称一致)

(2)修改server/node1(node2)/deploy/messaging/messaging-service.xml配置文件:

A、将node1中<attribute name="ServerPeerID">${jboss.messaging.ServerPeerID:0}</attribute>的数值0修改为1,node2中对应位置修改为2(该数字表示集群时的id,不可重复)

(3)修改server/node1(node2)/deployers/jbossweb.deployer/META-INF/war-deployers-jboss-beans.xml文件:

A、将如下四段解除配置,并修改false为true,修改结果(用于session同步):

<property name="useJK">true</property>
<property name="useSessionPassivation">true</property>
<property name="passivationMaxIdleTime">-1</property>
<property name="passivationMinIdleTime">-1</property>

(4)修改server/node1(node2)/conf/bootstrap/profile.xml配置文件(在parameter标签处加入class="java.io.File",避免启动时报错):

<bean name="AttachmentStore" class="org.jboss.system.server.profileservice.repository.AbstractAttachmentStore">
	<constructor><parameter class="java.io.File"><inject bean="BootstrapProfileFactory" property="attachmentStoreRoot" /></parameter></constructor>
	...
</bean>

2、node2的不同配置:

(1)修改server/node2/conf/bindingservice.beans/META-INF/bindings-jboss-beans.xml配置文件:

A、JBoss启动的端口设置偏移量,由0修改为100(这里就是httpd服务器中ajp端口间隔100的原因):

<bean name="PortsDefaultBindings"  class="org.jboss.services.binding.impl.ServiceBindingSet">
    <constructor>
        ...
        <parameter>100</parameter>
        ...
    </constructor>
</bean>

六、项目中session同步说明:

1、上述的JBoss已经提及了session的同步,并修改了war-deployers-jboss-beans.xml的配置;

2、修改项目自身的配置(以server/node1(node2)/deploy/ROOT.war为例)

(1)修改WEB-INF/web.xml文件,加入<distributable />(一定要注意顺序,顺序错误启动会报错的)

<web-app>
  <display-name>Welcome to JBoss</display-name>
  <description>
     Welcome to JBoss
  </description>
  <distributable />
  <servlet>
    <servlet-name>Status Servlet</servlet-name>
    <servlet-class>org.jboss.web.tomcat.service.StatusServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Status Servlet</servlet-name>
    <url-pattern>/status</url-pattern>
  </servlet-mapping>
</web-app>

(2)在WEB-INF文件夹下添加jboss-web.xml配置文件(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>
    <context-root>/</context-root>
    <replication-config>
        <replication-trigger>SET_AND_NON_PRIMITIVE_GET</replication-trigger>
        <replication-granularity>SESSION</replication-granularity>
        <replication-field-batch-mode>True</replication-field-batch-mode>
    </replication-config>
</jboss-web>

七、测试

1、分别在server/node1(node2)/deploy/ROOT.war下添加test文件夹,放入测试jsp(附件有下载);

2、启动Apache httpd服务器(通过命令或制作Windows服务均可);

3、启动两个JBoss实例:

(1)在JBoss的bin文件夹下,添加两个bat批处理(启动设置好的node1和node2两个JBoss实例):

run-node1.bat,文件内容(右键用记事本编辑即可):

run.bat -c node1

run-node2.bat,文件内容(右键用记事本编辑即可):

run.bat -c node2

(2)依次双击即可启动两个JBoss实例(启动较慢,需等待node1启动后再启动node2)

4、访问测试页面:

(1)启动浏览器1,访问http://localhost/test/index.jsp,截图如下:

(2)启动浏览器2,访问http://localhost/test/index.jsp,截图如下:

说明:通过sessionid即可看出进行了负载均衡

八、附注

1、由于每个浏览器每次的访问只有一个session,而且每个浏览器每次session会话中,并未发现节点的变化,所以session的同步并未测试;

2、上述中提及的很多配置都没有详细的说明(如conf设置和一个配置文件),如需要详细解释,请自行搜索。

附件:test.zip

时间: 2024-10-11 17:42:59

Apache+JBoss配置多实例+负载均衡(mod_jk实现)的相关文章

apache+inotify-tools+keepalived+lvs-DR模式配置高可用负载均衡集群

环境:虚拟机VMware workstation 9 操作系统:Redhat 5.6 i386 一.keepalived+LVS-DR模式配置高可用负载均衡 拓扑如下: 二.服务器IP配置信息 四台服务器均有VMware虚拟机实现,两台HA主机.两台web服务器.网络方式都设置为NAT模式 1.master:192.168.80.145 2.slaver:192.168.80.137 3.web1:192.168.80.144 4.web2:192.168.80.134 5.VIP:192.16

Centos7+Nginx+Keepalived实现Apache服务的高可用&负载均衡

Centos7+Nginx+Keepalived实现Apache服务的高可用&负载均衡 今天是2017年的第一天,昨天也就是2016年的最后一天,我尝试部署了Centos7+Nginx+Keepalived实现WEB服务的高可用负载均衡服务,终于在2017年的第一天前完成了,所以在此分享给有需要的朋友:说到负载均衡,其实在linux下有很多服务可以实现,比如nginx.haproxy.lvs等服务,当前我们在前面的文章有介绍过了,但是对于高可用服务,我们在linux下最常见也是应用最多的是Kee

图文解说:Nginx+tomcat配置集群负载均衡

开发的应用采用F5负载均衡交换机,F5将请求转发给5台hp unix服务器,每台服务器有多个webserver实例,对外提供web服务和socket等接口服务.之初,曾有个小小的疑问为何不采用开源的apache.Nginx软件负载,F5设备动辄几十万,价格昂贵?自己一个比较幼稚的问题,后续明白:F5是操作于IOS网络模型的传输层,Nginx.apache是基于http反向代理方式,位于ISO模型的第七层应用层.直白些就是TCP UDP 和http协议的区别,Nginx不能为基于TCP协议的应用提

Docker+nginx+tomcat7配置简单的负载均衡

本文介绍在Docker上配置简单的负载均衡,宿主机为Ubuntu 14.04.2 LTS,两个CentOS容器,宿主机安装Nginx,两台容器安装tomcat7.结构如下: 此方案的原理是将宿主机的端口和docker容器的端口做一个映射(即访问宿主机的某端口会映射到docker容器对应的端口),然后在宿主机通过配置Nginx,即可达到访问宿主机的某端口,按规则分配到指定的服务地址,即完成了负载均衡. 配置步骤 1.准备宿主机,宿主机是Ubuntu 14.04.2 LTS,安装在Vmware中,具

Nginx+tomcat配置集群负载均衡

转自:http://blog.csdn.net/bruce_6/article/details/38228299 相信很多人都听过nginx,这个小巧的东西慢慢地在吞食apache和IIS的份额.那究竟它有什么作用呢?可能很多人未必了解. 说到反向代理,可能很多人都听说,但具体什么是反向代理,很多人估计就不清楚了.摘一段百度百科上的描述: 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回

转】Nginx+tomcat配置集群负载均衡

原博文出自于:http://blog.csdn.net/bruce_6/article/details/38228299         感谢! 相信很多人都听过nginx,这个小巧的东西慢慢地在吞食apache和IIS的份额.那究竟它有什么作用呢?可能很多人未必了解. 说到反向代理,可能很多人都听说,但具体什么是反向代理,很多人估计就不清楚了.摘一段百度百科上的描述: 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务

分布式文件系统fastdfs_V5.09配置双tracker负载均衡

分布式文件系统fastdfs_V5.09配置双tracker负载均衡 环境准备 操作系统: Centos 7 服务器: IP:192.168.2.238 IP:192.168.2.239 软件包: fastdfs-5.09.tar.gz fastdfs-nginx-module_v1.16.tar.gz libfastcommon-master nginx-1.7.0.tar.gz ngx_http_lower_upper_case-master 注:统一放置/home/soft目录,并且解压到

配置MST实现负载均衡

配置MST实现负载均衡 三台交换机SW1.SW2.SW3,共有四个VLAN,此处的链路均为100M链路,现在使用MST 技术,实现SW1 成为VLAN 1.VLAN 2 的根网桥,SW2 成为VLAN 3.VLAN 4 的根网桥,数据包从SW3 流出时要分成两个方向,VLAN 1-2 的数据包转发到SW1 方向,而VLAN 3-4 的数据包转发到SW2方向.并且尽量产生较少的生成树实例,一方面减少CPU 及内存的负担.一方面要实现VLAN 的负载均衡. [实验步骤]   第一部分:配置Ether

配置nginx的负载均衡

1.1   什么是负载均衡 负载均衡 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽.增加吞吐量.加强网络数据处理能力.提高网络的灵活性和可用性. 负载均衡,英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器.FTP服务器.企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务. 1.2   需求 nginx作为负载均衡服务器,用户请求先到达nginx,再由nginx根据负载配置将请求转发至 tomcat服务器.