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

[经验分享] Windows下apache+tomcat负载均衡

[复制链接]

尚未签到

发表于 2015-7-31 08:35:53 | 显示全部楼层 |阅读模式
Windows下apache+tomcat负载均衡
网上已经有很多的资料,但是很多都比较零碎,需要整合一起才能搭建出理想的负载均衡,正好前段时间搭建了windows与linux下的负载均衡,在此记录,供以后参考。这篇讲解windows下 apache+tomcat的负载均衡。
1、搭建前准备
   Apache:httpd-2.2.15-win32-x86-no_ssl.msi
   Mod_jk:mod_jk-1.2.30-httpd-2.2.3.so
   Tomcat:apache-tomcat-7.0.5
2、选择一个目录安装apache
   安装成功之后,右键点击apache图标,
DSC0000.jpg
如下图所示:
    DSC0001.jpg
这里面可以停止和启动apache。
3、测试apache
打开浏览器,输入:http://localhost/
DSC0002.jpg
说明apache安装成功,网上也有说会出现It Works!但是我安装的这个版本没出现过。
4、配置apache
  4.1在apache的安装目录\Apache2.2\conf下,新建workers.properties,与 uriworkermap.properties文件。
Workers.properties:
# worker 列表   
worker.list=LB_worker,jkstatus   
# 第一个worker的配置,名为worker_1   
#tomcat 的主机地址,如不为本机,请填写ip地址   
worker.worker_1.host=localhost
#ajp13  端口号,对应tomcat配置文件server.xml中Connector port="8009",默认8009   
worker.worker_1.port=8009   
worker.worker_1.type=ajp13   
# 负载的权重值,越高表示负载越大   
worker.worker_1.lbfactor=3
worker.worker_1.socket_keepalive=1
worker.worker_1.socket_timeout=0
worker.worker_1.retries=1
# 第二个worker的配置,名为worker_2   
worker.worker_2.host=localhost
#ajp13  端口号,对应tomcat配置文件server.xml中Connector port="8090"   
worker.worker_2.port=8090  
worker.worker_2.type=ajp13   
worker.worker_2.lbfactor=1
worker.worker_2.socket_keepalive=1
worker.worker_2.socket_timeout=0
worker.worker_2.retries=1

#LB_worker, 用于负载均衡分发的控制器   
worker.LB_worker.type=lb   
# 重试次数   
worker.LB_worker.retries=1   
# 指定负载的worker列表,用逗号分隔   
worker.LB_worker.balance_workers=worker_1,worker_2
# 配置session会话是否为粘性   
# 这样负载均衡器lb就会尽量保持一个session,也就是使用户在一次会话中跟同一个Tomcat进行交互   
worker.LB_worker.sticky_session=false
# 如果sticky_session设为true时,此处一般设为false
worker.LB_worker.sticky_session_force=false
# 设置运行状态的控制器
worker.jkstatus.type=status


Uriworkermap.properties:
# 所有请求都由LB_worker 这个worker处理   
/*=LB_worker   
# 所有包含jkstatus请求的都由名称叫jkstatus的这个worker处理   
/jkstatus=jkstatus
上面两个配置文件表示本机配置要配置两个服务节点worker_1与worker_2,这两个节点需要与tomcat的配置文件关联。
4.2 将mod_jk-1.2.30-httpd-2.2.3.so文件拷贝到\Apache2.2\modules目录下
4.3 \Apache2.2\conf\extra目录下新增mod_jk.conf
mod_jk.conf :
#load module mod_jk-1.2.31-httpd-2.2.3.so is for Apache 2.2.x.   
LoadModule jk_module modules/mod_jk-1.2.30-httpd-2.2.3.so   
# 配置 mod_jk conf   
# 加载集群中的workers   
JkWorkersFile conf/workers.properties   
# 加载workers的请求处理分配文件            
JkMountFile conf/uriworkermap.properties   
# 指定jk的日志输出文件   
JkLogFile logs/mod_jk.log   
# 指定日志级别   
JkLogLevel info
4.4 在\Apache2.2\conf\httpd.conf文件末尾加上:
   #module mod_jk config file  
   Include conf/extra/mod_jk.conf
4.5修改\Apache2.2\conf\httpd.conf
  将ServerName前#去掉,改为ServerName localhost:80
Httpd.conf中有个 Listen 80,apache端口号这两个需要一致,如果修改端口号,这两个都要修改。
到此,apache的基础配置完毕。

5、配置tomcat
   Apache中我们配置了两个服务节点,所以tomcat服务器也需要两台,记作:tomcat1、tomcat2。
5.1 修改tomcat1配置文件server.xml
Ajp端口号:
   

5.2 与apache链接配置修改:
  
5.3 http端口号修改:
  
这个可以根据自己电脑端口号情况修改,只要端口号不冲突就行。
5.4 修改网站部署路径,默认是读取apache-tomcat-7.0.5\webapps\目录下的部署包,我们也可以自己指定目录。
  
好了,apache+tomcat的基本配置已经完成了。
6、测试
在tomcat1部署目录下新增一个test项目,里面包含一个Jsp页面,内容为:
  

在tomcat2部署目录下新增一个test项目,里面包含一个Jsp页面,内容为:
  

启动tomcat1、tomcat2
在浏览器中输入:http://localhost:80/test/test.jsp
DSC0003.jpg
按F5刷新
DSC0004.jpg
还没有采用session粘连
7、升级
7.1 session复制
  7.1.1修改workers.propertie文件
       worker.LB_worker.sticky_session=true,表示session粘连。
  7.1.2修改项目的/WEB-INF/web.xml ,在的末尾添加  标记
session复制后,F5刷新页面,大部分情况下都会保持请求同一台服务器。
7.2 apache优化
有时候项目在运行的时候会出现很卡的情况,查询apache的启动日记可以看到,apache默认的线程数是:Child 300: Starting 64 worker threads.
可以根据需要扩展线程数量。
7.2.1、Apache线程数和超时设置 (该段内容摘自网上,确实有效果)

    Apache的线程数控制文件为conf/exrtra/http-mpm.conf,需要在httpd.conf中将 Include conf/extra/httpd-mpm.conf前#去掉,以使得http-mpm.conf生效。
   在Windows系统中,起作用的是Winnt mpm段,

    ThreadsPerChild      150
    MaxRequestsPerChild    0

     缺省的配置一般够用,但负荷大的网站就要修改了,否则网站一下就变慢或没有响应了。实际可以根据apache-status查看apache实时连接状态,我的服务器最后设置如下:

    ThreadsPerChild    350
    ThreadLimit     350
    MaxRequestsPerChild    10000
Win32DisableAcceptEx
EnableMMAP Off
EnableSendfile Off

    其中ThreadLimit是占用系统线程数限制,最好加上,否则会产生内存溢出导致Apache当掉。
    MaxRequestsPerChild我理解是请求的缓存数,太小了影响性能,占用cpu时间,太大了占用内存资源,想象一下你网站的文件个数,然后自己设定,只要不为0就可以,防止内存溢出。
    ThreadsPerChlid是apache的线程数,就是开了这么多的线程来等待响应客户端请求,需要根据apache-status实时的监控调节,大了会占用过多内存,小了会导致连接不上。而且应该同时修改httpd-default.php超时设置来配合。
    在httpd.conf中去掉Include conf/extra/httpd-default.conf前的#以使httpd-default.php生效。
其中调节以下参数
Timeout 15 (连接超时缺省为300,太大了,缩小会减少同时连接数,即上面占用的实际线程数)
KeepAlive On (开启可以提高性能,因为一个页面一般会有多个请求)
MaxKeepAliveRequests 50 (这个数目自己根据网页内容调节)
KeepAliveTimeout 5 (这个小于Timeout就行)

运维网声明 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-92478-1-1.html 上篇帖子: Apache与tomcat详解 下篇帖子: [转]深入Android通过Apache HTTP访问HTTP资源
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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