Apache+Tomcat集群之环境搭建

最近对集群产生了兴趣,打算从零开始一步一步深入进去,以此篇文章为起点开始探索。

1、 为什么需要集群?

a) 实现负载均衡

b) 实现灾备、故障恢复

2、 需要的知识点

a) 反向代理实现负载均衡,参考链接如下:
http://yahoon.blog.51cto.com/13184/162922/

b) 黏性Session和非黏性Session
黏性Session此模式下同一会话中的请求都被派送到同一个tomcat实例上,这样我们就无须在多台服务器之间实现session共享了,这是其好处,不好的地方就是不能实现 failureover了,一但用户访问的机器挂掉,那么其session就会丢失。

非黏性Session又名复制Session,此模式下同一会话中的请求可以被分配到不同的tomcat实例上进行处理,此时就需要在不同服务器之间同步、复制session,这样一来即使一台服务器挂掉了,请求在其它服务器上照样可以访问到session信息,其缺点在于Session复制需要系统资源和网络开销。

3、集群架构原理图


4、 Apache集成Tomcat并进行集群配置,步骤如下:

a)         下载、安装Apache服务器(本实验所用版本为2.2.14),下载地址:
http://httpd.apache.org/download.cgi#apache22

b)         下载zip版的Tomcat(因为实验时需要在一台机器上部署多个Tomcat节点,所以不要下载安装版,本实验所用版本为7.0.37)下载地址:
http://tomcat.apache.org/download-70.cgi

c)         Apache集成Tomcat有三种方式,分别是JKhttp_proxyajp_proxy,相关参考链接如下:
http://www.codesky.net/article/201106/148884.html
http://www.blogjava.net/pengo/archive/2011/04/15/348331.html
此实验中采用第一种方式,步骤如下:
<1> 下载JKJK是一款 Apache/IIS用来连接后台Tomcat的模块,支持集群和负载均衡,下载时需注意JKApache对应版本需保持一致,下载地址:
    http://tomcat.apache.org/download-connectors.cgi
<2>
将下载的mod_jk.so放到Apachemodules文件夹内,并在conf/httpd.conf配置文件中增加如下配置:
#加载mod_jk模块
LoadModule jk_module modules/mod_jk.so

#指定workers.properties文件的路径
JkWorkersFile conf/workers.properties
#指定mod_jk的日志文件的路径
JkLogFile logs/mod_jk.log
#指定mod_jk的日志级别
JkLogLevel debug
#记录Tomcat Worker名称、网址和每个请求的时间
JkRequestLogFormat “%w %U %T”
#指定哪些请求交给Tomcat处理,loadbalancer为在workers.properties中配置的分发器名
JkMount  /*.do loadbalancer
JkMount  /*.jsp loadbalancer
<3>
conf目录下新建workers.properties文件,其内容如下:
#server列表
worker.list = loadbalancer

#========tomcat1========

#ajp13端口号
worker.tomcat1.port=11009
#tomcat的主机地址
worker.tomcat1.host=localhost
#
连结tomcat所用的协议类型
worker.tomcat1.type=ajp13
#负载平衡因数(只有启动了负载平衡才有用)
,值越高,分得的请求越多
worker.tomcat1.lbfactor = 1

#========tomcat2========

worker.tomcat2.port=12009

worker.tomcat2.host=localhost

worker.tomcat2.type=ajp13

worker.tomcat2.lbfactor = 1

#========tomcat3========

worker.tomcat3.port=13009

worker.tomcat3.host=192.168.0.80

worker.tomcat3.type=ajp13

worker.tomcat3.lbfactor = 1

#========tomcat4========

worker.tomcat4.port=14009

worker.tomcat4.host=192.168.0.80

worker.tomcat4.type=ajp13

worker.tomcat4.lbfactor = 1

#========controller,负载均衡控制器========
#
指定控制器类型
worker. loadbalancer.type=lb
#
指定参与负载均衡的tomcat名称列表
worker. loadbalancer.balanced_workers=tomcat1,tomcat2,tomcat3,tomcat4
#sticky_session
:指明session是否是黏性的。其默认值为1(true),表示使用黏性session,即一个会话中的请求始终由一个tomcat进行处理;为0时表示使用非黏性session,即同一会话中的请求可由不同的tomcat处理,各tomcat之间需同步Session
worker. loadbalancer.sticky_session=0
# sticky_session_force
:指明session的黏性是否是绝对的、强制的。其默认值为0(false),表示非强制,当集群中某台服务器多次请求没响应时,则将请求转发到其它tomcat处理;为1时表示强制,即使某台服务器宕机也不会将请求转发到其它服务器。
worker. loadbalancer.sticky_session_force=0
--------------------------------------------------------------------------------------------------------------------
注:当sticky_sessionsticky_session_force组合时特性下篇文章有叙述
<4> 4Tomcat进行配置(server.xml),以tomcat1为例,其它同理:
    4.1修改Server Port(非必需,只有当一台机器上需部署多个tomcat是才需要修改以达到端口互斥)
         <Server port="11005" shutdown="SHUTDOWN">
    4.2
修改类型为http1.1的Connector的端口(或者直接将该Connector的配置注释掉,该步骤也是非必需的,其原因和4.1一样)
    <Connector port="11080" protocol="HTTP/1.1"

           connectionTimeout="20000"

           redirectPort="8443" />
    4.3 配置Ajp13的
Port
       <Connector port="11009" protocol="AJP/1.3" redirectPort="8443" />

    4.4 配置JvmRoute,其值必须和workers.properties中的对应名称保持一致
       <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">

    4.5 配置Cluster(将原有Cluster的注释放开即可)

          <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>                 

说明:4.44.5这两步即使省略掉,对下面<5>的测试结果也毫无影响,因为mod_jk最主要的作用是分发请求和负载均衡,它不关心Tomcat之间怎样集群、Session怎样同步,如果只是用mod_jk将一台apache和一台tomcat整合起来,显然4.44.5没必要配置。

<5> 进行测试
                  
在四个tomcatwebapps目录下建立balancing文件夹,在该文件夹下创建
    test1.jsp,内容如下:

         <% out.println(“hello world”) ; %>

<% System.out.println("==========="); %>

启动apache,然后启动四个tomcat,在浏览器中输入http://localhost/balancing/test1.jsp,回车后,界面回显hello world,测试成功。

连续快速刷新该页面,会发现在四个tomcat的控制台上都会输出“==========”,此处表明服务器已经实现了负载均衡。

总结:本篇到此结束,下篇对Tomcat的集群机制和Session同步机制进行分析。

你可能感兴趣的:(Apache+Tomcat集群之环境搭建)