apache2.4.x+tomcat集群+windows server12

下载apache2.4.x

下载地址:http://httpd.apache.org/download.cgi

下载步骤:

① 点击红色箭头,如图所示

apache2.4.x+tomcat集群+windows server12

② 如图

apache2.4.x+tomcat集群+windows server12

③ 因为apache现在只提供源码,编译之后的由第三方提供,选第一个

apache2.4.x+tomcat集群+windows server12

④ 我们先给windows server 12安装vc++ 12组件

地址:http://www.microsoft.com/en-us/download/details.aspx?id=30679 点击download下载。
从“我的电脑”->"程序"中查看。

apache2.4.x+tomcat集群+windows server12

在apache下载页面,(此时应当注意:下载2012运行库编译的apache软件)

apache2.4.x+tomcat集群+windows server12

上面这些不是我们想要的版本,我们下载的版本如下图所示(红框圈住),点击”箭头“处下载
apache2.4.x+tomcat集群+windows server12

⑤ 解压zip压缩包到你想要的目录下,修改conf/httpd.conf
apache2.4.x+tomcat集群+windows server12

apache2.4.x+tomcat集群+windows server12

添加环境变量:
apache2.4.x+tomcat集群+windows server12

修改Path,在";"后添加%APACHE_HOME%\bin;

apache2.4.x+tomcat集群+windows server12
启动cmd窗口,输入httpd.exe -help,我们可以查看命令:
apache2.4.x+tomcat集群+windows server12
我们使用箭头命令安装:
httpd.exe -k install
如下图所示,表示安装成功(最好不要加 “-n apache”,不然以后输入什么命令都得加上这个参数了):
apache2.4.x+tomcat集群+windows server12
启动服务:
httpd.exe -k start
apache2.4.x+tomcat集群+windows server12

查看成果:
浏览器输入,http://localhost

apache2.4.x+tomcat集群+windows server12

⑥ apache整合tomcat

从tomcat官网去下载整合插件,地址:https://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/windows/
如图所示,下载 windows-64位-httpd版本的mod_jk.so,放到apache目录下modules/中
apache2.4.x+tomcat集群+windows server12

新建mod_jk.conf,内容如下:

LoadModule jk_module modules/mod_jk.so

#JkWorkersFile 路径根据实际情况填写
JkWorkersFile C:\Users\Administrator\Desktop\java\Apache24\conf\workers.properties
# Where to put jk logs
JkLogFile C:\Users\Administrator\Desktop\java\Apache24\logs\mod_jk.log
# Set the jk log level [debug/error/info]
JkLogLevel info
# Select the log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
# JkOptions indicate to send SSL KEY SIZE,
JkOptions +ForwardKeySize +ForwardURICompatUnparsed -ForwardDirectories
# JkRequestLogFormat set the request format
JkRequestLogFormat "%w %V %T"
#根据实际情况自己定义即可,就是将什么样的请求转发给名为“controller”的逻辑worker处理
JkMount /* controller
#JkMount /servlet/* worker1
#JkMount /*.do worker1
#JkMount /*.action worker1
#JkMount /*.class worker1
#JkMount /*.jar worker1
新建workers.properties文件
#路径根据实际情况填写

worker.list=controller,tomcat1,tomcat2
#lb表示controller类型为负载均衡

worker.controller.type=lb
#controller下属有两个worker
worker.controller.balanced_workers=tomcat1,tomcat2
#固定session
worker.controller.sticky_session=1

workers.java_home=C:\Program Files\Java\jdk1.7.0_79\jre

# Set properties for worker1 下面的都可以不用修改,感兴趣可以搜索相关含义
#通讯协议
worker.tomcat1.type=ajp13
worker.tomcat1.host=localhost
worker.tomcat1.port=8009
worker.tomcat1.lbfactor=1
#worker.worker1.cachesize=10 
#worker.worker1.cache_timeout=600 
#worker.worker1.socket_keepalive=1 
#worker.worker1.socket_timeout=300

worker.tomcat2.type=ajp13
worker.tomcat2.host=localhost
worker.tomcat2.port=8019
worker.tomcat2.lbfactor=1
httpd.conf 文件最后添加:
Include C:\Users\Administrator\Desktop\java\Apache24\conf\mod_jk.conf

ProxyRequests Off
ProxyPass / balancer://chinatrial-cluster/ stickysession=JSESSIONID nofailover=Off 
ProxyPassReverse / http://127.0.0.1:8080
ProxyPassReverse / http://127.0.0.1:8090
<Proxy balancer://chinatrial-cluster> 
   BalancerMember  http://127.0.0.1:8080  max=800 loadfactor=10 route=tomcat1
   BalancerMember  http://127.0.0.1:8090  max=800 loadfactor=10 route=tomcat2
</Proxy>

参数解释:

ProxyPass :将远程服务器映射到本地服务器的URL空间
balancer:// :代理的指令类型
stickysession : 均衡器粘连会话名称。该值常常会被设置为类似JSESSIONID或者 PHPSESSIONID之类的值,他依赖于支持会话的后端应用服务器。如 果后端服务器使用不同的cookie名称或者URL编码的ID(像servlet 容器),使用|来分开他们。第一个部分针对cookie,第二个针对路径。
nofailover : 如果设为‘On’,当工作单元被禁用或者出错时,会话则立即中断。可以将 该值设为On如果后端服务器不支持会话复制(Session replication)。
ProxyRequests : 在使用ProxyPass指令的时候,ProxyRequests指令通常都应该是关闭 的。
loadfactor : 工作单元负载系数。用于BalancerMember。它是一个1到100之间的数 字,用于定义应用于该工作单元的正规化权重负载。
route : 工作单元的路由,用于负载均衡器中。该路由是附加给会话ID的一个值。
smax : 根据需要最多创建数量为柔性最大值(Soft Maximum),也就是smax的链接。 任何超出smax数量的链接都会指定一个生存时间也就是ttl。

httpd.conf放开以下 *.so 插件,自行搜索,把前面的#去掉

##放开

LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so

 

##放开代理

LoadModule proxy_module modules/mod_proxy.so

LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

LoadModule proxy_balancer_module modules/mod_proxy_balancer.so

LoadModule proxy_connect_module modules/mod_proxy_connect.so

LoadModule proxy_express_module modules/mod_proxy_express.so

#LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

LoadModule proxy_ftp_module modules/mod_proxy_ftp.so

LoadModule proxy_html_module modules/mod_proxy_html.so

LoadModule proxy_http_module modules/mod_proxy_http.so

#LoadModule proxy_http2_module modules/mod_proxy_http2.so

#LoadModule proxy_scgi_module modules/mod_proxy_scgi.so

#LoadModule proxy_uwsgi_module modules/mod_proxy_uwsgi.so

#LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so

 

##放开

LoadModule slotmem_shm_module modules/mod_slotmem_shm.so

 

##放开

LoadModule xml2enc_module modules/mod_xml2enc.so

⑦ tomcat安装配置

tomcat解压即可,保证系统安装了jdk。我们解压两个tomcat分别叫tomcat1,tomcat2

tomcat1修改:

修改启动框的名字,tomcat1的bin目录下,修改catalina.bat第300行,把title名字改了
apache2.4.x+tomcat集群+windows server12

修改server.xml,第167行,添加jvmRoute参数,修改service Name。

  ①:

<Service name="tomcat1"> 

 ②:

   <!-- You should set jvmRoute to support load-balancing via AJP ie :

    <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">

    -->
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1" >

tomcat2修改:

修改启动框的名字,tomcat2的bin目录下,修改catalina.bat第300行,把title名字改了
apache2.4.x+tomcat集群+windows server12

修改server.xml,第167行,添加jvmRoute参数,修改service Name。注意由于一台机器上启动2个tomcat,我们还要把tomcat2中server.xml各个端口号 + 10(加几都可以,保证没有被占用),当你扩展第三台tomcat的时候,依照规律递增即可。

  ①:

<Service name="tomcat2"> 

 ②:

   <!-- You should set jvmRoute to support load-balancing via AJP ie :

    <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">

    -->
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2" >

在tomcat1的Root/ 文件夹下,新建session.jsp来测试
<%@ page contentType="text/html;charset=UTF-8" %>  
<%@ page import="java.util.*"%>  
<html>  
    <head>  
        <title>ApacheTomcatTest</title>  
    </head>  
    <body>  
        <%  
            out.println("<br> SESSION ID:" + session.getId() + "</br>");  
            out.println("这是tomcat1,8080");  
        %>  
    </body>  
</html> 
在tomcat2的Root/ 文件夹下,新建session.jsp来测试
<%@ page contentType="text/html;charset=UTF-8" %>  
<%@ page import="java.util.*"%>  
<html>  
    <head>  
        <title>ApacheTomcatTest</title>  
    </head>  
    <body>  
        <%  
            out.println("<br> SESSION ID:" + session.getId() + "</br>");  
            out.println("这是tomcat2,8090");  
        %>  
    </body>  
</html> 

从浏览器访问,输入地址“http://yourIp/session.jsp”,发现请求转发到了其中一个tomcat,并且刷新的话,请求还是会落到tomcat2这个tomcat中。

apache2.4.x+tomcat集群+windows server12

下面着一段是apache官网的解释:

Session stickyness is not implemented using a tracking table for sessions. Instead each Tomcat instance gets an individual name and adds its name at the end of the session id. When the load balancer sees a session id, it finds the name of the Tomcat instance and sends the request via the correct member worker. For this to work you must set the name of the Tomcat instances as the value of the jvmRoute attribute in the Engine element of each Tomcat's server.xml. The name of the Tomcat needs to be equal to the name of the corresponding load balancer member. In the above example, Tomcat on host "myhost1" needs jvmRoute="worker1", Tomcat on host "myhost2" needs jvmRoute="worker2".

简单的说就是,保证每次请求都到一个确定的tomcat中,比如第一次请求到tomcat2,第二次请求还是会到tomcat2中。apache做到着一点没有靠一个tracking table(追踪表),而是修改了sessionId,sessionId由id和jvmRoute的值拼接而成。当你第二次请求的时候,根据你sessionId中的值(如上图)->"tomcat2",这个请求还是会转发到tomcat2这个tomcat.