mysql tomcat高可用_高并发,高可用Tomcat集群 之Apache与JK喷发

高并发,高可用Tomcat集群 之Apache与JK喷发

(2011-04-16 17:30:24)

标签:

杂谈

我们在做Tomcat集群前,需要做好与之相合作的喷发器\连接器。

大多数的集群喷发器都是采用高性能的轻量级的WebServer,目前广泛被使用的如:Apache,Nginx,Lighttpd等。在Tomcat官方的社区中比较侧重对Apache的支持(废话~

>_

1,安装“JK”到你的Apache

你可以从这里下载:http://tomcat.apache.org/connectors-doc/

可以编译或直接下载编译后的Apache文件。

把相应的mod文件Copy到Apache配置的modules文件夹下。Apache必需是可以动态加载mod的模式,否则需要重新编译。

2,配置Apache的httpd.conf文件

Apache的httpd.conf文件中添加如下几行:

#加载mod_jk.so插件,必须确保此文件在modules中存在

LoadModule jk_module modules/mod_jk.so

#设置JK的配置文件

JkWorkersFile /etc/httpd/conf/workers.properties

#以下两行为日志文件,要确保系统中存在此目录

JkShmFile /var/log/httpd/mod_jk.shm

JkLogFile /var/log/httpd/mod_jk.log

#设置日志的级别为info

JkLogLevel info

#日志的时间格式

JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "

#所有/examples/为开头的请求全部发到loadbalancer中,

#loadbalancer在workers.properties中配置

JkMount /examples/* loadbalancer

3,JK的配置文件, workers.properties

在Apache配置通过后,还需要配制JK的负载详细信息, workers.properties文件信息如下:

#以worker为前缀做负载的设置

#list属性,可以自定义的以逗号分隔的Tomcat应用服务器的名称,

#唯一点需要注意的是要与server.xml文件中的Engine标签的jvmRoute属性对应,

#这样JK才能把请求分发到正确的Tomcat上

#最后一个loadbalancer为负载器的名称

worker.list=worker1,worker2,loadbalancer

#以下为worker2的属性

#设计与后面应用的连接协议为ajp13

worker.worker2.type=ajp13

#服务器IP或名称

worker.worker2.host=localhost

#ajp协议的端口号

worker.worker2.port=8009

#以下为worker1的配置与worker2一样

worker.worker1.type=ajp13

worker.worker1.host=localhost

worker.worker1.port=8010

#设置loadbalancer的类型为lb--负载器

worker.loadbalancer.type=lb

#它所包括的群为work1,work2两个应用服务器

worker.loadbalancer.balanced_workers=worker1,worker2

4,深入JK配置

以上就是最简单的JK配置文件,这做配置后,Apache就可以使用JK插件正确的把请求喷发到你所配置的worker1,worker2上了。

但其实往往工作中还需要更丝丝入扣的集群配置,以适应更加复杂的实际情况。我们接下来详细讨论各属性的配置及含义。

worker在JK中被认为是一个可以用来分发请求的服务器,Apache转发请求时做为可喷发的对象。我们所做的主要的是真对它的配置。

在介绍JK可配属性之前,先了解一下它的几个属性配置的小知识:

JK的属性设置格式如下:

worker.

name>.=

a,起始位置永远以worker为开头,

b,directive为指令名称,或称之为属性名称

c,等号后面为所要设置的值

当然,如果你愿意也可以在proerties文件中自定义变量,格式如下:

=

唯一要注意的一点是,变量名不要以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值

分享:

a4c26d1e5885305701be709a3d33442f.png喜欢

0

a4c26d1e5885305701be709a3d33442f.png赠金笔

加载中,请稍候......

评论加载中,请稍候...

发评论

登录名: 密码: 找回密码 注册记住登录状态

昵   称:

评论并转载此博文

a4c26d1e5885305701be709a3d33442f.png

发评论

以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值