手机版
你好,游客 登录 注册
背景:
阅读新闻

实例详解Tomcat组件安装+Nginx反向代理Tomcat+Apache使用mod_jk和mod_proxy反向代理和负载均衡

[日期:2013-06-02] 来源:Linux社区  作者:chrinux [字体: ]

下面配置下mod_jk模块进行配置实现反向代理功能

mod_jk是ASF的一个项目,是一个工作于apache端基于AJP协议与Tomcat通信的连接器,它是apache的一个模块,是AJP协议的客户端(服务端是Tomcat的AJP连接器)。,在apache服务器上安装

编译、安装tomcat-connectors

1
2
3
4
[root@node1 ~]# tar xf tomcat-connectors-1.2.37-src.tar.gz
[root@node1 ~]# cd tomcat-connectors-1.2.37-src/native/
[root@node1 native]# ./configure --with-apxs=/usr/local/apache/bin/apxs #编译apache的模块
[root@node1 native]# make && make install

apache要使用mod_jk连接器,需要在启动时加载此连接器模块。为了便于管理与mod_jk模块相关的配置,这里使用一个专门的配置文件/etc/httpd/extra/httpd-jk.conf来保存相关指令及其设置。其内容如下:

1
2
3
4
5
6
7
8
9
# Load the mod_jk
LoadModule jk_module modules/mod_jk.so
JkWorkersFile /etc/httpd/extra/workers.properties jk配置文件
JkLogFile logs/mod_jk.log
JkLogLevel debug
JkMount /* TomcatA 把那个uri路径送到那个tomcat上去,TomcatA是jvm的名称
 
为了让apache能使用/etc/httpd/extra/httpd-jk.conf配置文件中的配置信息,需要编辑/etc/httpd/httpd.conf,添加如下一行:
Include /etc/httpd/extra/httpd-jk.conf

图像 24

对于apache代理来说,每一个后端的Tomcat实例中的engine都可以视作一个worker,而每一个worker的地址、连接器的端口等信息都需要在apache端指定以便apache可以识别并使用这些worker。约定俗成,配置这些信息的文件通常为workers.properties,其具体路径则是使用前面介绍过的JkWorkersFile指定的,在apache启动时,mod_jk会扫描此文件获取每一个worker的配置信息。比如,我们这里使用/etc/httpd/extra/workers.properties。

配置apache实用mod_jk模块

1
2
3
4
5
6
7
[root@node1 bin]# vim /etc/httpd/extra/httpd-jk.conf 添加 如下内容
LoadModule jk_module modules/mod_jk.so
JkWorkersFile /etc/httpd/extra/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel debug
JkMount /* tomcat1 #tomcat1 必须和workers.properties内定义的相同
JkMount /jkstatus/ stat1

根据前文中的指定,这里使用/etc/httpd/extra/workers.properties来定义一个名为TomcatA的worker,并为其指定几个属性。文件内容如下:

1
2
3
4
5
6
7
[root@node1 bin]# vim /etc/httpd/extra/workers.properties
worker.list = tomcat1,stat1
worker.tomcat1.type = ajp13
worker.tomcat1.host = 192.168.0.1
worker.tomcat1.port = 8009
worker.tomcat1.lbfactor=1
worker.stat1.type = status

重启httpd服务,并进行测试

[root@node1 bin]# service httpd restart

测试页面如下

通过上面的配置和测试,现在已经实现了apache基于mod_proxy和mod_jk反向代理tomcat,下面我们通过apache和两个tomcat实现负载均衡

tomcat1上的配置

修改配置文件,增加jvmRoot的定义,这是集群中必须配置的参数

1
2
[root@localhost ~]# vim /usr/local/tomcat/conf/server.xml #修改下面参数
<Engine name="Catalina" defaultHost="tomcat1.chris.com" jvmRoot="tomcat1">

重启服务使其生效

1
[root@localhost webapp]# service tomcat stop

tomcat2上的配置

1
2
3
4
[root@localhost ~]# vim /usr/local/tomcat/conf/server.xml #修改下面参数
<Engine name="Catalina" defaultHost="tomcat2.chris.com" jvmRoot=tomcat2"">
[root@localhost webapp]# service tomcat start
[root@localhost webapp]# service tomcat stop

两台tomcat服务器上只需要修改上面这两个参数,下面在apache上进行配置

基于mod_jk的负载均衡

1
2
3
4
5
6
7
修改/etc/httpd/extra/httpd-jk.conf为如下内容:
LoadModule jk_module modules/mod_jk.so
JkWorkersFile /etc/httpd/extra/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel debug
JkMount /* lbcluster1 #lbcluster1集群名称
JkMount /jkstatus/ stat1

编辑/etc/httpd/extra/workers.properties,添加如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
worker.list = lbcluster1,stat1 --lbcluster1集群名称
worker.TomcatA.type = ajp13
worker.TomcatA.host = 172.16.100.1
worker.TomcatA.port = 8009
worker.TomcatA.lbfactor = 5
worker.TomcatB.type = ajp13
worker.TomcatB.host = 172.16.100.2
worker.TomcatB.port = 8009
worker.TomcatB.lbfactor = 5
worker.lbcluster1.type = lb 负载均衡work,lb内置的类
worker.lbcluster1.sticky_session = 1 会话绑定
worker.lbcluster1.balance_workers = TomcatA, TomcatB 集群中的实列
worker.stat1.type = status

重启服务,使配置生效

[root@node1 ~]# service httpd restart

测试访问,已经代理到不同的后端 主机上了

基于mod_proxy的负载均衡

先禁用上面基于mod_jk的配置文件

1
2
3
[root@node1 ~]# vim /etc/httpd/httpd.conf
Include /etc/httpd/extra/httpd-proxy.conf #启用mod_proxy的配置
#Include /etc/httpd/extra/httpd-jk.conf #禁用mod_jk的配置

配置proxy负载均衡
在httpd.conf的全局配置中配置如下内容:

1
2
3
4
5
ProxyRequests Off
<proxy balancer://lbcluster1>
BalancerMember ajp://192.168.0.1:8009 loadfactor=10 route=tomcat1
BalancerMember ajp://192.168.0.3:8009 loadfactor=10 route=tomcat2
</proxy>

29

在虚拟主机中实现代理

1
2
3
4
5
<VirtualHost *:80>
ServerName www.magedu.com
ProxyPass / balancer://lbcluster1/ stickysession=jsessionid
ProxyPassReverse / balancer://lbcluster1/
</VirtualHost>

30

测试结果如下

31

至此实现了apache基于mod_jk和mod_proxy的负载均衡的反向代理的功能。这两个模块的配置原理大致相同,就是所使用的命令和配置位置有点小出入,需要注意下!

由于配置过程中命令繁多,难免会出现错误,还望各位大牛们指出~~谢谢!

linux
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款