Apache+Tomcat负载平衡设置实例详解
说明:上例中的worker要求操作系统在连接上发送KEEP-ALIVE信号。
注意:在ajpv13协议中默认端口为8009。
4.设置lb Worker属性:
负载平衡类型的worker并不与Tomcat worker通讯,它负责管理这些Tomcat worker。
其管理范围如下:
* 初始化在web server的worker列表中定义的worker。
* 使用worker的负载平衡权值,执行基于权值的负载平衡,将数量多的请求发送到负载平衡权值高(在web server看来就是更加健壮的)的worker。
* 维护在同一个Tomcat worker上的同一个session的请求,使其发送到同一个Tomcat worker上。以达到Tomcat worker上的session一致性、持续性。
* 标识已经失败的Tomcat workers,悬空发向它们的请求,在被lb worker管理的其它workers上寻找可以失败恢复的worker。
被同一个lb worker管理多个worker之间的负载平衡的(基于它们的lbfactor和当前用户session),也可以尽量避免由于单一的Tomcat进程死掉而造成这个网站被“杀”的不良反应。
下表说明了lb worker接受的属性:
* balanced_workers:一个由“,”分割的worker列表,用来声明lb worker需要被管理的workers。这些workers不应出现在worker.list属性中。
* sticky_session:表述是否将对SESSION ID的请求路由回到相同的Tomcat worker。如果属性值不为0,它将被设置为JK_TRUE,session将是粘性的,即SESSION ID的请求路由回到相同的Tomcat worker;当Tomcat正使用能够跨越多个Tomcat实例持久化session数据的Session Manager时,它将被设置为JK_FALSE。属性默认值为JK_TRUE。
例如:worker balance1管理着两个workers:worker1、worker2:
worker.balance1.balanced_workers=worker1, worker2
5.高级lb Worker属性:
JK 1.2.x版本通过增加两个新的属性:local_worker_only 和 local_worker 为lb worker增添了新的负载平衡和容错支持。
下面让我们举一个实际的环境作为example:
一个集群具有两个节点(worker1+worker2),一个web server与tomcat workers一前一后,一个负载平衡器(lb Worker)位于节点的前面、web server的后面。
配置如下:
?
# Define some propertiesworkers.apache_log=/var/log/httpd/workers.tomcat_home=/var/tomcat3workers.java_home=/opt/IBMJava2-131/ps=/# Define 4 workers, 3 real workers using ajp12, ajp13, jni, the last one being a loadbalancing workerworker.list=worker1,worker2, worker3, worker4# Set properties for worker1 (ajp12)worker.worker1.type=ajp12worker.worker1.host=locahostworker.worker1.port=8007worker.worker1.lbfactor=5# Set properties for worker2 (ajp13)worker.worker2.type=ajp13worker.worker2.host=locahostworker.worker2.port=8009worker.worker2.lbfactor=50worker.worker2.cachesize=10worker.worker2.cache_timeout=600worker.worker2.socket_keepalive=1worker.worker2.socket_timeout=300# Set properties for worker3 (jni)worker.worker3.type=jni# Set worker3 bridge type, here Tomcat 3.3worker.worker3.bridge=tomcat33# Set worker3 classpathworker.worker3.class_path=$(workers.tomcat_home)$(ps)classesworker.worker3.class_path=$(workers.tomcat_home)$(ps)lib$(ps)tomcat.jar# Setworker3 tomcat command lineworker.worker3.cmd_line=-homeworker.worker3.cmd_line=$(workers.tomcat_home)# Set worker3 Tomcat/JVM settingsworker.worker3.jvm_lib=$(workers.java_home)$(ps)jre$(ps)bin$(ps)classic$(ps)libjvm.soworker.worker3.stdout=$(workers.apache_log)$(ps)inprocess.stdoutworker.worker3.stderr=$(workers.apache_log)$(ps)inprocess.stderrworker.worker3.sysprops=tomcat.home=$(workers.tomcat_home)# Set properties for worker4 (lb) which use worker1 and worker2worker.worker4.balanced_workers=worker1,worker2