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,如需转载请自行联系原作者
目录
相关文章
|
2天前
|
XML 存储 Java
11:Servlet中初始化参数的获取与应用-Java Web
11:Servlet中初始化参数的获取与应用-Java Web
14 3
|
7天前
|
JavaScript 前端开发 持续交付
【专栏】构建现代Web应用:Vue.js与Node.js的完美结合
【4月更文挑战第27天】本文探讨了Vue.js和Node.js如何结合构建现代Web应用。Vue.js作为轻量级前端框架,以其简洁易懂、组件化开发、双向数据绑定和虚拟DOM等特点受到青睐;而Node.js是高性能后端平台,具备事件驱动、非阻塞I/O、丰富生态系统和跨平台优势。两者结合实现前后端分离,高效通信,并支持热更新、持续集成、跨平台和多端适配,为开发高性能、易维护的Web应用提供强有力的支持。
|
7天前
|
开发框架 缓存 前端开发
利用Visual Basic构建高效的ASP.NET Web应用
【4月更文挑战第27天】本文探讨使用Visual Basic与ASP.NET创建高效Web应用的策略,包括了解两者基础、项目规划、MVC架构、数据访问与缓存、代码优化、异步编程、安全性、测试及部署维护。通过这些步骤,开发者能构建出快速、可靠且安全的Web应用,适应不断进步的技术环境。
|
2天前
|
设计模式 存储 前端开发
18:JavaBean简介及其在表单处理与DAO设计模式中的应用-Java Web
18:JavaBean简介及其在表单处理与DAO设计模式中的应用-Java Web
18 4
|
2天前
|
存储 前端开发 安全
13:会话跟踪技术Session的深度应用与实践-Java Web
13:会话跟踪技术Session的深度应用与实践-Java Web
15 3
|
2天前
|
存储 前端开发 搜索推荐
12:会话跟踪技术Cookie的深度应用与实践-Java Web
12:会话跟踪技术Cookie的深度应用与实践-Java Web
15 4
|
4天前
|
缓存 移动开发 前端开发
【专栏:HTML与CSS前端技术趋势篇】HTML与CSS在PWA(Progressive Web Apps)中的应用
【4月更文挑战第30天】PWA(Progressive Web Apps)结合现代Web技术,提供接近原生应用的体验。HTML在PWA中构建页面结构和内容,响应式设计、语义化标签、Manifest文件和离线页面的创建都离不开HTML。CSS则用于定制主题样式、实现动画效果、响应式布局和管理字体图标。两者协同工作,保证PWA在不同设备和网络环境下的快速、可靠和一致性体验。随着前端技术进步,HTML与CSS在PWA中的应用将更广泛。
|
4天前
|
前端开发 JavaScript 搜索推荐
【专栏:HTML 与 CSS 前端技术趋势篇】HTML 与 CSS 在 Web 组件化中的应用
【4月更文挑战第30天】本文探讨了HTML和CSS在Web组件化中的应用及其在前端趋势中的重要性。组件化提高了代码复用、维护性和扩展性。HTML提供组件结构,语义化标签增进可读性,支持用户交互;CSS实现样式封装、布局控制和主题定制。案例展示了导航栏、卡片和模态框组件的创建。响应式设计、动态样式、CSS预处理器和Web组件标准等趋势影响HTML/CSS在组件化中的应用。面对兼容性、代码复杂度和性能优化挑战,需采取相应策略。未来,持续发掘HTML和CSS潜力,推动组件化开发创新,提升Web应用体验。
|
4天前
|
缓存 前端开发 JavaScript
探索现代Web应用的性能优化策略移动应用开发的未来之路:跨平台与原生之争
【4月更文挑战第30天】随着互联网技术的迅猛发展,Web应用已成为信息交流和商业活动的重要平台。用户对Web应用的响应速度和稳定性有着极高的期望,这促使开发者不断寻求提升应用性能的有效途径。本文将深入探讨针对现代Web应用进行性能优化的关键策略,包括前端优化、后端优化以及数据库层面的调优技巧,旨在为开发者提供一套全面的优化工具箱,帮助他们构建更快速、更高效的Web应用。
|
4天前
|
开发框架 JavaScript 前端开发
【JavaScript 与 TypeScript 技术专栏】TypeScript 在 Web 开发中的前沿应用
【4月更文挑战第30天】TypeScript在Web开发中日益重要,以其强大的类型系统提升代码质量,支持组件化开发,与React、Vue、Angular等框架良好集成。在大型项目管理中,TypeScript助于代码组织和优化,提高团队协作效率。此外,它提升开发体验,提供智能提示和错误检测。众多成功案例证明其前沿应用,未来将在Web开发领域持续发挥关键作用。