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图标,

如下图所示:

这里面可以停止和启动apache。

3、测试apache

打开浏览器,输入:http://localhost/

说明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端口号:

<!-- Define an AJP 1.3 Connector on port 8009 -->

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

5.2 与apache链接配置修改:

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

5.3 http端口号修改:

<Connector port="8080" protocol="HTTP/1.1"

connectionTimeout="20000"

redirectPort="8443" />

这个可以根据自己电脑端口号情况修改,只要端口号不冲突就行。

5.4 修改网站部署路径,默认是读取apache-tomcat-7.0.5\webapps\目录下的部署包,我们也可以自己指定目录。

<Host name="localhost"  appBase="D:\appserver\serverclass\sc01"

unpackWARs="true" autoDeploy="true">

好了,apache+tomcat的基本配置已经完成了。

6、测试

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

<%  
   System.out.println("this is tomcat server nod 1"); 
%> 
<% 
    out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>this is tomcat server nod 1"); 
%>

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

<%  
   System.out.println("this is tomcat server nod 2"); 
%> 
<% 
    out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>this is tomcat server nod 2"); 
%>

启动tomcat1、tomcat2

在浏览器中输入:http://localhost:80/test/test.jsp

按F5刷新

还没有采用session粘连

7、升级

7.1 session复制

7.1.1修改workers.propertie文件

worker.LB_worker.sticky_session=true,表示session粘连。

7.1.2修改项目的/WEB-INF/web.xml ,在<web-app>的末尾添加 <distributable/> 标记

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段,

<IfModule mpm_winnt_module>
    ThreadsPerChild      150
    MaxRequestsPerChild    0
</IfModule>

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

<IfModule mpm_winnt_module>
    ThreadsPerChild    350
    ThreadLimit     350
    MaxRequestsPerChild    10000

Win32DisableAcceptEx
EnableMMAP Off
EnableSendfile Off

</IfModule>

其中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就行)

Windows下apache+tomcat负载均衡的更多相关文章

  1. Apache+Tomcat负载均衡问题集锦

    之前在windows 环境下搭建了下apache+tomcat负载均衡(不会的能够參考之前的文档,文档对于linux和windows都适用),一帆风顺.没有出现不论什么问题.今天尝试着在linux下搭 ...

  2. 介绍一下再Apache下的Tomcat负载均衡的一些使用问题

    在负载均衡技术中,硬件设备是比较昂贵的,对于负载均衡的学习者如果不是在企业中应用或者是学员中学习,很少有机会能碰到实际操作的训练.(http://xz.8682222.com)所以,很多朋友都会选择软 ...

  3. Linux平台上搭建apache+tomcat负载均衡集群

    传统的Java Web项目是通过tomcat来运行和发布的.但在实际的企业应用环境中,采用单一的tomcat来维持项目的运行是不现实的.tomcat 处理能力低,效率低,承受并发小(1000左右).当 ...

  4. 1.Apache+Tomcat负载均衡+集群配置

    1.本文Apache+Tomcat集群配置 基于最新的Apache和Tomcat,具体是2011年4月20日最新的Tomcat和Apache集群和负载均衡配置. 准备环境 Apache Apache是 ...

  5. Linux下Nginx+Tomcat负载均衡和动静分离配置要点

    本文使用的Linux发行版:CentOS6.7 下载地址:https://wiki.centos.org/Download 一.安装Nginx 下载源:wget http://nginx.org/pa ...

  6. win 下 apache 实现负载均衡

    1.打开apache的配置文件httpd.conf,打开如下项 LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_ajp_mo ...

  7. linux下一个apache+tomcat负载均衡和集群

    先说一下我的环境 一个ubuntu虚拟机, 一个apache2.2示例 两tomcat1.7示例 1.安装apacheserver sudo apt-get install apache2 假设要重新 ...

  8. Windows下Nginx实现负载均衡

    Apache,Nginx Apache和Nginx都属于属于 静态页面服务器,都有插件支持动态编程语言处理,但Nginx的IO模比Apache更适合跑代理.所以一般都作为前端缓冲代理(Nginx的反向 ...

  9. Apache + Tomcat 负载均衡 session复制

    转自:http://blog.csdn.net/cssmhyl/article/details/8455400 http://snowolf.iteye.com/blog/743611 Apache  ...

随机推荐

  1. HDU 1210

    感觉就是乱搞找规律 自己写几组数据 本来开始是想着把 n 个数字每次回到原来位置各需要多少次,然后取它们的最小公倍数就好了 但是数据写着写着发现每一个数回到原来位置次数都是一样的,那么就简单了,直接第 ...

  2. 互斥的数(codevs 1553)

    题目描述 Description 有这样的一个集合,集合中的元素个数由给定的N决定,集合的元素为N个不同的正整数,一旦集合中的两个数x,y满足y = P*x,那么就认为x,y这两个数是互斥的,现在想知 ...

  3. 复习1背包dp

    背包问题是对于一个有限制的容器,一般计算可以装的物品的价值最值或数量.通常每个物品都有两个属性空间和价值,有时还有数量或别的限制条件,这个因体而异. 背包大概分成3部分,下面会细述这最经典的3种题型 ...

  4. JSOI建筑抢修 (贪心+堆)

    先按照T2从小到大排序,然后进行贪心. 第i个任务能完成的条件是,sigma(T1[j])+T1[i]<=T2[i] ( j 为之前所选的任务) 如果这个任务不能完成,若max(T1[j]) & ...

  5. MySQL: 打开binlog选项后无法重启MySQL

    binlog目录权限不足导致,用chown mysql:mysql <log folder>即可解决此问题.

  6. ubuntu 搭建 svn服务器,使用http方式访问

    原文: http://blog.csdn.net/wobuxingfang/article/details/70835414 参考:http://www.cnblogs.com/zzugyl/p/36 ...

  7. LeetCode OJ 322. Coin Change DP求解

    题目链接:https://leetcode.com/problems/coin-change/ 322. Coin Change My Submissions Question Total Accep ...

  8. LeetCode 811. Subdomain Visit Count (子域名访问计数)

    题目标签:HashMap 题目给了我们一组域名,让我们把每一个域名,包括它的子域名,计数. 遍历每一个域名,取得它的计数,然后把它的所有子域名和它自己,存入hashmap,域名作为key,计数作为va ...

  9. android 4.0主线程訪问网络问题

    在4.0下面,在主线程中訪问网络,假设请求超过6s的话,就会报ANR,那么这就会带来一个问题,假设网络慢或者请求的数据过大时,界面会卡顿,造成界面灵敏性非常差,因此网络请求一般不能放在主线程中操作,g ...

  10. Android Studio底边栏选项不见了,怎样调出来

    Android Studio底边有一个选项栏,包括了Run,Android等等非常多的选项,可是假设你一不小心不知道自己点到哪个地方了.底边选项栏不见了,怎样调出来.非常easy.例如以下图.地边栏不 ...