关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » HTML5 »Linux下Apache+Tomcat搭建负载均衡服务器集群

    Linux下Apache+Tomcat搭建负载均衡服务器集群

    2015-03-13 00:00:00 出处:codeceo
    分享

    该文主要讲解关于如何在Linux下搭建Apache+tomcat负载均衡服务器集群的过程。

    负载均衡集群配置(1):Tomcat的配置

    修改“ tomcat/conf/server.xml ”文件
    编辑server.xml文件,找到“<Connector>”元素节点,在server.xml文件里面未注释掉的有两个<Connector>元素节点。找到第二个也就是上面一行注释为

    <!-- Definean AJP 1.3 Connector on port 8009 -->

    的节点。将其修改为

    <!-- Define an AJP 1.3 Connector on port 8009 -->
     <Connector port="8009" protocolhandlerclassname="org.apache.jk.server.jkcoyotehandler" protocol="AJP/1.3" redirectPort="8443" />

    注意:假如是在一台PC上同时运行多个tomcat,须将每个tomcat对的server.xml文件里面的“<Connector>”元素节点里面的port(端口号)设置为不同的值。这里不同上面只改第二个,而是两个“<Connector>”元素节点都须要修改。

    负载均衡集群配置(2):

    接下来继续修改这个文件,找到“<Connector>”元素节点下面的注释如下

    !-- An Engine represents the entry point (within Catalina) that processes
             every request.  The Engine implementation for Tomcat stand alone
             analyzes the HTTP headers included with the request, and passes them
             on to the appropriate Host (virtual host).
             Documentation at /docs/config/engine.html -->
        <!-- You should set jvmRoute to support load-balancing via AJP ie :
        <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
        -->

    里面有

    <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">

    将其注释打开。这里进行tomcat的命名,即修改jvmRoute的值为tomcat实例名,不同的tomcat设置不同的值(这里不管是否是同一PC都须不同)。比如我的修改为tomcat1和tomcat2

    <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1" >

    负载均衡集群配置(3):

    接下来还是操作tomcat的server.xml文件,在<Engine>或<Host>元素节点下添加以下内容

    <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster">
            <Manager className="org.apache.catalina.ha.session.BackupManager"
               expireSessionsOnShutdown="false"
               notifyListenersOnReplication="true"  
                  mapSendOptions="6"/>
            <!--
             <Manager className="org.apache.catalina.ha.session.DeltaManager"
                   expireSessionsOnShutdown="false"
                   notifyListenersOnReplication="true"/>
              -->
           <Channel className="org.apache.catalina.tribes.group.GroupChannel">
              <Membership
                      className="org.apache.catalina.tribes.membership.McastService"
                  address="228.0.1.99" 
                  port="45564"
                  frequency="500"
                  dropTime="3000"/>
              <Receiver 
                      className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                  address="192.168.11.128"                                                        port="4002"
                  autoBind="100"
                  selectorTimeout="100"
                  maxThreads="6"/>
              <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
                 <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
              </Sender>
              <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
              <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
           </Channel>
           <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=""/>
           <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
           <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
                tempDir="/tmp/war-temp/"
                deployDir="/tmp/war-deploy/"
                watchDir="/tmp/war-listen/"
                watchEnabled="false"/>
           <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
           <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>         
       </Cluster>

    上述添加的代码的用处请继续看第4步。

    负载均衡集群配置(4):

    这里还是继续操作tomcat的server.xml文件
    找到刚刚添加的一长串代码中的<Cluster>元素节点,下面开始修改,代码意义见其中的注释解释

    <Membership
         className="org.apache.catalina.tribes.membership.McastService"
         address="228.0.1.99" 
         port="45564"
         frequency="500"
         dropTime="3000"/>
    <!-- 解释上一句代码.
         假如主机有vpn-虚拟专用网络,需要要bind下,即添加  bind="127.0.0.1" 在Membership元素节点里面作为属性。假如没有的话可以不用加bind,否则会导致session无法复制.
         address的值表示广播地址,同一组tomcat搭建的集群配置须一样。
         port端口号,同一组tomcat搭建的集群配置须一样。
     -->
    <Receiver 
         className="org.apache.catalina.tribes.transport.nio.NioReceiver"
         address="192.168.11.128"                                                   
         port="4002"
         autoBind="100"
         selectorTimeout="100"
         maxThreads="6"/>
    <!-- 解释上一句代码.
         address的值表示本机IP地址,须设置为本机IP地址。
         port端口号(tomcat默认可以检测到4000~4100之间的端口)。假如是在同一台PC上配置负载均衡则需要修改,使用不同的端口号,否则会因为端口冲突而失效。
    -->

    负载均衡集群配置(5):项目部署文件的配置

    修改待发布项目的web.xml
    找到项目的web.xml文件,打开修改,在<web-app>元素节点结束标签上面一行添加

    <distributable/>

    从而确保session能够复制。

    负载均衡集群配置(6):Apache的配置

    接下来进行Apache配置文件的修改,找到Apache安装文件夹下面的conf文件夹里面的httpd.conf文件打开并进行修改,在最后面加上一下内容

    #加载mod_jk Module
    LoadModule jk_module modules/mod_jk.so
    <Ifmodule mod_jk.c>
    #指定workers.properties文件路径
    JkWorkersFile /usr/local/apache2/conf/workers.properties
    #指定jk logs文件存放位置
    JkLogFile /usr/local/apache2/logs/mod_jk.log
    #Set the jk log level [debug/error/info]
    JkLogLevel info
    #Select the log format
    JkLogStampFormat "[%a %b %d%H:%M:%S %Y]"
    #JkOptions indicate to send SSL KEYSIZE,
    JkOptions  +ForwardKeySize +ForwardURICompat -ForwardDirectories
    #JkRequestLogFormat set the requestformat
    JkRequestLogFormat "%w %V %T %q %U%R"
    #JkShmFile to put logs
    JkShmFile /usr/local/apache2/logs/mod_jk.shm
    </IfModule>
    #指定哪些请求交给tomcat处理,哪些请求交给apache处理
    #注意:" loadbalancer "为在workers.propertise里指定的负载分配控制器
    JkMount /*.jsp loadbalancer 
    #所有的jsp都交给tomcat处理

    负载均衡集群配置(7):

    在上一步中添加的httpd.conf文件的最后添加的配置中的workers.properties文件是不存在的,需要我们在指定的位置创建一个,查看上一步可以发现文件在 /usr/local/apache2/conf/路径下面创建。
    workers.properties文件用于对负载均衡的负载器worker(即tomcat)进行具体的登记,此处的2个tomcat就作为2个worker被登记在这个文件中。
    workers.properties具体配置如下:

    #workers.properties
    #
    # in unix, weuse forward slashes:
    ps=/
    # workers 列表
    worker.list=tomcat1,tomcat2,tomcat3,loadbalancer,status
    #--------------------------------------------------------------------
    # 第一个tomcat
    #--------------------------------------------------------------------
    worker.tomcat1.port=8009   #对应tomcat的server.xml中配置的ajp13端口号
    worker.tomcat1.host=127.0.0.1  #tomcat1的主机地址,如不为本机,请填写IP地址
    worker.tomcat1.type=ajp13  #定向包协议
    worker.tomcat1.lbfactor=1  #server的负载分配权重,值越高,分得的请求越多
    #以下为非必要配置,这部分配置tomcat2的配置同tomcat1
    #worker.tomcat1.cachesize=1000  #配置tomcat的jk连接缓存大小 (非必要)
    #worker.tomcat1.cachesize_timeout=600  # (非必要)
    #worker.tomcat1.reclycle_timeout=300  # (非必要)
    #worker.tomcat1.socket_keepalive=1  #防止防火墙切断未激活的网络连接(非必要)
    #worker.tomcat1.socket_timeout=300   #(非必要)
    #worker.tomcat1.local_worker=1  # (非必要)
    #worker.tomcat1.retries=3  # (非必要) 
    #----------------------------------------------------------------------
    # 第二个tomcat
    #----------------------------------------------------------------------
    worker.tomcat2.port=8809
    worker.tomcat2.host=127.0.0.1  #tomcat2的主机IP地址
    worker.tomcat2.type=ajp13
    worker.tomcat2.lbfactor=1
    #---------------------------------------------------------------------
    #第三个tomcat,使用其他ip对应的tomcat
    #---------------------------------------------------------------------
    worker.tomcat3.port=8009
    worker.tomcat3.host=192.168.11.128
    worker.tomcat3.type=ajp13
    worker.tomcat3.lbfactor=1
    #----------------------------------------------------------------------
    # load balancerworker -负载均衡控制器
    # --------------------------------------------------------------------
    worker.loadbalancer.type=lb
    worker.loadbalancer.balanced_workers=tomcat1,tomcat2,tomcat3
    #指定分担请求的tomcat
    worker.loadbalancer.sticky_session=1    #设置为粘性session
    worker.loadbalancer.sticky_session_force=0  #设置当多次请求未响应,请求将转发
    worker.status.type=status
    #
    # end workers.properties

    负载均衡集群配置(8):

    修改Apache安装陌路下的conf文件夹里的httpd.conf文件。
    打开httpd.conf文件并修改。找到DocumentRoot和Directory并修改,将文件访问路径定位到tomcat的webapps文件夹,即待发布项目的存放位置

    #
    # DocumentRoot: The directory out of which you will serve your
    # documents. By default, all requests are taken from this directory, but
    # symbolic links and aliases may be used to point to other locations.
    #
    DocumentRoot "/usr/local/tomcat1/webapps"
    <Directory "/usr/local/tomcat1/webapps">
       Require all granted
       Orderallow,deny
       Allow from all
    </Directory>

    到此配置基本完成。

    下面就是测试的环节了。在此就不多说了。

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    正版 Windows 11产品密钥怎么查找/查看?

    还有3个月,微软将停止 Windows 10 的更新

    Windows 10 终止支持后,企业为何要立即升级?

    Windows 10 将于 2025年10 月终止技术支持,建议迁移到 Windows 11

    Windows 12 发布推迟,微软正全力筹备Windows 11 25H2更新

    Linux 退出 mail的命令是什么

    Linux 提醒 No space left on device,但我的空间看起来还有不少空余呢

    hiberfil.sys文件可以删除吗?了解该文件并手把手教你删除C盘的hiberfil.sys文件

    Window 10和 Windows 11哪个好?答案是:看你自己的需求

    盗版软件成公司里的“隐形炸弹”?老板们的“法务噩梦” 有救了!

    IT头条

    公安部:我国在售汽车搭载的“智驾”系统都不具备“自动驾驶”功能

    02:03

    液冷服务器概念股走强,博汇、润泽等液冷概念股票大涨

    01:17

    亚太地区的 AI 驱动型医疗保健:2025 年及以后的下一步是什么?

    16:30

    智能手机市场风云:iPhone领跑销量榜,华为缺席引争议

    15:43

    大数据算法和“老师傅”经验叠加 智慧化收储粮食尽显“科技范”

    15:17

    技术热点

    商业智能成CIO优先关注点 技术落地方显成效(1)

    用linux安装MySQL时产生问题破解

    JAVA中关于Map的九大问题

    windows 7旗舰版无法使用远程登录如何开启telnet服务

    Android View 事件分发机制详解

    MySQL用户变量的用法

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。