一、首先新建 Tomcat 节点  node3

1. 安装JDK
      # rpm -ivh jdk-7u5-linux-i586.rpm
         
   定义两个环境变量:       
       # vi /etc/profile                                                

   
   
   
   
  1. JAVA_HOME=/usr/java/jdk1.7.0_05 
  2. PATH=$PATH:$JAVA_HOME/bin 
  3. export JAVA_HOME PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC    

   
  退出后再重新登录:
     # printenv                    查看环境变量

   
   
   
   
  1. ..... 
  2. PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/java/jdk1.7.0_05/bin:/root/bin 
  3. JAVA_HOME=/usr/java/jdk1.7.0_05 
  4.  ..... 

  
2. 安装 Tomcat

   
   
   
   
  1. # tar xf apache-tomcat-7.0.29.tar.gz -C /usr/local/ 
  2. # cd /usr/local/ 
  3. # ln -sv apache-tomcat-7.0.29/  tomcat 
  4.           create symbolic link `tomcat' to `apache-tomcat-7.0.29/' 

3.修改conf/server.xml

1). 添加 jvmRoute
        <Engine name="Catalina" defaultHost="localhost" jvmRoute="Tomcat_B">


2). 配置Tomcat的虚拟主机

   
   
   
   
  1. # vi /usr/local/tomat/conf/server.xml 
  2.  
  3.     "tomcat.yue.com" appBase="/www" unpackWARs="true" autoDeploy="true"
  4.                 "" docBase="/www/tomcat" reloadable="true"/> 
  5.  
  6.                 "org.apache.catalina.valves.AccessLogValve" directory="logs"                   
  7.                         prefix="tomcat_access_" suffix=".log" 
  8.                         pattern="%h %l %u %t "%r" %s %b" /> 
  9.          
   

       
3). 创建虚拟主机的相关目录和文件

   
   
   
   
  1. mkdir  -pv  /www/tomcat/WEB-INF/{lib,classes} 
  2.  
  3. # tree /www/ 
  4.  
  5. /www/ 
  6. `-- tomcat 
  7.     `-- WEB-INF 
  8.         |-- classes 
  9.         `-- lib 
  10.  
  11.         
  12. # cp /usr/local/tomcat/conf/web.xml  /www/tomcat/WEB-INF/  

4). 提供主页面

   # vi /www/tomcat/index.jsp            内容如下:

   
   
   
   
  1. <%@ page language="java" %> 
  2.  
  3.   TomcatB 
  4.    
  5.     

    "blue">TomcatB 

     
  6.     "centre" border="1"
  7.        
  8.         Session ID 
  9.         <%= session.getId() %> 
  10.        
  11.        
  12.         Created on 
  13.         <%= session.getCreationTime() %> 
  14.       
  15.      
  16.    
  17.  

5)启动Tomcat,并测试

实现 Tomcat 的负载均衡_第1张图片

二、以mod-jk的方式实现负载均衡

配置前端的Apache

1 .修改/etc/httpd/extra/httpd-jk.conf

   
   
   
   
  1. [root@node1 httpd]# vi extra/httpd-jk.conf 
  2.  
  3. # Load the mod_jk 
  4. LoadModule  jk_module  modules/mod_jk.so 
  5. JkWorkersFile  /etc/httpd/extra/workers.properties 
  6. JkLogFile  logs/mod_jk.log 
  7. JkLogLevel  debug 
  8. JkMount  /*     lbcluster-1 
  9. JkMount  /jk-status/  stat1 

2.  编辑/etc/httpd/extra/workers.properties

   
   
   
   
  1. [root@node1 httpd]# vi extra/workers.properties 
  2.  
  3. worker.list=lbcluster-1,stat1 
  4.  
  5. worker.Tomcat_A.port=8009 
  6. worker.Tomcat_A.host=192.168.1.12 
  7. worker.Tomcat_A.type=ajp13 
  8. worker.Tomcat_A.lbfactor=1 
  9.  
  10. worker.Tomcat_B.port=8009 
  11. worker.Tomcat_B.host=192.168.1.13 
  12. worker.Tomcat_B.type=ajp13 
  13. worker.Tomcat_B.lbfactor=1 
  14.  
  15. worker.lbcluster-1.type = lb 
  16. worker.lbcluster-1.sticky_session = 0              0: 表示不绑定会话   1:表示绑定会话 
  17. worker.lbcluster-1.balance_workers = Tomcat_A,Tomcat_B 
  18. worker.stat1.type = status 

3. 编辑httpd.conf

   
   
   
   
  1. # Virtual hosts 
  2. #Include /etc/httpd/extra/httpd-vhosts.conf 
  3. Include /etc/httpd/extra/httpd-jk.conf  确保启用了 httpd-jk.conf 的配置

 

4. 重启Apacher 测试一下

实现 Tomcat 的负载均衡_第2张图片

5. 若此时我们停掉node3 上的Tomcat,看是否可以自动检测到后端的健康状况

实现 Tomcat 的负载均衡_第3张图片

 

三、 以mod_proxy 的方式实现负载均衡

 

    可以使用http连接器,也可以使用ajp连接,注意端口不一样

1. 编辑extra/httpd-vhosts.conf

   
   
   
   
  1. [root@node1 httpd]# vi extra/httpd-vhosts.conf
  2.  
  3.  
  4. ProxyVia            Off 
  5. ProxyRequests       Off 
  6. ProxyPreserveHost   On 
  7.  
  8.  
  9.         ServerName tomcat.yue.com 
  10.         ProxyPass /  balancer://lbcluster-1/ stickysession=jsessionid  nofailover=On 
  11.         ProxyPa***everse /  balancer://lbcluster-1 
  12.  
  13.    //lbcluster-1> 
  14.         BalancerMember http://192.168.1.12:8080 loadfactor=10 route=Tomcat_A  使用的是http 连接器
  15.         BalancerMember http://192.168.1.13:8080 loadfactor=10 route=Tomcat_B 
  16.     
  17.  
  18.  

2. 编辑Apache的配置文件
    # vi /etc/httpd/httpd.conf

   
   
   
   
  1. Include /etc/httpd/extra/httpd-vhosts.conf                确保启用的是 httpd-vhosts.conf 的配置
  2. #Include /etc/httpd/extra/httpd-jk.conf 

 

 

四、实现Tomcat基于内存复制的集群

1. 编辑两个Tomcat的配置文件(注意 主机ip不能相同

     # vi conf/server.xml
   
以下内容定义在Engine容器中,则表示对所有主机均启动用集群功能。如果定义在某Host中,则表示仅对此主机启用集群功能。

   
   
   
   
  1.  
  2. "org.apache.catalina.ha.tcp.SimpleTcpCluster"            集群的类为SimpleTcpCluster,也是Tomcat中唯一的一种 
  3.                    channelSendOptions="8">                                  心跳信息传输的频道  
  4.      "org.apache.catalina.ha.session.DeltaManager" 
  5.                     expireSessionsOnShutdown="false" 
  6.                     notifyListenersOnReplication="true"/> 
  7.        "org.apache.catalina.tribes.group.GroupChannel">          定义一个独立的集群,区别集群和其它节点,使用哪个 
  8.           "org.apache.catalina.tribes.membership.McastService"      基于多波通信的方式 
  9.                    address="228.50.10.1"   bind="192.168.1.12"   port="45564"               同一集群中多波地址要一样;多波地址通过哪个地址所在的网卡发送信息通过哪个端口 
  10.                    frequency="500"  dropTime="3000"/>                                       多长时间收不到对方的响应信息,就认为其故障 
  11.              "org.apache.catalina.tribes.transport.nio.NioReceiver"         接收器 
  12.                                 address="192.168.1.12"   port="4000"  autoBind="100"            端口、自动绑定 
  13.                                 selectorTimeout="5000"   maxThreads="6"/> 
  14.              "org.apache.catalina.tribes.transport.ReplicationTransmitter">       发送器 
  15.                 "org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>   定义如何向外发送信息 
  16.               
  17.        "org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>      过滤器,定义节点间互相传递信息的时候要传递哪些信息,传递信息的时候是否要认证 
  18.        "org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/> 
  19.       
  20.      "org.apache.catalina.ha.tcp.ReplicationValve" 
  21.                         filter=".*\.gif;.*\.js;.*\.jpg;.*\.htm;.*\.html;.*\.txt;"/> 
  22.      "org.apache.catalina.ha.session.JvmRouteBinderValve"/>        JvmRoute 
  23.      "org.apache.catalina.ha.deploy.FarmWarDeployer"            可以实现分布式程序布署的 
  24.                      tempDir="/tmp/war-temp/" deployDir="/tmp/war-deploy/" 
  25.                     watchDir="/tmp/war-listen/"  watchEnabled="false"/> 
  26.       "org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>  监听器,基于事件的,当某种类型的事件发生时能够触发某种动作的 
  27.       "org.apache.catalina.ha.session.ClusterSessionListener"/> 
  28.  

1.1>.  编辑 web.xml

   
   
   
   
  1. vi  /www/tomcat/WEB-INF/web.xml  添加如下内容: 
  2.              

 

2. 通过 mod_proxy 模块工作

2.1> 编辑http.conf

   
   
   
   
  1. # Virtual hosts 
  2. Include /etc/httpd/extra/httpd-vhosts.conf  确保启用的是 httpd-vhosts.cnf 的配置
  3. #Include /etc/httpd/extra/httpd-jk.conf 

2.2> 编辑 extra/httpd-vhosts.conf

   
   
   
   
  1. ProxyRequests       Off 
  2. ProxyPreserveHost   On 
  3.  
  4.  
  5.         ServerName tomcat.yue.com 
  6.         ProxyPass /  balancer://lbcluster-1/ stickysession=jsessionid  nofailover=On 
  7.         ProxyPa***everse /  balancer://lbcluster-1 
  8.  
  9.    //lbcluster-1> 
  10.         BalancerMember http://192.168.1.12:8080 loadfactor=10 route=Tomcat_A 
  11.         BalancerMember http://192.168.1.13:8080 loadfactor=10 route=Tomcat_B 
  12.     
  13.  
  14.  

2.3> 重启Apache,测试一下效果:

实现 Tomcat 的负载均衡_第4张图片

 

实现 Tomcat 的负载均衡_第5张图片

3. 通过mod-jk 模块工作

3.1> 编辑 extra/httpd-jk.conf

   
   
   
   
  1. [root@node1 httpd]# vi extra/httpd-jk.conf  
  2.  
  3. # Load the mod_jk 
  4. LoadModule  jk_module  modules/mod_jk.so 
  5. JkWorkersFile  /etc/httpd/extra/workers.properties 
  6. JkLogFile  logs/mod_jk.log 
  7. JkLogLevel  debug 
  8. JkMount  /*     lbcluster-1 
  9. JkMount  /jk-status/  stat1 

3.2> 编辑 extra/workers.properties

   
   
   
   
  1. [root@node1 httpd]# vi extra/workers.properties  
  2.  
  3. worker.list=lbcluster-1,stat1 
  4.  
  5. worker.Tomcat_A.port=8009 
  6. worker.Tomcat_A.host=192.168.1.12 
  7. worker.Tomcat_A.type=ajp13 
  8. worker.Tomcat_A.lbfactor=1 
  9.  
  10. worker.Tomcat_B.port=8009
  11. worker.Tomcat_B.host=192.168.1.13 
  12. worker.Tomcat_B.type=ajp13 
  13. worker.Tomcat_B.lbfactor=1 
  14.  
  15. worker.lbcluster-1.type = lb 
  16. worker.lbcluster-1.sticky_session = 0 
  17. worker.lbcluster-1.balance_workers = Tomcat_A,Tomcat_B 
  18. worker.stat1.type = status 

3.3> 编辑 httpd.conf

   
   
   
   
  1. # Virtual hosts 
  2. #Include /etc/httpd/extra/httpd-vhosts.conf 
  3. Include /etc/httpd/extra/httpd-jk.conf  确保启用的是httpd-jk.conf 的配置

3.4> 测试一下,看看效果如何

实现 Tomcat 的负载均衡_第6张图片

 

4. 另外我们也可以将 extra/httpd-vhosts.conf 文件中内容单独定义在一文件中,如extra/httpd-proxy.conf

4.1> 编辑  extra/httpd-proxy.conf

   
   
   
   
  1. ProxyVia            Off 
  2. ProxyRequests       Off 
  3. ProxyPreserveHost   On 
  4.  
  5.  
  6.         ServerName tomcat.yue.com 
  7. #       ProxyPass /  balancer://lbcluster-1/ stickysession=jsessionid  nofailover=On                jsessionid  -->java 程序   psessionid -->php 程序 
  8.         ProxyPa***everse /  balancer://lbcluster-1 
  9.  
  10.    //lbcluster-1> 
  11.         ProxySet lbmethod=bytraffic                        负载均衡的调度算法,apache做代理的时候有三种 
  12.         BalancerMember http://192.168.1.12:8080 loadfactor=10 route=Tomcat_A 
  13.         BalancerMember http://192.168.1.13:8080 loadfactor=10 route=Tomcat_B 
  14.     
  15.  
  16.  
  17. ProxyPass /lb-manager !                          表示不做代理                                                      
  18. ProxyPass /status ! 
  19. ProxyStatus full 
  20.  
  21.  
  22.     SetHandler balancer-manager                 额外的处理器 
  23.     Require all granted 
  24.  
  25.  
  26.  
  27.     SetHandler server-status 
  28.     Require all granted 
  29.  
  30.  
  31.  

 4.2>  编辑httpd.conf  将extra/httpd-proxy.conf  文件包含进去

   
   
   
   
  1.     Include /etc/httpd/extra/httpd-proxy.conf    确保启用的是httpd-proxy.conf 的配置
    
  2. # Include /etc/httpd/extra/httpd-vhosts.conf          
  3.  # Include /etc/httpd/extra/httpd-jk.conf 

  4.3> 重启Apache,测试一下效果

实现 Tomcat 的负载均衡_第7张图片

  4.4> 查看一下相关的状态信息

实现 Tomcat 的负载均衡_第8张图片

实现 Tomcat 的负载均衡_第9张图片

实现 Tomcat 的负载均衡_第10张图片

 后记: 一定要注意 三台机器的时间必须要同步,否则就可能会出现一些问题

如:只显示Apache 工作了,但跳转不到后端Tomcat的虚拟主机上

实现 Tomcat 的负载均衡_第11张图片

 

 

由于本人能力有限,若本文中有不足或错误之处还请各位看官多多指教!