zoukankan      html  css  js  c++  java
  • linux环境下Apache+Tomcat集群配置

    写在前面

    apache配置多个tomcat,实现请求分流,多个tomcat服务均衡负载,增加服务的可靠性。最近研究了一下,遇到许多问题,记录一下,方便以后查阅,不喜欢apache,nginx也是可以做到的。

    准备

    版本很重要,我就是由于版本原因,一直报错

    linux

    使用 #lsb_release -a查看当前linux系统版本。

    本例:CentOS Linux release 7.0.1406 (Core)

    jdk

    使用 # java -version查看当前版本,如果没有,先装好。download link

    本例:java version “1.7.0_80”

    tomcat

    查看解压安装位置。download link

    本例:apache-tomcat-7.0.69.tar.gz

    apache

    在linux系统中,apache服务主程序就是httpd,所以名称也是httpd。使用 #httpd -version查看当前版本。这里是使用yum安装download link

    本例:Apache/2.4.6 (CentOS)

    tomcat-connectors

    tomcat-connectors是用来连接apache和tomcat的插件包,这个版本很重要,就是在找这个上面花了很长时间,主要是为了使用其编译好的mod_jk.so 文件。在Apache 2.2.x 时可以直接下载 mod_jk-1.2.31-httpd-2.2.x.so

    官方:mod_jk-1.2.31-httpd-2.2.x.so is for Apache 2.2.x. It has been build against version 2.2.3, but should work with Apache 2.2.0 and later. Rename to mod_jk.so before putting it in your modules directory or adjust your LoadModule statement.

    但是我使用的是Apache 2.4.6,使用yum安装时,会默认安装最新版本,#yum list httpd查询时只有这一个。 
    所以这里要去下载新的中间包,并且需要编译。download link

    本例:tomcat-connectors-1.2.42-src.tar.gz

    安装

    将这些软件包,放置在一个文件夹下,我是放在 /home下。这里主要的安装是Apache安装,我这里使用yum安装:

    • #yum list httpd #查看可安装版本列表
    • #yum install httpd #默认安装
    • httpd -v #安装结束,查看安装版本 
      如果出现安装错误,可以查看apache包,例如httpd.x86_64

    • yum list|grep httpd 
      然后删除相关依赖包。注意:删除后你的一些配置还会保留起来。

    • yum erase httpd.x86_64

    使用service httpd start启动Apache 服务,默认端口为80,直接访问IP或域名看到页面,说明启动成功,失败查看service httpd status中的异常信息。

    apache-tomcat-7.0.69.tar.gz,解压即可

    • tar zxvf /home/apache-tomcat-7.0.69.tar.gz#解压至当前文件夹
    • cp /home/apache-tomcat-7.0.69 /usr/local/ #拷贝到/usr/local/文件夹下
    • mv /usr/local/apache-tomcat-7.0.69 tomcat1 #修改文件夹名称为tomcat1

    本例是多个tomcat配置一个Apache所以上述操作还要做一遍,创建第二个tomcat,命名为tomcat2.

    tomcat-connectors编译并获取mod_jk.so文件,

    • #tar zxvf /home/tomcat-connectors-1.2.42-src.tar.gz
    • cd /home/tomcat-connectors-1.2.40-src/native

    这里要注意一下,因为编译时需要Apache bin包下的apxs工具,由于是yum按照,所以不会有bin包,这时就需要下载httpd-devel开发包,

    • rpm -qa|grep httpd #查看httpd安装包列表
    • yum -y install httpd-devel #如果不存在就直接安装
    • which apxs #查询该工具位置,我这里是 /usr/sbin/apxs

    接tomcat-connectors编译…

    • [native]# ./configure --with-apxs=/usr/sbin/apxs#=后面的位置就是上面安装apxs位置,注意需要在/home/tomcat-connectors-1.2.40-src/native目录下操作。

    • [native]# make #执行编译

    编译成功后,在 /home/tomcat-connectors-1.2.40-src/native/apache-2.0/mod_jk.so 找到 mod_jk.so文件,将其复制到Apache module包下

    • cp /home/tomcat-connectors-1.2.40-src/native/apache-2.0/mod_jk.so /etc/httpd/modules/

    使用了全路径,自己可以简写.

    配置

    创建两个文件,利用 mod_jk.so插件包将Apache与tomcatx做关联。 
    进入Apache配置文件

    • cd /etc/httpd/conf #进入配置文件夹
    • vi mod_jk.conf #创建文件, shift+: => q => Enter 关闭
    • vi workers.properties #创建文件,shift+: => q => Enter 关闭

    打开mod_jk.conf文件,并写入

    #加载 mod_jk.so 文件,放置在最上
    LoadModule jk_module /etc/httpd/modules/mod_jk.so
    #加载 tomcat 参数配置文件
    JkWorkersFile conf/workers.properties
    #日志保存文件
    JkLogFile /etc/httpd/logs/mod_jk2.log
    #日志等级
    JkLogLevel info
    JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
    JkOptions  +ForwardKeySize +ForwardURICompat -ForwardDirectories
    JkRequestLogFormat "%w %V %T"
    #######请求拦截, controller负载均衡控制器名称
    JkMount /servlet/* controller
    JkMount /*.jsp controller
    JkMount /*.do controller
    ############## end #######################
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    打开workers.properties文件,并写入

    #server
    worker.list = controller
    
    #========tomcat1========
    worker.tomcat1.port=11009  #端口号与tomcat一致
    worker.tomcat1.host=localhost
    worker.tomcat1.type=ajp13
    worker.tomcat1.lbfactor = 1
    
    #========tomcat2========
    worker.tomcat2.port=12009  #端口号与tomcat一致
    worker.tomcat2.host=localhost
    worker.tomcat2.type=ajp13   
    worker.tomcat2.lbfactor = 1
    
    #========controller=负载均衡控制器名称=======
    worker.controller.type=lb
    worker.controller.balanced_workers=tomcat1,tomcat2 #多个tomcat以","隔开
    worker.controller.sticky_session=false
    worker.controller.sticky_session_force=1
    #worker.controller.sticky_session=1
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    将文件关联创建好后,就需要加入Apache配置文件中,打开httpd.conf,增加包含mod_jk.conf文件。

    • vi /etc/httpd/conf/httpd.conf #打开文件 。
    • Include /etc/httpd/conf/mod_jk.conf #添加该行,建立关联。
    • Listen 80 同时可以修改它的访问接口,默认80。

    做好关联后现在,要修改tomcatx的server.xml 配置文件。部分修改为:

    ...
    <!--    
        <Connector port="8081" protocol="org.apache.coyote.http11.Http11NioProtocol"
                   connectionTimeout="20000"
                   URIEncoding="UTF-8" 
                useBodyEncodingForURI="true" 
                maxThreads="768" 
                   minSpareThreads="64" 
                enableLookups="false"  
                   redirectPort="8443" />
        -->
    <!-- 将该请求端口号该为 上面workers.properties文件中的一致,包括两台-->
    <Connector port="11009" protocol="AJP/1.3" redirectPort="8443" />
     ...
    <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
    ...
    <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    测试

    为了看一下这个集群配置是否配置成功,需要创建测试的简单页面,将其放在tomcat能够访问了ROOT中。命名为test.jsp 
    测试页面内容为:

    <%@ page contentType="text/html; charset=utf-8" %>
        <%@ page import="java.util.*" %>
            <html>
                <head>
                    <title>
                        Cluster App Test
                    </title>
                </head>
                <body>
                    Server Info:
                    <% out.println(request.getLocalAddr() + " : " + request.getLocalPort()+
                    "<br>");%>
                        <% out.println( "<br> ID " + session.getId()+ "<br>"); // 如果有新的 Session
                        属性设置 String dataName=r equest.getParameter( "dataName"); if (dataName !=n
                        ull && dataName.length()>
                            0) { String dataValue = request.getParameter("dataValue"); session.setAttribute(dataName,
                            dataValue); } out.println("
                            <b>
                                Session 列表
                            </b>
                            <br>
                            "); System.out.println("============================"); Enumeration e
                            = session.getAttributeNames(); while (e.hasMoreElements()) { String name
                            = (String)e.nextElement(); String value = session.getAttribute(name).toString();
                            out.println( name + " = " + value+"
                            <br>
                            "); System.out.println( name + " = " + value); } %>
                            <form action="test2.jsp" method="POST">
                                名称:
                                <input type=text size=20 name="dataName">
                                <br>
                                值:
                                <input type=text size=20 name="dataValue">
                                <br>
                                <input type=submit>
                            </form>
                </body>
            </html>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    启动Apache

    • service httpd start
    • service httpd status #查看是否运行正常

    启动tomcatx

    • cd /usr/local/tomcat{x}/bin #打开bin目录
    • ./startup.sh #启动
    • tail -f ../logs/catalina.out #查看打印console,ctrl + z 关闭退出

    浏览器访问:http://123.xx.xxx.xx/test.jsp 
    页面显示:ID 7B8C934D14F3EF669C437E5B1B8123DB.tomcat1 
    刷新:ID BBED560EC85BF46ABB639883B9DAF754.tomcat2 
    … 
    至此就完成了Apache+tomcat负载均衡配置了,还可以通过Apache 的 ApacheBench来简单测试一下并发。

    • ab -n 4000 -c 1000 http://123.xx.xxx.xx/ #4000请求 + 1000并发数 + 请求的地址,自己的服务器。 
      相关的一些数据就可以体现出来了,也可以先开一个tomcat试一下,在配置多个tomcat,进行对比测试。

    总结

    其实并不难,只是不够细心,所有软件都是需要配置并作关联,抓住这一点,理清思路,问题解决的方法就很多。 
    网上资料被翻了个遍,自己以后也要记录一些作为回馈。 
    相关参考:

    个人博客: http://www.abina.me/articles/2017/01/19/1484820029888.html

  • 相关阅读:
    HDU4529 郑厂长系列故事——N骑士问题 —— 状压DP
    POJ1185 炮兵阵地 —— 状压DP
    BZOJ1415 聪聪和可可 —— 期望 记忆化搜索
    TopCoder SRM420 Div1 RedIsGood —— 期望
    LightOJ
    LightOJ
    后缀数组小结
    URAL
    POJ3581 Sequence —— 后缀数组
    hdu 5269 ZYB loves Xor I
  • 原文地址:https://www.cnblogs.com/jay36/p/7520444.html
Copyright © 2011-2022 走看看