Windows下apache+tomcat负载均衡
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负载均衡的更多相关文章
- Apache+Tomcat负载均衡问题集锦
之前在windows 环境下搭建了下apache+tomcat负载均衡(不会的能够參考之前的文档,文档对于linux和windows都适用),一帆风顺.没有出现不论什么问题.今天尝试着在linux下搭 ...
- 介绍一下再Apache下的Tomcat负载均衡的一些使用问题
在负载均衡技术中,硬件设备是比较昂贵的,对于负载均衡的学习者如果不是在企业中应用或者是学员中学习,很少有机会能碰到实际操作的训练.(http://xz.8682222.com)所以,很多朋友都会选择软 ...
- Linux平台上搭建apache+tomcat负载均衡集群
传统的Java Web项目是通过tomcat来运行和发布的.但在实际的企业应用环境中,采用单一的tomcat来维持项目的运行是不现实的.tomcat 处理能力低,效率低,承受并发小(1000左右).当 ...
- 1.Apache+Tomcat负载均衡+集群配置
1.本文Apache+Tomcat集群配置 基于最新的Apache和Tomcat,具体是2011年4月20日最新的Tomcat和Apache集群和负载均衡配置. 准备环境 Apache Apache是 ...
- Linux下Nginx+Tomcat负载均衡和动静分离配置要点
本文使用的Linux发行版:CentOS6.7 下载地址:https://wiki.centos.org/Download 一.安装Nginx 下载源:wget http://nginx.org/pa ...
- win 下 apache 实现负载均衡
1.打开apache的配置文件httpd.conf,打开如下项 LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_ajp_mo ...
- linux下一个apache+tomcat负载均衡和集群
先说一下我的环境 一个ubuntu虚拟机, 一个apache2.2示例 两tomcat1.7示例 1.安装apacheserver sudo apt-get install apache2 假设要重新 ...
- Windows下Nginx实现负载均衡
Apache,Nginx Apache和Nginx都属于属于 静态页面服务器,都有插件支持动态编程语言处理,但Nginx的IO模比Apache更适合跑代理.所以一般都作为前端缓冲代理(Nginx的反向 ...
- Apache + Tomcat 负载均衡 session复制
转自:http://blog.csdn.net/cssmhyl/article/details/8455400 http://snowolf.iteye.com/blog/743611 Apache ...
随机推荐
- Mozilla新特性只支持https网站
Mozilla的官方博客2015.4.30正式宣布了淘汰HTTP的方案. 其中包括:设定一个日期,所有的新特性将只提供给HTTPS网站:HTTP网站将逐步被禁止访问浏览器功能,尤其是那些与用户安全和隐 ...
- JavaSE 学习笔记之集合框架(十八)
集合框架:,用于存储数据的容器. 特点: 1:对象封装数据,对象多了也需要存储.集合用于存储对象. 2:对象的个数确定可以使用数组,但是不确定怎么办?可以用集合.因为集合是可变长度的. 集合和数组的区 ...
- ansible playbooks loop循环
在一个task中循环某个操作 1.标准循环 - name: add several users user: name: "{{ item }}" state: present gr ...
- NOIP2014 提高组合集
NOIP 2014 提高组 合集 D1 T1 生活大爆炸版石头剪刀布 首先,先将两个人的猜拳序列都变得不小于n.然后逐个模拟.胜败什么的看表就行了. #include <iostream> ...
- java并发操作
项目中常用的java并发操作 一.java8新特性java并发流操作(结合纳姆达表达式) List<String> list = new ArrayList<>(); list ...
- 安全简单解决MVC 提示 检测到有潜在危险的 Request.Form 值.
一般使用富文本编辑器的时候.提交的表单中包含HTML字符,就会出现此错误提示. 使用 ValidateInput(false) 特性标签并不能解决此问题. 网上前篇一律的回答是修改Web.Config ...
- Mac: 通过蓝牙用安卓手机向Mac发送文件
1. 打开Mac蓝牙和手机蓝牙 2. 配对 3. mac 系统偏好设置>共享 勾蓝牙共享,选接受并存储 4. 手机发送文件
- 浅谈API网关(API Gateway)如何承载API经济生态链
序言 API经济生态链已经在全球范围覆盖, 绝大多数企业都已经走在数字化转型的道路上,API成为企业连接业务的核心载体, 并产生巨大的盈利空间.快速增长的API规模以及调用量,使得企业IT在架构上.模 ...
- Tcl学习之--命名空间
Tcl解释器将全部的命令和全局变量分组管理.这些小组称为命名空间,一个命名空间中的命令和变量不会影响到还有一个命名空间.这些命名空间呈树形组织.一个命名空间的命令能够被还有一个命名空间引入.命名空间树 ...
- 【bzoj1028】[JSOI2007]麻将
首先枚举等待牌,再枚举对子牌. 然后1~n扫一遍,如果现在 s[i]不能被3整除,那么必须跟后两个数搭配几下变成能被3整除的.然后如果能被3整除,那么只要三个连续的一组可行,则三个相同的一组必定也 ...