apache2.2 tomcat6 集群

论坛 期权论坛 脚本     
匿名技术用户   2021-1-2 09:36   11   0

使用apache做为控制转发器,后端使用4个tomcat做集群,此次选择的配置方式为SessionSticky(粘性Session),这种方式将同一用户的请求转发到特定的Tomcat服务器上,避免了集群中Session的复制。

apache以前配置apache和tomcat可能需要用到mod_jk.so进行apache和tomcat的链接。apache2.2中集成了mod_jk.so的功能,只需简单的把上面6个module的注释打开。

1、apache 配置

修改Apache配置文件\Apache2.2\conf\httpd.conf
a.将以下6个Module的注释去掉:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so


再找到<IfModule dir_module></IfModule>加上index.jsp

Xml代码
  1. <IfModule dir_module>
  2. DirectoryIndex index.html index.jsp
  3. </IfModule>


在文件的最下面加入

Xml代码
  1. ProxyRequests Off
  2. <proxy balancer://cluster>
  3. BalancerMember ajp://127.0.0.1:9001 loadfactor=1 route=jvm1
  4. BalancerMember ajp://127.0.0.1:9002 loadfactor=1 route=jvm2
  5. BalancerMember ajp://127.0.0.1:9003 loadfactor=1 route=jvm3
  6. BalancerMember ajp://127.0.0.1:9004 loadfactor=1 route=jvm4
  7. <proxy>

设置apache2.2虚拟主机
a.先在conf\httpd.conf中引入配置虚拟主机的控制文件,将配置文件中默认注释掉的配置信息放开就可以了:
# Virtual hosts
Include conf/extra/httpd-vhosts.conf
b.修改conf/extra/httpd-vhosts.conf文件,在最下面加入虚拟主机的配置信息

Xml代码
  1. <VirtualHost *:80>
  2. ServerAdmin callan@126.com
  3. ServerName localhost(域名)
  4. ServerAlias localhost(别名)
  5. ProxyPass / balancer://cluster/ stickysession=jsessionid nofailover=On
  6. ProxyPassReverse / balancer://cluster/
  7. </VirtualHost>

c.也可以直接在httpd.conf后面加入这段xml
2. 配置tomcat
a.配置tomcat的启动和关闭端口
若是在同一台机器上同时运行多个tomcat,则需要修改tomcat 的启动端口和关闭端口。
启动端口修改:将每个tomcat的server.xml文件作如下修改
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
改为
<Connector port="xxxx" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="xxxx" />
<Connector port="xxxx" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" />
如果需要用到tomcat的共享线程池,其端口值也设置为xxxx,保持一致(线程池缺省是被注释掉的):

<Connector executor="tomcatThreadPool"port="xxxx" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" />
b.设置tomcat的关闭端口:
将<Server port="8005" shutdown="SHUTDOWN">修改为
<Server port="xxxx" shutdown="SHUTDOWN">每个tomcat的端口xxxx不同就行。
c.配置engine
tomcat 默认的engine配置为:
<Engine name="Catalina" defaultHost="localhost">
为了通过AJP来支持负载均衡,需要配置engine的jvmRoute属性。将server.xml的默认engine配置注释掉,按给出的 jvmRoute示例做如下配置:
分别将4个tomcat配置为
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm2">
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm3">
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm4">

d.配置 AJP Connector
这里是apache和tomcat链接的关键,前台apache就是通过AJP协议与tomcat进行通信的,以完成负载均衡的作用。
将server.xml中的缺省配置
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
改成与
port的值与apache中的文件httpd.conf中<proxy balancer://cluster></proxy>之间配置的均衡器成员的端口一致,一一对应;上面在配置的jvmRoute的值(如jvm1)应该与httpd.conf中<proxy balancer://cluster></proxy>之间配置的均衡器成员的route属性的值一致,且必须唯一。
例如 tomcatA就改成9001
e.配置Cluster
打开tomcat的server.xml,默认的Cluster配置如下,缺省被注释掉了:
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
Xml代码
  1. <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="6">
  2. <Manager className="org.apache.catalina.ha.session.BackupManager"
  3. expireSessionsOnShutdown="false"
  4. notifyListenersOnReplication="true"
  5. mapSendOptions="6"/>
  6. <!--
  7. <Manager className="org.apache.catalina.ha.session.DeltaManager"
  8. expireSessionsOnShutdown="false"
  9. notifyListenersOnReplication="true"/>
  10. -->
  11. <Channel className="org.apache.catalina.tribes.group.GroupChannel">
  12. <Membership className="org.apache.catalina.tribes.membership.McastService"
  13. address="228.0.0.4"
  14. port="<span style="color: #ff0000;">45562</span>"
  15. frequency="500"
  16. dropTime="3000"/>
  17. <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
  18. address="auto"
  19. port="<span style="color: #ff0000;">5002</span>"
  20. selectorTimeout="100"
  21. maxThreads="6"/>
  22. <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
  23. <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
  24. </Sender>
  25. <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
  26. <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
  27. <Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>
  28. </Channel>
  29. <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
  30. filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>
  31. <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
  32. </Cluster>
每个tomcat的端口唯一
全部配置全成后,如果SessionSticky粘性session无效的话,将<proxy balancer://cluster>放到<VirtualHost *:80>
Xml代码
  1. <VirtualHost *:80>
  2. ServerAdmin callan@126.com
  3. ServerName localhost(域名)
  4. ProxyPass / balancer://cluster/ lbmethod=byrequests stickysession=JSESSIONID nofailover=Off timeout=5 maxattempts=3
  5. ProxyPassReverse / balancer://cluster/
  6. ErrorLog "logs/lbtest-error.log"
  7. CustomLog "logs/lbtest-access.log" common
  8. <proxy balancer://cluster>
  9. BalancerMember ajp://127.0.0.1:9001 route=jvm1
  10. BalancerMember ajp://127.0.0.1:9002 route=jvm2
  11. BalancerMember ajp://127.0.0.1:9003 route=jvm3
  12. </proxy>
  13. </VirtualHost>
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP