设为首页 收藏本站
查看: 403|回复: 0

[经验分享] Apache2+Tomcat+mod_jk实现负载均衡

[复制链接]

尚未签到

发表于 2017-1-29 07:07:47 | 显示全部楼层 |阅读模式
Apache(Web Server)负责处理HTML静态内容;

Tomcat(App Server)负责处理动态内容;

其原理如下:

Apache装有一个模块,这个模块叫mod_jk
Apache通过80端口负责解析任何静态web内容
任何不能解析的内容,用表达式告诉mod_jk,让mod_jk派发给相关的app server去解释。

1、环境
Apache  : apache_2.2.17-win32-x86-no_ssl.msi (下载http://httpd.apache.org/download.cgi)
Tomcat :  tomcat6.0.20。建议 下载 http://tomcat.apache.org/download-60.cgi
mod_jk: mod_jk-1.2.31-httpd-2.2.3.so 下载 http://tomcat.apache.org/download-connectors.cgi

2.将下载好的mod_jk-1.2.31-httpd-2.2.3.so放入到${APACHE_HOME}/modules 下

3.装完后,在Apache2.2启动的前提下,打开一个ie输入http://localhost,你将会得到这样的一个页面,就说明你的Apache的安装是成功的。

4.修改${APACHE_HOME}/conf 下的httpd.conf文件

a.修改服务器ip地址 ServerName 10.78.69.87:80

b. 修改apache服务器部署的项目地址 DocumentRoot "F:/apacheserver"

c. 修改访问页面的权限,避免出现403错误
<Directory />
    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
    allow from all</Directory>


LoadModule jk_module modules/mod_jk-1.2.31-httpd-2.2.3.so

JKWorkersFile conf/workers.properties

JkLogFile logs/mod_jk.log

<VirtualHost *>   
ServerAdmin localhost
   
DocumentRoot F:/apacheserver
   
ServerName localhost
   
DirectoryIndex index.html index.jsp index.action
   
ErrorLog logs/error_log.txt

CustomLog logs/shsc-access_log.txt common

# Set the jk log level [debug/error/info]     
JkLogLevel info
  
# Set the jk log level [debug/error/info]   
JkLogLevel info

# JkRequestLogFormat   
JkRequestLogFormat "%w %V %T"

JkMount /* tom_control_1   
#静态文件都例外,交给apache来处理   
JkUnMount /*.gif tom_control_1   
JkUnMount /*.jpg tom_control_1   
JkUnMount /*.png tom_control_1   
JkUnMount /*.css tom_control_1   
JkUnMount /*.js tom_control_1   
JkUnMount /*.htm tom_control_1   
JkUnMount /*.html tom_control_1   
JkUnMount /*.xml tom_control_1   
JkUnMount /*.db tom_control_1   
JkUnMount /*.ico tom_control_1   
JkUnMount /*.bmp tom_control_1   
JkUnMount /*.swf tom_control_1   
JkUnMount /*.doc tom_control_1   
JkUnMount /*.ppt tom_control_1   
JkUnMount /*.xls tom_control_1   
JkUnMount /*.docx tom_control_1   
JkUnMount /*.pptx tom_control_1   
JkUnMount /*.xlsx tom_control_1   
#php不交给tomcat1处理   
JkUnMount /*.php tom_control_1   
#jsp不交给tomcat1   
JkUnMount /*.jsp tom_control_1  
  
#tom_control_2只负责jsp的处理   
JkMount /*.jsp tom_control_2  
</VirtualHost>


5.在${APACHE_HOME}/conf目录下新建workers.properties属性文件,添加内容如下:
worker.list=tom_control_1, tom_control_2
#tomcat1实例配置,这里要和tomcat配置文件的service.xml的jvmRoute保持一致
worker.tomcat1.type=ajp13
worker.tomcat1.host=localhost  
worker.tomcat1.port=8009   
worker.tomcat1.lbfactor=1  

worker.tomcat2.port=8010  
worker.tomcat2.host=localhost   
worker.tomcat2.type=ajp13   
worker.tomcat2.lbfactor=1

#========tom_control_1负载均衡控制器========   
worker.tom_control_1.type=lb   
worker.tom_control_1.balanced_workers=tomcat1   
worker.tom_control_1.sticky_session_force=1  
#worker.tom_control_1.sticky_session=1   
  
#========tom_control_2负载均衡控制器========   
worker.tom_control_2.type=lb   
worker.tom_control_2.balanced_workers=tomcat2   
worker.tom_control_2.sticky_session_force=1  
#worker.tom_control_2.sticky_session=1
6.修改tomcat1中的server.xml文件,将8009注释的去掉,并添加jvmRoute属性

<!-- Define an AJP 1.3 Connector on port 8009 -->
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

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

同理修改tomcat2

<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />

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


7.将发布的web工程拷贝到apache服务器发布的路径,删除WEB-INF文件夹的文件。

8.重启tomact1和tomcat2和apache服务器,通过http://localhost/项目名即可.

如果是在本机需要修改tomcat的端口。


很多人在配置tomcat+apcahe集群时总会需要session不能复制的问题,其解决办法如下:

1.在你的应用程序的WEB-INF\web.xml文件的最后面要加入<distributable/>
加入该属性可以使该工程中的session可以被tomcat的集群节点进行轮循复制。


2.在配置conf\server.xml文件时要加入<Cluster>配置项,
<Cluster>配置项还有一个<Manager>子项
在<Manager>中可以设置一个"notifySessionListenersOnReplication"属性,
这个"notifySessionListenersOnReplication"属性默认是true
不能把它设为false.
eg:
<Manager className="org.apache.catalina.ha.session.BackupManager"
                    expireSessionsOnShutdown="false"  
                    notifyListenersOnReplication="true"  
                    mapSendOptions="6"/>  

3.需要配置Channel,Membership 节点信息
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
   
             <Membership className="org.apache.catalina.tribes.membership.McastService"
                         bind="127.0.0.1"  
                         address="228.0.0.4"  
                         port="45564"  
                         frequency="500"  
                         dropTime="3000"/>  

             <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                       address="auto"  
                       port="4002"  
                       selectorTimeout="100"  
                       maxThreads="6"/>  

             <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
               <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender" timeout="60000"/>  
             </Sender>  
             <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
             <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
             <Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>

           </Channel>  

              <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"  
                  filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>
              <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
  </Cluster>

注意:此处有一个Receiver port=”xxxx”,两个tomcat中此处的端口号必须唯一,即tomcat中我们使用的是port=4001,那么我们在tomcat2中将使用port=4002。

有关Tomcat集群、Session复制的东西都在
org.apache.catalina.tribes、org.apache.catalina.ha这两个包中.

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-334668-1-1.html 上篇帖子: JAVA ssl 配置(tomcat https设置) 下篇帖子: tomcat架构分析(connector BIO 实现)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表