热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

apache+tomcat环境下的负载均衡设置

使用apache和tomcat配置一个可以应用的web网站,要达到以下要求:1、Apache做为HttpServer,后面连接多个tomcat应用实例,并进行负载均衡。2、为系统设定Session超时时间,包括Apache和tomcat3、为系统屏蔽文件列表,包括Apache和tomc

使用 apache 和 tomcat 配置一个可以应用的 web 网站,要达到以下要求:

1、 Apache 做为 HttpServer ,后面连接多个 tomcat 应用实例,并进行负载均衡

2、 为系统设定 Session 超时时间,包括 Apache 和 tomcat

3、 为系统屏蔽文件列表,包括 Apache 和 tomcat


2.1. 下载,解压 tomcat

不要下载安装版 , 下载地址

http://tomcat.apache.org


2.2. 配置 tomcat 2.2.1.     配置 server 的关闭口

我们需要在一台机器上跑 2 个不同的 tomcat ,需要修改不同的 tomcat 的关闭口,避免出现端口被占用的情况。在 server.xml 中找到 server, 将:

改为

XXXX 在这里表示不同的端口:我的两个 tomcat 分别使用 8035 , 8045

注意:这里之所以要配置不同的 tomcat 关闭口,只是因为我们使用了多个 tomcat ,其实用一个 server 多个实例也可以。


2.2.2.     配置 service

我们需要对不同的 tomcat 的 service 取不同的名字,在 server.xml 中找到:

改为:

两个 service 分别为 tomcat6 和 tomcat5


2.2.3.     配置 Connector

这个部分主要是要改两个 Connector ,当然前提是你的 tomcat 只有两个 Connector 。

修改 ajp1.3 的端口:

找到:

改为:

两个 Service 的 ajp/1.3 的端口分别为: 8019 , 8029

修改 http 的端口:

找到:

maxThreads="150" cOnnectionTimeout="20000"

redirectPort="8443" />

改为:

maxThreads="150" cOnnectionTimeout="20000"

redirectPort="8443" />

两个 Service 的 ajp/1.3 的端口分别为: 8060 , 8070


2.2.4.     配置 Engine

Engine 主要是配置 jvmRoute 属性,找到:

改为:

两个实例分别为: tomcat6 和 tomcat5.


2.2.5.     配置公用性 Context

如果有 Context 是多个系统公用的,比如图片等的存放地,可以做个配置:

在 Host 中增加:


2.2.6.     屏蔽文件列表

打开 tomcat 目录下的 conf/web.xml ,

找到:

        default

        org.apache.catalina.servlets.DefaultServlet

       

debug

0

       

       

listings

true

       

        1

   

将 listings 参数改为 false;


2.3. 配置应用 (web.xml)

对系统应用做些控制。

配置 session 过期时间,大多数网站用户都只是做些浏览性的操作,为了减轻服务器负载压力,我们将 session 超时时间从默认的 30 分钟变为 5 分钟。

在 web 应用程序的 web.xml 中 servlet-mapping 之后增加如下一段:

    5


3.1. 下载、安装 Apache

下载地址 http://httpd.apache.org/download.cgi

下载后点击安装 msi 文件。

安装的时候没有什么特别需要注意的地方,按照默认就行了。是否安装为 service 看具体情况而定。


3.2. 下载、安装 Apache 、 tomcat 的 Connector

http://tomcat.apache.org/download-connectors.cgi

注意,很多网站上都介绍是 JK2 ,可能是觉得 JK2 比 JK 要新吧,其实 JK2 已经停止研发了,建议使用 jk1.2 。

下载压缩包,之后将 module 目录中的 mod_jk-apache****.so 文件放入 /module/ 目录下。


3.3. 配置 Apache ( httpd.conf ) 3.3.1.     配置端口:

找到

Listen 80

改为

Listen **

当然如果不需要改的话,就不用改了。正常情况无须更改。


3.3.2.     配置 DocumentRoot

找到 DocumentRoot 段,将其改为:

DocumentRoot "E:/MyWebsite"

这里的 "E:/MyWebsite" 指的是你的 web 程序的根路径,视具体应用而定。


3.3.3.     配置 serverName

找到 serverName 这个段,将其配置为你的 ServerName

如果没有配置为域名,配为 IP 也可以,此处还不是很清楚,多虚拟主机的情况的配置。


3.3.4.     配置虚拟主机

    ServerAdmin flyffa@gmail.com

    DocumentRoot       E:/MyWebsite

    ServerName localhost

    DirectoryIndex index.html index.htm index.jsp

    ErrorLog logs/error_log

    CustomLog logs/access_log common

    ErrorDocument 404 /sys/logon.jsp


3.4. 配置 JK 方式的负载均衡 3.4.1.     配置 module

我们需要与 tomcat 做连接,所以要把 tomcat 的 connector 的模块配置进去。

在 LoadModule 部分加入:

LoadModule jk_module modules/mod_jk-apache-2.0.55.so -加载模块

这个 so 是我下载的版本,个人可以根据自己下载的文件名加以配置

JkWorkersFile conf/workers.properties -指定 connector 的配置文件名称

JkLogFile logs/mod_jk.log -指定 connector 的日志文件名称

JkLogLevel info -指定 connector 的日志等级


3.4.2.     配置 worker 列表 (conf/workers.properties)

定义列表

worker.list=tomcat6,tomcat5,loadbalancer

定义一个名为 “loadbalancer” 的 worker

其作为对多个 Tomcat 进程的负载平衡使用:

worker.loadbalancer.type=lb

worker.loadbalancer.balanced_workers=tomcat5, tomcat6

( 负载平衡类型的 worker 并不与 Tomcat worker 通讯,它负责管理这些 Tomcat worker 。 )

定义多个 worker 列表

# Set properties for tomcat6 (ajp13)

worker.tomcat6.type=ajp13

worker.tomcat6.host=localhost

worker.tomcat6.port=8019

worker.tomcat6.lbfactor=50

worker.tomcat6.cachesize=10

worker.tomcat6.cache_timeout=600

worker.tomcat6.socket_keepalive=1

worker.tomcat6.reclycle_timeout=300

# Set properties for tomcat5 (ajp13)

worker.tomcat5.type=ajp13

worker.tomcat5.host=localhost

worker.tomcat5.port=8029

worker.tomcat5.lbfactor=50

worker.tomcat5.cachesize=10

worker.tomcat5.cache_timeout=600

worker.tomcat5.socket_keepalive=1

worker.tomcat5.reclycle_timeout=300

注意: lbfactor= 50 ( 当此 Tomcat worker 被用于一个负载平衡 worker 使用时,此属性将被使用。它定义了此 worker 的负载平衡权值。 )

cachesize= 10 ( 当在多线程的 web server (例如 apache2.0 、 IIS 、 Netscape )中使用 JK 时,此属性是有效的。如果将 cachesize 的值设置为较高的值,这些支持多线程的 web server 将获得很好的处理能力。如果此属性不被设置,则连接 cache 特性将失效。 )


3.4.3.     配置 Apache 到 tomcat 的桥接

在 DocumnetRoot 片段下加入

JkMount /*.jsp tomcat6

JkMount /*.do tomcat6

JkMount /*Servlet tomcat6

这里只是简单的将 apache 的请求转到其中的一个 tomcat 中,形成桥接,至于负载均衡的时候,就无须进行这步操作,直接启动负载均衡。启动负载均衡见下一节。


3.4.4.     启动负载均衡

在 DocumnetRoot 片段下加入

JkMount /*.jsp loadbalancer

JkMount /*.do loadbalancer

JkMount /*Servlet loadbalancer

-指定对所有的请求启动负载均衡,这里的 loadbalancer 是定义的 worker 的名字

这里我在配置的时候犯了两个错误:

第一是没有配置 JkWorkersFile conf/workers.properties ,以为 Apache 会自动认识(其实 apache 是自动产生了一个叫做 ajp13 的 worker ,指向本机的 8009 端口)。

第二是以为 JkMount 语句中出现 loadbalancer,ajp13 之类的是系统设定的东西,其实都是在 workers.properties 文件中定义的,结果出现名字不匹配的情况。后来配置了 JkLogFile logs/mod_jk.log 之后看到错误日志才明白。


3.5. 配置 Proxy 方式的负载均衡

使用 Apache2.1 以上的版本,就可以用 mod_proxy_ajp 来完成负载均衡的配置,不过到目前为止,没有看到如何让 Apache 负责静态部分, tomcat 负责动态部分的配置方式,只能用 path 进行区分分发请求。如:在虚拟主机的配置中增加:

ProxyPass / ajp://localhost:8019/

ProxyPassReverse / ajp://localhost:8019/

而形如:

ProxyPass /*.jsp ajp://localhost:8019/

ProxyPassReverse /*.jsp ajp://localhost:8019/

这样的配置是不能通过的。


推荐阅读
  • ServletContext接口在Java Web开发中扮演着重要角色,它提供了一种方式来获取关于整个Web应用程序的信息。通过ServletContext,开发者可以访问初始化参数、共享数据以及应用资源。 ... [详细]
  • Java EE CDI:解决依赖关系冲突的实例
    在本教程中,我们将探讨如何在Java EE的CDI(上下文和依赖注入)框架中有效解决依赖关系的冲突问题。通过学习如何使用限定符,您将能够为应用程序的不同客户端提供多种接口实现,并确保每个客户端都能正确调用其所需的实现。 ... [详细]
  • 在Linux系统上构建Web服务器的详细步骤
    本文详细介绍了如何在Linux系统上搭建Web服务器的过程,包括安装Apache、PHP和MySQL等关键组件,以及遇到的一些常见问题及其解决方案。 ... [详细]
  • docker镜像重启_docker怎么启动镜像dock ... [详细]
  • 使用LVS与ldirectord实现高可用负载均衡
    本文介绍了如何通过LVS(Linux Virtual Server)结合ldirectord工具来实现服务器的健康检查及负载均衡功能。环境设置包括一个LVS节点和两个真实服务器节点,通过配置ldirectord进行健康状态监测,确保系统的高可用性。 ... [详细]
  • 深入解析ESFramework中的AgileTcp组件
    本文详细介绍了ESFramework框架中AgileTcp组件的设计与实现。AgileTcp是ESFramework提供的ITcp接口的高效实现,旨在优化TCP通信的性能和结构清晰度。 ... [详细]
  • 本文将详细介绍通过CAS(Central Authentication Service)实现单点登录的原理和步骤。CAS由耶鲁大学开发,旨在为多应用系统提供统一的身份认证服务。文中不仅涵盖了CAS的基本架构,还提供了具体的配置实例,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 近期我们开发了一款包含天气预报功能的万年历应用,为了满足这一需求,团队花费数日时间精心打造并测试了一个稳定可靠的天气API接口,现正式对外开放。 ... [详细]
  • Google排名优化-面向Google(Search Engine Friendly)的URL设计 ... [详细]
  • 深入解析:OpenShift Origin环境下的Kubernetes Spark Operator
    本文探讨了如何在OpenShift Origin平台上利用Kubernetes Spark Operator来管理和部署Apache Spark集群与应用。作为Radanalytics.io项目的一部分,这一开源工具为大数据处理提供了强大的支持。 ... [详细]
  • 深入解析BookKeeper的设计与应用场景
    本文介绍了由Yahoo在2009年开发并于2011年开源的BookKeeper技术。BookKeeper是一种高效且可靠的日志流存储解决方案,广泛应用于需要高性能和强数据持久性的场景。 ... [详细]
  • 本文详细介绍了如何正确安装Java EE SDK,并解决在安装过程中可能遇到的问题,特别是关于servlet代码在Apache Tomcat 10中无法运行的情况。 ... [详细]
  • 本文将详细介绍如何在ThinkPHP6框架中实现多数据库的部署,包括读写分离的策略,以及如何通过负载均衡和MySQL同步技术优化数据库性能。 ... [详细]
  • 深入分析十大PHP开发框架
    随着PHP技术的发展,各类开发框架层出不穷,成为了开发者们热议的话题。本文将详细介绍并对比十款主流的PHP开发框架,旨在帮助开发者根据自身需求选择最合适的工具。 ... [详细]
  • 性能测试工具的选择与应用
    本文探讨了性能测试工具的重要性及其在软件测试中的作用,重点介绍了选择合适性能测试工具的考量因素,并对几种常用的性能测试工具进行了对比分析。 ... [详细]
author-avatar
teemitop
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有