在介绍JK可配属性之前,先了解一下它的几个属性配置的小知识:
JK的属性设置格式如下: worker.<worker name>.<directive>=<value> a,起始位置永远以worker为开头, b,directive为指令名称,或称之为属性名称 c,等号后面为所要设置的值
当然,如果你愿意也可以在proerties文件中自定义变量,格式如下: <variable_name>=<value> 唯一要注意的一点是,变量名不要以worker开头
worker属性的继承(属性模版): 在实际的配置过程中,可以预先定义worker的一套属性做为集群中其它worker的模版。 “reference”属性就是被用来做这件事情的,使woker之间的属性复制变的相当的容易,如: worker.worker1.reference=worker.worker2
接下来,将介绍几个比较重要的JK属性:
全局属性仅有两个:
#应用服务器的逗号分隔的名称列表,上面的例子已经用到 worker.list
#JK的全局池的维护时间间隔,秒为单位 worker.maintain
worker的私有属性:
type:可以选值为, ajp13, ajp14, jni, lb or status。 AJP(Apache JServ Protocol version 1.3 ),用来在Tomcat与Apache之间通迅的协议,最大的优点就是速度很快。Tomcat社区推建用AJP113协议做为worker的通迅协议,因此用它的worker被称之为AJP13 worker。 jni,这种类型的woker已经不被推荐使用 lb,为负载器的worker。 stauts, jkstatus,进入页面察看负载均衡信息
host: 默认值为localhost 设置worker主机的ip
prot:默认值为8009 设置worker主机的连接端口号(本例用的AJP协议,此端口号在server.xml中的Connector标签中定义)
socket_timeout:默认为0 设置JK与远程服务器的Socket连接超时秒数,如果超出此秒数则产生一个错误,并再次重试。如果为0,JK会一直等下去。
socket_connect_timeout:默认为socket_timeout*1000 以毫秒数为单位的socket_timeout
socket_keepalive:默认为False 防止防火墙切断不在使用的连接,通过设置为True,通知操作系统向不在使用的连接发送KEEP_ALIVE消信。
ping_mode: 此属性判断以什么方式判断Tomcat是否可用,目前实现是向服务器发送AJP13的空包(CPing)并且在指定时间内收到适当的响应(CPong),超时首先参考connect_timeout,如果没有则参考ping_timeout。一共提供四种判断心跳的方法: C(connect):在一个连接(连接是被复用的)生成前仅检验一次。 P(prepost):每次请求前都会判断服务是否可用 I(interval):在时间间隔周期性的判断服务是否可用 A:以上所有的组合
ping_timeout:默认为10000 毫秒单位,用来做CPong的超时
connection_ping_interval:默认为0 / (ping_timeout/1000)*10 ping_mode中所使用的时间间隔
connection_pool_size: 为了提高与Tomcat通迅的性能,JK会维护多个长连接做为一个池。它被用来设置每个WebServer(Apache)子进程的最大连接数。注意,Apache2.x 在prefork模式下 或 Apache1.3.x 环境下不要此属性的值超过1。目前最新的2.2版apache Linux编译后,FC测试默认是prefork模式。
connection_pool_minsize:默认值(connection_pool_size 1)/2 连接池中维护最小的连接数。注意,Apache2.x 在prefork模式下 或 Apache1.3.x 环境下不要此属性的值超过1。目前最新的2.2版apache Linux编译后,FC测试默认是prefork模式。
connection_pool_timeout:默认值0 在连连池中维护的非活动连接连续多少秒后被释放。如果为0,则不释放。
connection_acquire_timeout:默认值retries*retry_interval 获取接连的超时
lbfactor: 负载权重,值越高被分发请求的概率越大。
负载器属性: balance_workers: 逗号分隔的worker列表
sticky_session:默认值True 负载喷发采用Session粘贴机制,按SessionID喷发请求。为了保障同一SessionID的请求被分发到同一台服务器上。
sticky_session_force: 默认值为Flase 如果为True, SessionID并不合法时则返回500错误,否则,丢掉Session并转发到另外的机器上
good:默认值 a.o,a.n,a.b,a.r 负载器管理的worker有三个状态:“good”,“bad”和“degraded”,这些状态被时时临控。 你可以自定义good的属性值列表,每个值都是单字母或两个字母中间加点“.”的格式。 以下单词的首字母做为值列表的值:“active”,“disabled”,“stopped”,“ok”,“na”,“busy”,“recovering”,“error”。如果仅用单字母组合的话,其中一个worker状态在此列表中出现,则负载器认为所有的成员都是健康的。如果用"a."组合的话,则负载器仅认为该成员是健康的。 实际上,负载器会首先查看bad属性,如果不匹配的话,才会查看good属性。
bad:默认值 s,e 参考good,默认是“stopped”,“error”才会匹配。
prefix: 默认值为 worker 所有状态的起始前缀
retries:默认值为 2 通迅失败的的重式次数
retry_interval: 默认值为100 每次重式的时间间隔,毫秒单位
session_cookie: 默认值为JSESSIONID SessioinID的Cookie值
下面介绍一下 JkMount 的配置
第一种情形:部分静态页面需要apache处理,不转发给后端的tomcat
JkMount /* router ###默认将所有请求转发给tomcat处理 JKUnmount /*.php router ###php请求不交给tomcat处理 JKUnmount /*.htm router ###htm请求不交给tomcat处理 JKUnmount /*.html router ###html请求不交给tomcat处理
JKUnmount /css/* router ###css请求不交给tomcat处理 JKUnmount /js/* router ###js请求不交给tomcat处理
JKUnmount /image/* router ###image请求不交给tomcat处理
第二种情形:将所有请求转发到后端tomcat之后,将不同路径定位给不同的tomcat
JkMount /* router
JkMount /login/* tomcat1
JkMount /shop/* tomcat2
JkMount /buy/* tomcat3
注意,这种情形下,必须要有这样的处理:
worker.list=router,jkstatus,tomcat1,tomcat2,tomcat3
如果是第一种情形,tomcat1,tomcat2,tomcat3是不需要写在上面这个地方的
而是写在下面:
worker.router.balance_workers=tomcat1,tomcat2,tomcat3
实际使用中,应该是上述两种情形相结合使用的较多,将静态内容交给apache处理,然后将动态内容分布到不同的服务器上。
JkMount把匹配的转发到指定服务器. JkUnMount把匹配的不转发到指定服务器. JkUnMount选项的级别高于JkMount. 单独有JkMount规则有效,但单独有JkUnMount无效,JkUnMount与JkMount要成对出现.