apache2.4.x+tomcat集群+windows server12
下载apache2.4.x
下载地址:http://httpd.apache.org/download.cgi
下载步骤:
① 点击红色箭头,如图所示
② 如图
③ 因为apache现在只提供源码,编译之后的由第三方提供,选第一个
④ 我们先给windows server 12安装vc++ 12组件
地址:http://www.microsoft.com/en-us/download/details.aspx?id=30679 点击download下载。
从“我的电脑”->"程序"中查看。
在apache下载页面,(此时应当注意:下载2012运行库编译的apache软件)
上面这些不是我们想要的版本,我们下载的版本如下图所示(红框圈住),点击”箭头“处下载
⑤ 解压zip压缩包到你想要的目录下,修改conf/httpd.conf
添加环境变量:
修改Path,在";"后添加%APACHE_HOME%\bin;
启动cmd窗口,输入httpd.exe -help,我们可以查看命令:
我们使用箭头命令安装:
httpd.exe -k install
如下图所示,表示安装成功(最好不要加 “-n apache”,不然以后输入什么命令都得加上这个参数了):
启动服务:
httpd.exe -k start
查看成果:
浏览器输入,http://localhost
⑥ apache整合tomcat
从tomcat官网去下载整合插件,地址:https://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/windows/
如图所示,下载 windows-64位-httpd版本的mod_jk.so,放到apache目录下modules/中
新建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 |
#路径根据实际情况填写 worker.list=controller,tomcat1,tomcat2 #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 |
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名字改了
修改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"> --> |
tomcat2修改:
修改启动框的名字,tomcat2的bin目录下,修改catalina.bat第300行,把title名字改了
修改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"> --> |
<%@ 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> |
<%@ 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中。
下面着一段是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". |