题记:写这篇博客要主是加深自己对请求下载的认识和总结实现算法时的一些验经和训教,如果有错误请指出,万分感谢。

    近来对集群产生了兴趣,盘算从零开始一步一步深入进去,以此篇文章为出发点开始摸索。

    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、  集群架构原理图

    请求下载Apache+Tomcat集群之环境搭建_服务器

    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同步机制停止分析。

文章结束给大家分享下程序员的一些笑话语录: 小沈阳版程序员~~~ \n程序员其实可痛苦的了......需求一做一改,一个月就过去了;嚎~ \n需求再一改一调,一季度就过去了;嚎~ \n程序员最痛苦的事儿是啥,知道不?就是,程序没做完,需求又改了; \n程序员最最痛苦的事儿是啥,知道不? 就是,系统好不容易做完了,方案全改了; \n程序员最最最痛苦的事儿是啥,知道不? 就是,系统做完了,狗日的客户跑了; \n程序员最最最最最痛苦的事儿是啥,知道不? 就是,狗日的客户又回来了,程序给删没了!