apache与 tomcat 集群配置与session共享

1、配置tomcat
修改 Tomcat 实例需要使用的三个网络端口 conf/server.xml

第一个tomcat

<Server port="8105" shutdown="SHUTDOWN">
<Connector port="8180" protocol="HTTP/1.1"

connectionTimeout="20000" redirectPort="8443" />

<Connector port="8109" protocol="AJP/1.3" redirectPort="8443" />

通过修改 Engine 配置选项,配置集群中每个 Tomcat 实例的名称。

修改前内容如下:
<!-- You should set jvmRoute to support load-balancing via AJP ie : <Engine name = "Standalone" defaultHost = "localhost" jvmRoute = "jvm1"> <Engine name = "Catalina" defaultHost = "localhost"> -->

改成 <Engine name="Standalone" defaultHost="localhost" jvmRoute="s1">

去掉 <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>的注释

第二个tomcat

<Server port="8205" shutdown="SHUTDOWN">
<Connector port="8280" protocol="HTTP/1.1"

connectionTimeout="20000" redirectPort="8443" />

<Connector port="8209" protocol="AJP/1.3" redirectPort="8443" />

通过修改 Engine 配置选项,配置集群中每个 Tomcat 实例的名称。

修改前内容如下:
<!-- You should set jvmRoute to support load-balancing via AJP ie : <Engine name = "Standalone" defaultHost = "localhost" jvmRoute = "jvm1"> <Engine name = "Catalina" defaultHost = "localhost"> -->

改成 <Engine name="Standalone" defaultHost="localhost" jvmRoute="s2">

去掉 <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>的注释

2、配置apache
(1)进入apache的主目录,然后进入conf文件夹,用文本编辑器打开httpd.conf,在该文件末尾加上如下几行:

### 加载 mod_jk 模块
LoadModule jk_module modules/mod_jk-1.2.28-httpd-2.2.3.so

### 配置 mod_jk
JkWorkersFile conf/workers.properties #加载集群中的workers
JkMountFile conf/uriworkermap.properties #加载workers的请求处理分配文件
JkLogFile logs/mod_jk.log #指定jk的日志输出文件
JkLogLevel warn #指定日志级别

(2)不要改变目录,新建一个文件:workers.properties,该文件用来配置web容器的信息。该文件的内容如下:


# worker列表
worker.list=controller, status

#第一个server的配置,server名为s1
#ajp13 端口号,

worker.s1.port=8109
#tomcat的主机地址,如不为本机,请填写ip地址
worker.s1.host=localhost
worker.s1.type=ajp13
#server的加权比重,值越高,分得的请求越多
worker.s1.lbfactor=1

#第二个server的配置,server名为s2
worker.s2.port=8209
worker.s2.host=localhost
worker.s2.type=ajp13
worker.s2.lbfactor=1


#server名为controller,用于负载均衡
worker.controller.type=lb
worker.retries=3 #重试次数
#指定分担请求的server列表,用逗号分隔
worker.controller.balanced_workers=s1,s2
#设置用于负载均衡的server的session可否共享 有不少文章说设置为1是可以的,但是我是设置为0才可以的
worker.controller.sticky_session=0
#worker.controller.sticky_session_force=1

worker.status.type=status
(3)不要改变目录,新建一个文件:uriworkermap.properties,文件内容如下:
/*=controller #所有请求都由controller这个server处理
/jkstatus=status #所有包含jkstatus请求的都由status这个server处理

!/*.gif=controller #所有以.gif结尾的请求都不由controller这个server处理,以下几个都是一样的意思
!/*.jpg=controller
!/*.png=controller
!/*.css=controller
!/*.js=controller
!/*.htm=controller
!/*.html=controller

这里的"!”类似于java中的"!”,是“非”的意思。
这样,apache一块就配置好了。

3.配置项目的web.xml

在应用时候,工程的web.xml里面要加上这么一个属性,实现Session共享:
<web-app>

……
<distributable/>

</web-app>

文件中的“ <distributable/> ”项,是由于本案例将部署到集群中的多个服务器上。如果在配置文件中没 有此项,则应用在集群中不能实现分布式 Session 共享,也就是说当机后用户状态数据(存放在 Session 中的)无法无缝迁移到 Tomcat 集群中的其他服务器上。此项非常重要,请读者多加留心。

(四)运行
进入两个tomcat的bin目录,执行两个tomcat的startup.bat启动这两个 tomcat,然后将apache重新启动后,运行起来看看效果吧。如果不出意外,两个tomcat的窗口应该是你一次我一次的打印日志信息了,而且此时 session也是共享了的。到这里,集群搭建好了,负载均衡也实现了。

后记:

1.session需要共享的对象 一定要实现序列化的接口 不然在写入session的时候会出现 setAttribute: Non-serializable attribute 错误

2.一机启动多个tomcat的方法 需要提供CATALINA_HOME地址

即在catalina.sh和 startup.sh的第一行写上 CATALINA_HOME 地址

例如 CATALINA_HOME=/usr/local/tomcat1

CATALINA_HOME=/usr/local/tomcat2


3、集群情况下注意多个tomcat的server.xml配置文件的各种端口不能重复,主要有Server节点、Connector节点、tcpListernPort节点。

4、集群情况下一定要注意server.xml文件Host节点中将Cluster注释去掉,且要修改Receiver端口。

5、负载均衡并不一定需要集群(但需要session_stricky会话保持),除非你需要failover(失败转移)功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值