阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

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

197次阅读
没有评论

共计 7775 个字符,预计需要花费 20 分钟才能阅读完成。

之前写了一篇文章 Apache 服务器的安装及相关问题处理方案  http://www.linuxidc.com/Linux/2015-07/120149.htm,本文就是为了补充当时的那篇文章而写。现在再次想尝试一下怎么在 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>

到此配置基本完成。
下面就该进行测试了

更多相关参考

Linux 下 Apache 与 Tomcat 的完全分布式集群配置(负载均衡)http://www.linuxidc.com/Linux/2013-08/89072.htm

Linux 下 Apache 与多个 Tomcat 集群负载均衡 http://www.linuxidc.com/Linux/2012-01/51731.htm 

Nginx Tomcat 集群负载均衡解决笔记 http://www.linuxidc.com/Linux/2013-07/86827.htm

实例详解 Tomcat 组件安装 +Nginx 反向代理 Tomcat+Apache 使用 mod_jk 和 mod_proxy 反向代理和负载均衡 http://www.linuxidc.com/Linux/2013-06/85290.htm

CentOS 6.3 利用 Apache 来做集群实现负载均衡 http://www.linuxidc.com/Linux/2013-03/81623.htm

Apache 的详细介绍:请点这里
Apache 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-07/120151.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计7775字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中