项目最开始的时候开发的单体项目,最终部署的时候需求是需要考虑集群部署,经过网上查阅资料 简化整理最终形成现在的操作说明,由于项目结束时间比较久以前是查阅资料自己简单整理了doc ,整理桌面的时候才想着记录一下.
一 文件准备
1.下载apache-server-httpd
下载地址 https://www.apachehaus.com/cgi-bin/download.plx
注意:电脑必须安装VC14/VC15 否则无法使用
2.下载tomcat 略
3.下载mod_jk.so 版本需要与apache-server 版本一致
下载地址 http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/
二 Httpd配置
上述文件准备完毕后开始配置httpd
常用httpd命令:
httpd.exe -k install 安装apache,采用默认服务名
httpd.exe -k uninstall 卸载
httpd.exe -k install -n "apache24" 可以指定安装的服务名
httpd.exe -k uninstall -n "Apache24" 卸载指定名称的apache服务
net start apache24 启动windows服务
net stop apache24 停止服务
关键词:ServerAdmin admin@example.com这是Apache管理员Email地址,改不改无所谓。
关键词:#ServerNamewww.example.com:80这是Apache的服务器地址,这个地方必须把前面的”#“去掉,把”www.example.com“改成”localhost“或127.0.0.1 或者当前IP。
配置 Listen 监听端口 Listen 8009 端口可自行修改
只要双击httpd.exe后,无法保持黑窗口状态,即秒关闭或停一会消失都是conf/httpd.conf配置有问题
解决办法:
① 则打开命令窗口 执行httpd -t 会检查conf/httpd.conf配置是否正确.根据返回结果检查相关的配置文件填写是否正确
② 检查版本是否与当前操作系统匹配,比如64位系统运行32位软件就会失败.
③ 请检查文件路径是否存在中文
④ 暂时没有碰到其他问题 , 如果有请百度.
三 mod_jk.so配置
将下载好的mod_jk.so放到{apache_home}/modules /下
修改httpd.conf,在其末尾追加下面一句话
include conf/mod_jk.conf
四配置mod_jk.conf
http.conf 同目录下,创建 mod_jk.conf 文件,内容如下:
#以下为tomcat集成配置部分
LoadModule jk_module modules/mod_jk.so
#指定 workers.properties文件路径,红色部分是接下来要在与http.conf文件同目录的文件名
JkWorkersFile conf/workers.properties
# Where to put jk logs
JkLogFile 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 +ForwardURICompat -ForwardDirectories
# JkRequestLogFormat set the request format
JkRequestLogFormat "%w %V %T"
#指定那些请求交给tomcat处理,"controller "为在workers.propertise里指定的负载分配控制器_JkMount /* controller
#这里应该注意一下.红色部分地址要放入发布项目所需要的资源文件.like some photos and js and css...等.项目结构必须一样.
DocumentRoot "D:/Apache24/htdocs "
JkMount /*.jsp controller
JkMount /*.do controller
JkMount /servlet/* controller
#关掉主机Lookup,如果为on,很影响性能,可以有10多秒钟的延迟。
HostnameLookups Off
五 配置workers.properties
http.conf 同目录下,创建workers.properties文件 ,内容如下:
#server
worker.list = controller
#========tomcat1========
worker.tomcat1.port=3001
worker.tomcat1.host=192.168.1.110
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor = 1
#========tomcat2========
worker.tomcat2.port=3002
worker.tomcat2.host=192.168.1.110
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor = 1
#========controller,负载均衡控制器========
worker.controller.type=lb
worker.controller.balanced_workers=tomcat1,tomcat2
worker.controller.sticky_session=false
worker.controller.sticky_session_force=1
#worker.controller.sticky_session=1
六配置tomcat
<Connector port="3001" protocol="AJP/1.3" redirectPort="8443"/>
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
此处需要新增 jvmRoute =”tomcat1”
重点注意此处port端口与jvmRoute要跟workers.properties中保持一致否则无法启动
除此之外 其余端口正常配置就行.多个tomcat的时候 端口不可重复,另外如果在不同服务器需要注意相关地方的ip地址
七 项目中web.xml配置
<web-app>标签下增加<distributable/>标签,添加在<display-name>下面
八 测试
自己创建两个简单的web项目在各自index.jsp页面写一些文字 根据七 中的要求配置好之后 放入各自tomcat中
启动访问 http:// 192.168.1.110:8009/jiqun/index.jsp
刷新后sessionid会不停变化.下面进行session共享配置
九.session共享
Apache httpd Session共享中有复制 粘性session和复制session两种 具体区别百度
在各自tomcat conf/server.xml中 找到
<!--<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/> -->
替换为
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="6">
<Manager className="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
<Membership className="org.apache.catalina.tribes.membership.McastService"
address="228.0.0.4"
port="45564"
frequency="500"
dropTime="3000"/>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto"
port="4000"
autoBind="100"
selectorTimeout="5000"
maxThreads="6"/>
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
</Sender>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
<!-- <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/> -->
</Channel>
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
filter=""/>
<!-- <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/> -->
<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/>
<!--<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/> -->
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>
注意 4000端口 如果部署在同一个服务器上 两个tomcat中端口需要修改一下
重启tomcat 进行测试 刷新后sessionid不变 但是能看到实际的项目在变化