web应用构架LAMT及tomcat负载简析

简介:

Httpd    (mod_jk.so)

workers.properties文件

uriworkermap.properties文件

 

<--AJP1.3-->

 

Tomcat  --> jdk

大致流程:apache服务器通过mod_jk.so 模块处理jsp文件的动态请求。通过tomcat worker等待执行servlet/JSP的tomcat实例。使用 AJP1.3协议与tomcat通信。tomcat有借助jdk解析。

负载就是 多台tomcat。共同解析apache发送的jsp请求,实现高可用。

1.安装apache
    版本:(http://httpd.apache.org/download.cgi 下载地址。最新的是http-2.3.32)
    apache软件在1.3版本之前以apache开头。2.x版本后以httpd开头
        # cat /etc/redhat-release 
        CentOS release 6.5 (Final)
        # uname -r
        2.6.32-431.el6.x86_64
        cd httpd-2.2.29
./configure \
--prefix=/usr/local/apache2 \
--enable-modules=most \
--enable-mods-shared=all \
--enable-so \
参数解析:
    --enable-mods-shared=all
    是加载全部动态库  去掉shared 是加载静态库动态加载的好处。性能比静态的效率高5%。
    静态编译:
    如果编译的时候没有使用enable-mods-shared=module或者enable-module=shared 这2个参数就是静态编译,何谓静态?  
    其实就是编译的时候所有的模块自己编译进 httpd 这个文件中(启动的时候这些模块就已经加载进来了,也就是可以使用)
    动态编译:
    编译的时候,使用enable-module=shared 或者enable-modules-shared=module 来动态编译。那么什么是动态?静态是直接编译进httpd中, 那么动态显然就不编译进去了,也就是你启动的时候根本不会加载这个模块, 而是给你一个module.so 文件,你一定要使用 loadmodule 这个语法来加载,这个模块才有效。
    --enable-so 
    让 Apache 可以支持DSO模式,告诉编译器将所有标准模块都动态编译为DSO模块。
    DSO究竟是什么?事实上DSO是Dynamic SharedObjects(动态共享目标)的缩写,它是现代Unix派生出来的操作系统都存在着的一种动态连接机制。
    它提供了一种在运行时将特殊格式的代码,在程序运行需要时,将需要的部分从外存调入内存执行的方法
     make && make install
2.安装jdk (安装在另一台主机上 地址192.168.1.141)
    jdk 是解析tomcat的容器( tomcat是java编写的)
    cd /usr/local
    tar xf jdk-7u79-linux-x64.tar.gz
3.安装tomcat (安装在另一台主机上 地址192.168.1.141)
   软件下载地址: http://tomcat.apache.org/download-80.cgi (版本从6-9)
   由于这个包是二进制包。只需要修改完放入 指定目录即可。
   tar xf apache-tomcat-8.0.32.tar.gz 
   \mv apache-tomcat-8.0.32 /usr/local/tomcat8
    配置环境变量(为了让tomcat可以找到(调用)jdk。)
    cd /usr/local/tomcat8
    vim ./bin/catalina.sh
    export JAVA_HOME=/usr/local/jdk1.7.0_79
    这样的好处是:每次tomcat启动的时候加载jdk。(减少对系统环境的影响)
    进入配置文件修改端口;
    vim conf/server.xml
     <!-- Define an AJP 1.3 Connector on port 8009 -->
    <Connector port="8109" protocol="AJP/1.3" redirectPort="8443" />
    这里默认是8009.修改为8109  保存退出。
    准备测试:
    下载jsp探针文件到webapps/ROOT 目录下
    启动tomcat:
        # ./bin/startup.sh 
        Using CATALINA_BASE:   /usr/local/tomcat8
        Using CATALINA_HOME:   /usr/local/tomcat8
        Using CATALINA_TMPDIR: /usr/local/tomcat8/temp
        Using JRE_HOME:        /usr/local/jdk1.7.0_79
        Using CLASSPATH:       /usr/local/tomcat8/bin/bootstrap.jar:/usr/local/tomcat8/bin/tomcat-juli.jar
        Tomcat started.
    现在就可以访问jsp程序了通过浏览器:
    http://192.168.1.141:8080/jspenv.jsp
    (这里jspenv.jsp 是下载的jsp探针文件类似于phpinfo)
    关闭tomcat:(这样速度快)
        # killall -9 java 
4.安装JK 模块(安装在apache上面)
    一般httpd连接tomcat的模块有 mod_jk2.so ,mod_jk.so , proxy_ajg.so
    这里使用 mod_jk.so 而mod_jk2.so(社区停止开发维护)proxy_ajg.so(过滤静态文件功能不佳)
    下载网址http://apache.fayea.com/tomcat/tomcat-connectors
    # yum install libtool autoconf -y (需要这2个软件包的支持)
    (mod_jk.so这个模块是httpd和tomcat连接用的)
    # tar xf tomcat-connectors-1.2.41-src
    # cd tomcat-connectors-1.2.41-src/native/
    检查权限:# ll buildconf.sh 
    -rwxr-xr-x. 1 root bin 1277 Dec 30  2014 buildconf.sh
    buildconf.sh(检查所需支持后会生成编译安装的配置文件。)
    # ./buildconf.sh
    # ./configure --with-apxs=/usr/local/apache2/bin/apxs
    # make && make install
    安装完成后会出现提示:chmod 755 /usr/local/apache2/modules/mod_jk.so
    检查文件是否存在。如果没有。可以拷贝到apache下面。
    安装完成后: tomcat-connectors-1.2.41-src]# ls native/apache-2.0/
    native/apache-2.0/ 目录下会出现 mod_jk.so  模块。(如果apache下没有可以拷贝这个注意权限755)、
    加载JK模块  vim conf/httpd.conf
    #添加JK模块加载
        LoadModule jk_module modules/mod_jk.so
5.创建tomcat workers (在apache上面)
    Tomcat worker是一个服务于web server、等待执行servlet/JSP的Tomcat实例,简单来说就是:指定tomcat的地址,指明那个tomcat去解析的。(特别是负载的时候,有多个tomcat一起要工作的。)创建tomcat workers需要增加3个配置文件,
    分别是Tomcat workers配置文件workers.properties,URL过滤规则文件uriworkermap.properties和JK模块日志输出文件mod_jk.log,mod_jk.log文件会在apache启动时自动创建,这里只需创建前两个文件即可。
    (1) 创建workers
     # vim /usr/local/apache2/conf/workers.properties
    worker.tomcat1.port=8109         #ajp13 端口号,在tomcat 下server.xml 配置, 默认8109
    worker.tomcat1.host=192.168.1.141 #tomcat 的主机地址,如不为本机,请填写ip 地址
    worker.tomcat1.type=ajp13       #定义apache与tomcat的通信协议
    worker.tomcat1.lbfactor = 1   #server 的加权比重,值越高,分得的请求越多
    (2)URL过滤规则文件uriworkermap.properties (在apache上面执行)
        #vi  /usr/local/apache2/conf/uriworkermap.properties
        /*=tomcat1
        !/*.jpg=tomcat1
        !/*.gif=tomcat1
        !/*.png=tomcat1
        !/*.bmp=tomcat1
        !/*.html=tomcat1
        !/*.htm=tomcat1
        !/*.swf=tomcat1
        !/*.css= tomcat1
        !/*.js= tomcat1
    然后在httpd.conf 主配置文件中加载workers.properties和uriworkermap.properties这两个文件并指明相关日志。
    apache下增加:
    JkWorkersFile /usr/local/apache2/conf/workers.properties
    JkMountFile   /usr/local/apache2/conf/uriworkermap.properties
    JkLogFile /usr/local/apache2/logs/mod_jk.log
    JkLogLevel info
    JkLogStampformat "[%a %b %d %H:%M:%S %Y]"
测试:确保本机的apache服务和 141上的tomcat启动。
    输入不存在的网址。看最后的错误信息。可以简单判断是否tomcat工作。
    tomcat的解析默认错误如下:
    HTTP Status 404 - /inex.jsp
    。。。。
    Apache Tomcat/8.0.32
    apache的错误如下:
    Not Found
    The requested URL /inex was not found on this server.
下面简单修改下内容:作tomcat的负载
    环境简析: 192.168.1.199  httpd  tomcat
                192.168.1.141  tomcat
    由于192.168.1.199上面没有tomcat:
    所以 可以直接把141 上的jdk和tomcat打包拷贝过来。为了方便查看将tomcat改名为tomcat81
    192.168.1.141上的操作:
    tar zcvf jdk1.7.0_79.tar.gz jdk1.7.0_79/
    scp jdk1.7.0_79.tar.gz root@192.168.1.199:/usr/local/
    tar zcvf tomcat81.tar.gz tomcat8/
    scp tomcat81.tar.gz root@192.168.1.199:/usr/local/
    192.168.1.199上的操作。
    cd /usr/local/
    tar xf tomcat81.tar.gz
    tar xf jdk1.7.0_79.tar.gz
    \mv tomcat8 tomcat81
进入199下面修改http服务
    workers.properties文件

worker.list = controller,tomcat1,tomcat2  #server 列表
#========tomcat1========
worker.tomcat1.port=8109         #ajp13 端口号,在tomcat 下server.xml 配置, 默认8109
worker.tomcat1.host=192.168.1.141  #tomcat 的主机地址,如不为本机,请填写ip 地址
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor = 1   #server 的加权比重,值越高,分得的请求越多
#========tomcat2========
worker.tomcat2.port=8109       #ajp13 端口号,在tomcat 下server.xml 配置, 默认8009
worker.tomcat2.host=localhost  #tomcat 的主机地址,如不为本机,请填写ip 地址
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor = 1   #server 的加权比重,值越高,分得的请求越多

#========controller, 负载均衡控制器========
worker.controller.type=lb
worker.controller.balanced_workers=tomcat1,tomcat2   # 指定分担请求的tomcat
worker.controller.sticky_session=1

uriworkermap.properties文件
/*.jsp=controller
#特别注意这里需要修改这里。第一次没有负载。值查询tomcat1 这里做了负载。所以请求要发给
负载均衡器。

最后利用探针文件,查看:用户目录在这2个目录下切换代表成功。
 用户目录    /usr/local/tomcat81
  用户目录   /usr/local/tomcat8










本文转自 swallow_zys  51CTO博客,原文链接:http://blog.51cto.com/12042068/1896102,如需转载请自行联系原作者
目录
相关文章
|
16天前
|
前端开发 JavaScript 关系型数据库
从前端到后端:构建现代化Web应用的技术探索
在当今互联网时代,Web应用的开发已成为了各行各业不可或缺的一部分。从前端到后端,这篇文章将带你深入探索如何构建现代化的Web应用。我们将介绍多种技术,包括前端开发、后端开发以及各种编程语言(如Java、Python、C、PHP、Go)和数据库,帮助你了解如何利用这些技术构建出高效、安全和可扩展的Web应用。
|
1月前
|
监控 Serverless 测试技术
Serverless 应用引擎常见问题之做的web服务计费如何解决
Serverless 应用引擎(Serverless Application Engine, SAE)是一种完全托管的应用平台,它允许开发者无需管理服务器即可构建和部署应用。以下是Serverless 应用引擎使用过程中的一些常见问题及其答案的汇总:
407 3
|
1月前
|
前端开发 数据库 UED
构建高性能Web应用的关键技术
本文将介绍构建高性能Web应用的关键技术,包括前端优化、后端优化、数据库优化等方面。通过深入讨论各项技术的原理和实践方法,帮助开发者们提升Web应用的响应速度和用户体验。
|
9天前
|
缓存 负载均衡 数据库
优化后端性能:提升Web应用响应速度的关键策略
在当今数字化时代,Web应用的性能对于用户体验至关重要。本文探讨了如何通过优化后端架构和技术手段,提升Web应用的响应速度。从数据库优化、缓存机制到异步处理等多个方面进行了深入分析,并提出了一系列实用的优化策略,以帮助开发者更好地应对日益增长的用户访问量和复杂的业务需求。
12 1
|
9天前
|
缓存 监控 数据库
Flask性能优化:打造高性能Web应用
【4月更文挑战第16天】本文介绍了提升Flask应用性能的七大策略:优化代码逻辑,减少数据库查询,使用WSGI服务器(如Gunicorn、uWSGI),启用缓存(如Flask-Caching),优化数据库操作,采用异步处理与并发(如Celery、Sanic),以及持续监控与调优。通过这些手段,开发者能有效优化Flask应用,适应大型或高并发场景,打造高性能的Web服务。
|
9天前
|
Web App开发 Java 应用服务中间件
【Java Web】在 IDEA 中部署 Tomcat
【Java Web】在 IDEA 中部署 Tomcat
|
10天前
|
数据库 开发者 Python
Python中使用Flask构建简单Web应用的例子
【4月更文挑战第15天】Flask是一个轻量级的Python Web框架,它允许开发者快速搭建Web应用,同时保持代码的简洁和清晰。下面,我们将通过一个简单的例子来展示如何在Python中使用Flask创建一个基本的Web应用。
|
14天前
|
JavaScript 前端开发 API
Vue.js:构建高效且灵活的Web应用的利器
Vue.js:构建高效且灵活的Web应用的利器
|
22天前
|
XML JSON JavaScript
使用JSON和XML:数据交换格式在Java Web开发中的应用
【4月更文挑战第3天】本文比较了JSON和XML在Java Web开发中的应用。JSON是一种轻量级、易读的数据交换格式,适合快速解析和节省空间,常用于API和Web服务。XML则提供更强的灵活性和数据描述能力,适合复杂数据结构。Java有Jackson和Gson等库处理JSON,JAXB和DOM/SAX处理XML。选择格式需根据应用场景和需求。
|
1月前
|
前端开发 JavaScript 安全
深入探索 Qt6 web模块 WebEngineCore:从基础原理到高级应用与技巧
深入探索 Qt6 web模块 WebEngineCore:从基础原理到高级应用与技巧
75 0