使用mod_jk整合Apache HTTP Server和Tomcat

来源:互联网 发布:猫咪软件 编辑:程序博客网 时间:2024/05/20 06:28

前言

我们的一个新项目是一个RESTful架构风格的程序,服务器端用Java编写,对客户端提供REST Web Service。使用Tomcat作为Servlet Container,Tomcat本身是无状态的(stateless,REST的特点),无需做Session同步。不过为了实现可伸缩性,可用性以及可靠性的非功能性要求,需要做负载均衡,使用Apache HTTP Server作为前置。

Apache HTTP Server(以下简称Apache)整合Tomcat,通过模块来实现。有两个方案,mod_jk和mod_proxy。前者是老牌劲旅,功能强大完备,但是理念有些落后,Apache安装包不包含,需要额外下载;后者是主力新军,有待雕琢和检验,天空才是极限,Apache安装包自带。具体的比较可以参考StackOverflow上的帖子(见参考1)本文只介绍mod_jk的方式。

结构图如下:

Apache整合Tomcat图

具体步骤

1. 安装Apache和Tomcat

我用的操作系统是Windows,选择的都是绿色版本(无需安装,解压缩即可的那种)。 Apache HTTP Server的安装有很多教程,这里不再铺开来说。注意两点,一是设置ServerRoot,如果在Windows系统下,把Apache直接装在所在盘的根目录即可免去配置ServerRoot;而是配置端口,Apache的默认端口是80,有可能80端口已经被已有程序占用,那么得配置。启动有问题的话,请到logs目录下查看日志。

Tomcat安装在多台机器上直接启用即可。如果你向我一样一台机器安装两个Tomcat,那么必须解决端口冲突的问题。我的做法是把两个Tomcat命名为A和B,A端口不变,B端口加1,Server, Connector for http以及Connector for AJP都要修改,涉及5个数字。Tomcat的数量当然不仅限于2个,可以自行发挥,类推即可。

安装好之后需要验证安装。Apache是否成功,单个Tomcat是否成功,两个Tomcat同时运行是否成功。

2. 下载mod_jk,并安装mod_jk

注意下载与Apache版本对应的mod_jk,复制到Apache的modules目录即可。

3. 配置mod_jk

涉及到两个两个文件conf/httpd.conf和conf/workers.properties。具体的配置含义可以自行查询。

conf/httpd.conf需要增加几行配置项(如果是Apache2.4, 记得取消注释LoadModule access_compat_module modules/mod_access_compat.so)。代码如下:

# load mod_jk LoadModule jk_module modules/mod_jk.so# Specify path to worker configuration fileJkWorkersFile conf/workers.properties# Configure logging and memoryJkShmFile logs/mod_jk.shmJkLogFile logs/mod_jk.logJkLogLevel info# Configure monitoringJkMount /jkmanager/* jkstatus<Location /jkmanager>Order deny,allowDeny from allAllow from localhost</Location># Configure applicationsJkMount /* loadbalancer

新建conf/workers.properties文件,专属于于mod_jk。代码如下:

# Define worker namesworker.list=jkstatus, loadbalancer# Create virtual workersworker.jkstatus.type=statusworker.loadbalancer.type=lb# Declare Tomcat server workers 1 through nworker.worker1.type=ajp13worker.worker1.host=localhostworker.worker1.port=8009worker.worker2.type=ajp13worker.worker2.port=8010worker.worker2.host=localhost# Associate real workers with virtual LoadBalancer workerworker.loadbalancer.balance_workers=worker1,worker2

It’s Done,就是那么简单。赶快试试吧。

后记

我们的服务器是无状态的,无需Session同步。如果你的项目需要,那么我的理解与Apache也没有关系,直接使用Tomcat的Cluster功能即可。

我们项目用到了WebSocket,WebSocket的可以做Load balancing。WebSocket的Load balancing与普通http请求相同,这是因为WebSocket是由Http Upgrade而来,初始的URL负载均衡了,WebSocket自然均衡。不过由于WebSocket是长连接,如果Server断掉了,WebSocket客户端必须主动发起重连,也就是客户端需要重连机制。

参考链接:

StackOverflow
MuleSoft

友情链接

书法和国画爱好者请进

1 0
原创粉丝点击