season22 发表于 2015-8-6 10:52:43

Apache与Tomcat负载均衡配置

  Apache HTTP Server 与 Tomcat负载均衡
  参考资料 https://www.ibm.com/developerworks/cn/opensource/os-lo-apache-tomcat/
  
  环境以及所需软件
  window7(64),JDK1.7(64)
  apache-tomcat-7.0.35-windows-x64.zip
  Apache 服务器 (httpd-2.2.25-win32-x86-no_ssl.msi )
  JK插件 (tomcat-connectors-1.2.40-windows-i386-httpd-2.2.x.zip)
  其中需要注意的是JK插件的版本与Apache服务器的版本需要一致 其中红色标记
  
  一、配置apache的httpd.conf文件加载JK插件,该文件在软件安装目录的conf目录下面。
  配置如下:



LoadModule jk_module modules/mod_jk.so
#
# Configure mod_jk
#
JkWorkersFile conf/workers.properties
JkMountFile conf/uriworkermap.properties
JkLogFile logs/mod_jk.log
JkLogLevel warn
  
  二、在httpd.conf文件的同级目录新建俩个文件。workers.properties 和 uriworkermap.properties,这俩个文件的名字需要和上面配置里的名字一致。
  配置如下: 官方文档 http://tomcat.apache.org/connectors-doc/reference/workers.html
  需要注意的是下面括号里的为说明 使用的时候需要拿掉。
  workers.properties
  



worker.list=DLOG4J, status
# localhost server 1
# ------------------------
worker.s1.port=8009
worker.s1.host=localhost
worker.s1.type=ajp13
worker.s1.lbfactor = 1
# localhost server 2 # ------------------------
worker.s2.port=8009 (Tomcat的AJP/1.3端口需要和tomcat的service.xml里配置的端口一致)
worker.s2.host=192.168.1.213 (Tomcat所在机器的IP地址)
worker.s2.type=ajp13 (worker的类型)
worker.s2.lbfactor = 1 (负载均衡的权重,值越大被访问的次数越高)
worker.DLOG4J.type=lb
worker.retries=3
worker.DLOG4J.balanced_workers=s1,s2
worker.DLOG4J.sticky_session=True (粘结SESSION策略,即将同一个客户端的请求都转发到相同的Tomcat上面)
worker.status.type=status (监控用的)
  
  
  
  首先我们配置了两个类型为 ajp13 的 worker 分别是 s1 和 s2,它们指向同在不同服务器上运行在两个Tomcat 。接下来我们配置了一个类型为 lb(也就是负载均衡的意思)的 worker,它的名字是 DLOG4J,这是一个逻辑的 worker,它用来管理前面配置的两个物理连接 s1 和 s2。最后还配置了一个类型为 status 的 worker,这是用来监控 JK 本身的模块。有了这三个 worker 还不够,我们还需要告诉 JK,哪些 worker 是可用的,所以就有 worker.list = DLOG4J, status 这行配置。
  
  uriworkermap.properties
  接下来便是 URI 的映射配置了,我们需要指定哪些链接是由 Tomcat 处理的,哪些是由 Apache 直接处理的,看看下面这个文件你就能明白其中配置的意义。



/*=DLOG4J
/jkstatus=status
!/*.gif=DLOG4J
!/*.jpg=DLOG4J
!/*.png=DLOG4J
!/*.css=DLOG4J
!/*.js=DLOG4J
!/*.htm=DLOG4J
!/*.html=DLOG4J
  所有的请求都由 DLOG4J 这个 worker 进行处理,但是有几个例外,/jkstatus 请求由 status 这个 worker 处理(监控管理界面),另外这个配置中每一行数据前面的感叹号是什么意思呢?感叹号表示接下来的 URI 不要由 JK 进行处理,也就是 Apache 直接处理所有的图片、css 文件、js 文件以及静态 html 文本文件,其他的请求由JK处理,也就是我们所说的动态资源,JK会把请求负载到配置好的tomcat,这样就完成了让Apache来处理静态资源,让JK负载tomcat来处理动态请求。
  
  三、配置TOMCAT





  分别配置每台Tomcat服务器的service.xmljvmRoute="s1" 这里的"s1" 需要与 workers.properties 里面定义的名字一致。
  
  上面的配置就完成了Apache与tomcat的负载均衡的配置,下面在介绍一些额外的配置。
  
  Tomcat热备,顾名思义就是配置俩个tomcat,平时使用其中一个,另外一个做备用,如果平时使用的这个tomcat挂了,那么会自动切换到另外一个。
  



# The advanced router LB worker
worker.list=router
worker.router.type=lb
worker.router.balance_workers=worker1,worker2
# Define the first member worker
worker.worker1.type=ajp13
worker.worker1.host=myhost1
worker.worker1.port=8009
# Define preferred failover node for worker1
worker.worker1.redirect=worker2 (配置当worker1挂机的时候 会使用worker2)
# Define the second member worker
worker.worker2.type=ajp13
worker.worker2.host=myhost2
worker.worker2.port=8009
# Disable worker2 for all requests except failover (worker2只接受worker1失败时转发过来的请求)
worker.worker2.activation=disabled
  
  
  
  
  worker.worker1.redirect=worker2的意思是告诉负载均衡器(load balancer)当worker1出现问题时把请求转发给worker2。
  
  worker.worker2.activation=disabled的意思是在所有情况下worker2不接受任何请求,除了worker1出现问题时转发过来的请求。
  
  
  以上的配置都是基于Session粘连的配置方式worker.DLOG4J.sticky_session=True 会将同意客户端的请求始终绑定到同一个Tomcat上。
  接下来我们来配置第二种方式Session共享(参考 http://blog.iyunv.com/extreme421/article/details/16113417)
  一、tomcat的server.xml
  



启用标签,注:tomcat01和tomcat02都要启用。
  
  
  
  二、httpd.conf
  



修改Apache的httpd.conf配置 在最后面加上如下配置 注意要加到前面
ProxyRequests Off
ProxyPass / balancer://abc/ stickysession=jsessionid nofailover=On

BalancerMember ajp://127.0.0.1:8009 loadfactor=1 route=s1
BalancerMember ajp://192.168.1.213:8009 loadfactor=1 route=s2

  
  
  
   三、workers.properties
  



worker.DLOG4J.sticky_session=False 修改 workers.properties 关闭粘连
  
  
  
  
页: [1]
查看完整版本: Apache与Tomcat负载均衡配置