首页 > 代码库 > web应用构架LAMT及tomcat负载简析

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

本文出自 “赵雁生的linux之旅” 博客,请务必保留此出处http://12042068.blog.51cto.com/12032068/1896102

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