Apache+Tomcat实现负载均衡

一、规划

前端Apache:192.168.10.135

后端tomcat:192.168.10.132

                   192.168.10.133


二、配置Tomcat

①配置server.xml

1
2
3
4
5
# vi /usr/local/tomcat/conf/server.xml               ##位于103行
TomcatA:
<Engine name="Catalina" defaultHost="localhost" jvmRoute="TomcatA">
TomcatB:
<Engine name="Catalina" defaultHost="localhost" jvmRoute="TomcatB">


②配置测试页

1
2
3
# cd /usr/local/tomcat/webapps/ROOT
# mv index.jsp index.jsp.bak
# vi index.jsp

TomcatA:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<%@ page language="java" %>
<html>
  <head><title>TomcatA</title></head>
  <body>
    <h1><font color="green">TomcatA </font></h1>
    <table align="centre" border="1">
      <tr>
        <td>Session ID</td>
    <% session.setAttribute("abc","abc"); %>
        <td><%= session.getId() %></td>
      </tr>
      <tr>
        <td>Created on</td>
        <td><%= session.getCreationTime() %></td>
     </tr>
    </table>
  </body>
</html>

TomcatB:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<%@ page language="java" %>
<html>
  <head><title>TomcatB</title></head>
  <body>
    <h1><font color="yellow">TomcatB </font></h1>
    <table align="centre" border="1">
      <tr>
        <td>Session ID</td>
    <% session.setAttribute("abc","abc"); %>
        <td><%= session.getId() %></td>
      </tr>
      <tr>
        <td>Created on</td>
        <td><%= session.getCreationTime() %></td>
     </tr>
    </table>
  </body>
</html>


三、基于mod_jk实现

①配置mod_jk配置文件

1
2
3
4
5
6
7
8
9
# vi /etc/httpd/conf/mod_jk.conf
JkWorkersFile  /etc/httpd/conf/workers.properties   ##指出mod_jk工作所需文件位置
JkLogFile  logs/mod_jk.log                   ##指定日志输出文件位置
JkLogLevel  debug                         ##指定日志级别
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
JkRequestLogFormat "%w %V %T"
JkMount  /*  lbcluster1                   ##指定负载均衡器名称
JkMount  /status/  stat1                 ##指定状态信息


②配置worker.properties

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# vi /etc/httpd/conf/workers.properties
# workers 列表
worker.list = lbcluster1,stat1
#-------------------------------------------------
# tomcat实例1
#-------------------------------------------------
worker.TomcatA.type = ajp13              ##定向包协议
worker.TomcatA.host = 192.168.10.132     ##tomcat主机地址
worker.TomcatA.port = 8009            ##TomcatA实例端口
worker.TomcatA.lbfactor = 1             ##负载均衡权重为1
#-------------------------------------------------
# tomcat实例2
#-------------------------------------------------
worker.TomcatB.type = ajp13
worker.TomcatB.host = 192.168.10.133
worker.TomcatB.port = 8009
worker.TomcatB.lbfactor = 1
#-------------------------------------------------
# load balancer worker --负载均衡控制器
# ------------------------------------------------
worker.lbcluster1.type = lb             ##负载均衡work,lb内置类
worker.lbcluster1.sticky_session = 0       ##会话是否绑定
worker.lbcluster1.balance_workers = TomcatA, TomcatB     ##指定集群拥有实例
worker.stat1.type = status                    ##状态信息


③配置httpd

1
2
3
# vi /etc/httpd/conf/httpd.conf
LoadModule jk_module modules/mod_jk.so           ##加载mod_jk模块
Include /etc/httpd/conf/mod_jk.conf             ##指定mod_jk配置文件


④测试

输入前端Apache地址查看

wKiom1ZdOcOjDIokAABAAvfnK0g188.png

刷新后继续查看

wKioL1ZdOn3wA8b5AAA9Fe3hO0I996.png

前端输入http://localhost/status/查看集群状态

wKiom1ZdO0uw0VG-AADo26b4w50081.png


⑤实现会话复制

a.在 <Engine>或 <Host>元素节点下添加以下内容:

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
# vi /usr/local/tomcat/conf/server.xml
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
                 channelSendOptions="8">
          <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.0.4"
                        port="45564"
                        frequency="500"
                        dropTime="3000"/>
            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                      address="auto"
                      port="4000"
                      autoBind="100"
                      selectorTimeout="5000"
                      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.ClusterSessionListener"/>
        </Cluster>



b.在启用集群功能的web应用程序的web.xml中添加<distributable/>以实现集群功能

1
2
3
4
5
6
7
8
# vi /usr/local/tomcat/conf/web.xml
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                      http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
  version="3.1">
<distributable/>
# cp /usr/local/tomcat/conf/web.xml /usr/local/tomcat/webapps/ROOT/WEB-INF/

详情:http://tomcat.apache.org/tomcat-9.0-doc/cluster-howto.html


c.测试

输入前端Apache地址查看

wKiom1ZdQTnRlDV3AAA8pASSL6Q252.png

刷新后继续查看

wKioL1ZdQd7z5XdyAAA7hZX59Tg745.png

TomcatA和TomcatB已经实现了会话共享



四、基于mod_proxy实现

①查看相关代理模块是否装载(其中balancer为集群实现模块)

1
2
3
4
5
6
7
8
9
10
11
# httpd -D DUMP_MODULES | grep proxy         
 proxy_module (shared)
 proxy_ajp_module (shared)
 proxy_balancer_module (shared)
 proxy_connect_module (shared)
 proxy_express_module (shared)
 proxy_fcgi_module (shared)
 proxy_fdpass_module (shared)
 proxy_ftp_module (shared)
 proxy_http_module (shared)
 proxy_scgi_module (shared)

②配置httpd

1
2
3
4
5
6
7
8
9
10
11
12
13
# vi /etc/httpd/conf/httpd.conf
<VirtualHost *:80>
ServerAdmin localhost
ServerName localhost
ProxyPass / balancer://cluster1/ stickysession=jsessionid
ProxyPassReverse / balancer://cluster1/
</VirtualHost>
ProxyRequests Off
<proxy balancer://cluster1>
BalancerMember ajp://192.168.10.132:8009 loadfactor=1 route=TomcatA
BalancerMember ajp://192.168.10.133:8009 loadfactor=1 route=TomcatB
ProxySet  lbmethod=bytraffic
</Proxy>

注:

ProxySet  lbmethod={byrequests|bytraffic|bybusyness}:负载均衡的实现方式

byrequests:按照请求次数负载均衡(默认)

bytraffic:按照流量负载均衡

bybusyness:安装繁忙程度负载均衡(总是分配给活跃请求数最少的服务器)


③测试

输入TomcatA地址查看:

wKiom1ZcAKqBLZ2UAABMw_G486o846.png

输入TomcatB地址查看:

wKioL1ZcAtqzasDDAABINR85g5A444.png

输入前端Apache地址查看:

wKioL1ZcAyvgB05RAABVAZUc8xQ510.png

刷新继续查看:

wKiom1ZcAxTxnqZ6AABRKV1Eb6U541.png



本文出自 “记事本” 博客,请务必保留此出处http://wangzhijian.blog.51cto.com/6427016/1718502

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值