ITPub博客

首页 > IT基础架构 > 网络安全 > Apache连接多台tomcat,通过JK2

Apache连接多台tomcat,通过JK2

网络安全 作者:chinaboywg 时间:2014-10-23 12:36:31 0 删除 编辑

本文只涉及到Apache如何配置连接到多台tomcat,同时将用户的session绑定到最初访问的tomcat上去。不讨论Apache、tomcat的安装,其他配置,以及tomcat的cluster等等。

[@more@]

Apache连接多台tomcat,通过JK2

本文只涉及到Apache如何配置连接到多台tomcat,同时将用户的session绑定到最初访问的tomcat上去。不讨论Apache、tomcat的安装,其他配置,以及tomcat的cluster等等。

目录

环境:

Apache连接单台tomcat

Apache连接多台tomcat

连接绑定同一个tomcat – 如何使用stickySession

自动判断tomcat好坏

附:

完整的workers2.properties:

在server.xml中的改动

环境:

Apache2.0.53

Tomcat4.1.18

Connector采用JK2

操作系统: 在windowsxp 和 Linux上都试过

连接单台tomcat

Apache和tomcat连接,配置文件为:workers2.properties。如果通过mod_jk, 配置文件为workers.properties,这个网上资料太多了,这里不讨论 (怎么编译、安装动态连接库自己查资料,tomcat.apache.org上面写的非常详细,照着做就可以了)

配置文件workers2.properties: --- 具体的配置文件参数什么意思,上tomcat.apache.org上去查,我也不是很清楚,现在够用即可.

[shm]

file=${serverRoot}/logs/shm.file

size=1048576

[channel.socket:172.18.3.39:8009]

info=Ajp13 forwarding over socket

keepalive=1

port=8009

host=172.18.3.39

#配置了一个worker

[ajp13:172.18.3.39:8009]

channel=channel.socket:172.18.3.39:8009

[uri:/*.jsp]

Worker=ajp13:172.18.3.39:8009

连接多台tomcat

Apache连接tomcat通过worker方式进行连接,如果要连接多台tomcat,只需要配置多个worker就可以了。

配置文件:workers2.properties

[shm]

file=${serverRoot}/logs/shm.file

size=1048576

# 一个worker

[channel.socket:172.18.3.39:8009]

info=Ajp13 forwarding over socket

keepalive=1

port=8009

host=172.18.3.39

[ajp13:172.18.3.39:8009]

channel=channel.socket:172.18.3.39:8009

#另一个worker

[channel.socket:172.18.3.30:8009]

info=Ajp13 forwarding over socket

keepalive=1

port=8009

host=172.18.3.30

[ajp13:172.18.3.30:8009]

channel=channel.socket:172.18.3.30:8009

配置好worker后,下面有多种方式将2个worker应用到系统中

方式1: 采用worker list的方式

[uri:/*.jsp]

Worker.list=ajp13:172.18.3.39:8009, ajp13:172.18.3.30:8009

方式2:采用lb的方式

[lb:balanced]

worker=ajp13:172.18.3.30:8009

worker=ajp13:172.18.3.39:8009

stickySession=1

[uri:/*.jsp]

group=balanced

通过上述2种方式,都可以将Apache连接到多台tomcat上。但是发现问题,应用是需要登陆的,通过上述的配置方式,发现每点击一次页面,apache会连接到不同的tomcat,这样造成了刚才的登陆实效。

连接绑定同一个tomcat – 如何使用stickySession

意思就是用户刚上来,访问的是哪个tomcat,以后他访问的请求都往这个tomcat上发,直到用户关闭了浏览器。

就是这个问题搞到凌晨3点半!上午到公司来又弄了半天。

查jk2的文档,说是设置lb的参数stickySession=1,这样apache会根据sessionid,将用户的请求发送到原来使用的那台tomcat上去的,又说了这个参数值缺省就是1。那么这个参数根本不需要进行配置的,但是现在发现每请求一次,apache都切换一次tomcat。

这个问题只能到网上去查,找了老半天,发现问这个问题的人还真的不少。问得人多没有人回答。耐着性子一个个点下去看。发现在有一篇文档中提到修改tomcat的配置,

在tomcat的配置文件server.xml中,将jvmRoute参数设置成和tomcatid一样,再联系一下看其他的关于Apache处理worker的做法,突然醒悟到应该和worker的id有关系。在配置worker的地方将这2个参数加进去: tomcatid, route

[channel.socket:172.18.3.39:8009]

info=Ajp13 forwarding over socket

debug=0

keepalive=1

port=8009

host=172.18.3.39

tomcatid=tomcat39

route=tomcat39

注:

l 此处的tomcatid, route 的值必须和 jvmRoute的值设置成一样 ---- 文档上这么写的,没有调试过写成不一样情况如何

l 连接配置成lb方式

然后再tomcat的配置文件server.xml中做上述修改:

另一worker、tomcat做同样处理,发现问题解决了,用户最初连接到哪个tomcat,以后的使用也就一直使用到这个tomcat,而且增加了tomcatid后,发现用户的sessionid也发生了变化: 原来的sessionid只是一串数字,但是增加了tomcatid后,发现tomcatid增加到sessionid后面去了:

6906B1F759C99DCF0FF3D56DBC564965.tomcat30
在session后面多了“.tomcat30”

而没有设置tomcatid的时候,sessionid就是前面一串字。从这里看出来,apache就是判断这串内容转发到不同的tomcat上去的。

将stickySession设置成0,发现Apache发送过来的Session每次分配一个,看来stickySession设置成功了(文档上根本没有提到stickySession和 tomcatid、route相关)

自动判断tomcat好坏

Apache缺省的时候,对于新用户采用round-rabin方式进行分配tomcat,Apache自己带有检测tomcat好坏的功能,如果一台tomcat关闭后,Apache会自动将后面所有的连接都转向到其他的tomcat上去。这时如果已经配置好的tomcat开起来后,Apache会不会自动监测到? Tomcat的文档上说能够做到的,在lb中配置一下recovery就可以了(前一天已经仔细的看过了tomcat的文档,写的太简单了,就是这样也看到2,3点钟)。

文档上说,recovery的缺省设置的时间是60second,在调试期间,将这个设置时间调的短一些,设置成10秒。

前台访问页面,通过log判断使用的是tomcat39,将正在使用的tomcat39关闭。再访问页面,发现自动切换到另一个tomcat上去了—tomcat30,不断地访问,请求会绑定这个tomcat。

将关闭的tomcat39重新开起来,用户访问的还是tomcat30,不会切换到tomcat39上去。将tomcat30关闭,访问又切换到tomcat39上来了,这个证明Apache已经判断到tomcat39恢复正常了。

附:

完整的workers2.properties:

[shm]

file=${serverRoot}/logs/shm.file

size=1048576

# worker 39

[channel.socket:172.18.3.39:8009]

info=Ajp13 forwarding over socket

debug=0

keepalive=1

port=8009

host=172.18.3.39

tomcatid=tomcat39

route=tomcat39

[ajp13:172.18.3.39:8009]

channel=channel.socket:172.18.3.39:8009

# worker 30

[channel.socket:172.18.3.30:8009]

info=Ajp13 forwarding over socket

debug=0

keepalive=1

port=8009

host=172.18.3.30

tomcatid=tomcat30

route=tomcat30

[ajp13:172.18.3.30:8009]

channel=channel.socket:172.18.3.30:8009

# load balance

[lb:balanced]

worker=ajp13:172.18.3.30:8009

worker=ajp13:172.18.3.39:8009

stickySession=1

recovery=10

[uri:/*.jsp]

group=balanced

在server.xml中的改动

jvmRoute="tomcat39">

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/23500957/viewspace-1307920/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2014-07-01

  • 博文量
    2
  • 访问量
    5216