高并发,高可用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值
分享:
喜欢
0
赠金笔
加载中,请稍候......
评论加载中,请稍候...
发评论
登录名: 密码: 找回密码 注册记住登录状态
昵 称:
评论并转载此博文
发评论
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。