• 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

  • 相关阅读:
    单元测试(第一阶段+部分第二阶段+部分第三阶段+部分第四阶段)
    构建之法——Team & Scrum & MSF
    Github: 团队账号:https://github.com/ChenRuTing
    Sprint第二个计划
    读其他博客有感~
    冲刺第十天
    冲刺第五天
    冲刺第三天
    冲刺第二天
    冲刺第一天
  • 原文地址:https://www.cnblogs.com/jay36/p/7520444.html
Copyright © 2020-2023  润新知