Jboss4集配置
2007-10-10 10:33
1.前言
2006年,Jboss公司被Redhatlinux安装jdk rpm安装公司收购了。这直接导致Jboss产品结构调整,并将以前收费的Jboss AS文档改为免费。淘金吧本次集试验的最初依据就是由此得到的Jboss 4.0.5集配置文档。
但这份官方文档并不可靠,在一些关键配置上含混不清,而且夹杂了很多适用于过去版本、现已作废的Jboss集配置内容。这导致本次jboss集配置试验很大程度上是依靠猜测和反复尝试完成的。究其原因,是因为Jboss的集特性尚处于发展之中,Jboss开发者还在不停地修改、完善、增加特性,版本间的变化很大,文档的更新速度和质量难以保证。所以,淘金吧提醒各位对官方文档要认准版本,只可参考,切忌尽信.切切.
2.集知识
集概念
集(Cluster)是一组计算机节点的集合,它们作为一个整体向用户提供一组网络资源。一个理想的集对用户是透明的。用户由单一入口访问集的资源,从来不会意识到集中的节点。在他们看来,集是一个系统,而非多个计算机系统。集还应该支持随意增加和减少集系统的节点,而这同样不会影响到用户的访问。
集分类
习惯上,把集分为高可用(High Availability,简称HA)集和高性能计算(High Perfermance Computing,简称HPC)集两类。
HA集的目标是提高系统的可使用性(availability),即可靠性(reliability)和可维护性(maintainability)。请不要将集中的可使用性(availability)与UE和交互设计中的可用性(Usability)混淆。
HA集的核心是防止单点失效,这一般是通过失败转移来实现的,即在一个节点失效后由另一个节点接替服务。不丢失用户状态。HA集的其他主要特性还包括负载均衡、session同步等。我们使用的SQL Server数据库的双机热备和Oracle的RAC都属于HA集。
HPC集采用并行计算技术提供超大规模计算和存储能力,多数超级计算机都是HPC集。这不是我们关注的集。
Jboss集架构
Jboss集是HA集。
Jboss集有2种架构。一是客户端(Client-side interceptor)架构,一是负载均衡器(Load balancer)架构。
客户端架构适于用C/S结构,负载均衡器架构适用于B/S结构。本文只叙述负载均衡器架构的Jboss集。
负载均衡器架构由负载均衡器和n个集节点组成。每个节点是一个Jboss服务器实例。负载均衡器是全局唯一的前置机,全部用户请求都发到负载均衡器,由其转发到各节点。当负载均衡器发现一个节点失效后,会将请求转发到另一个节点上,从而保证服务得以延续。负载均衡器同时负责加权静态负载均衡调度。总之,负载均衡器的健康程度决定了集的全局健康度,负载均衡器失败将导致集全部失效。这是前置机架构集的主要潜在问题。
Jboss的负载均衡器架构集实际是由Tomcat的HTTP集实现的。Jboss有自己的负载均衡器,但效果不佳,官方文档没有介绍,几乎没有人使用。一般情况下,都是(淘金吧-站点推广)采用apache+mod_jk作为负载均衡器。下文叙述的都是基于这种架构。
mod_jk是apache的一个插件,负责apache与tomcat之间的通讯,是jboss集(tomcat集)的关键。
Jboss版本的选择
目前,Jboss主要有3、4、5三个版本系列。
Jboss 5目前只有2个beta版,实用尚需时日。
Jboss 3的最后版本是2006年3月更新的3.2.8.SP1。随着Jboss 4日益成熟和Jboss 5的开发,已经停止更新1年多的Jboss 3逐渐淡出历史舞台。
Jboss 4最新版本依次是4.2.1.GA、4.2.0.GA和4.0.5.GA。但提供的Jboss集文档只更新到4.0.5 GA,所以选择Jboss 4.0.5 GA实现Jboss集。
Jboss各版本的安装和配置并不相同.不但Jboss 3和Jboss 4的配置文件完全不同,各小版本间也有细微的差别.在集中,Jboss、apache、mod_jk之间也存在着特定版本才能配合的情况。所以,为避免困扰,请严格按照以下版本安装软件:
JDK 1.5.0.12
Jboss 4.0.5 GA
apache 2.2.4
apache mod_jk 1.2.23
注意,mod_jk有1.x和2.x两个版本系列。mod_jk 2.x已经停止开发,不能使用。很多人凭直觉认为mod_jk 2.x肯定比mod_jk 1.x好,结果走了弯路。
3.Jboss集配置实例概述
下文中,淘金吧 将以实例来叙述Jboss集配置。
该实例包含3个Jboss节点。各节点被动接收负载均衡器转发的请求。各节点间没有横向的联系。
4.Jboss集负载均衡器配置
步骤
先安装apache,然后配置mod_jk模块。
安装apache
下载apache代码包,上传到服务器。
解开代码包
tar xfvz httpd-2.2.
tar xfvz httpd-2.2.
编译
./configure –prefix=/usr/local/apache2 –enable-module=so –enable-module=setenvif –enable-module=rewrite –enable-rewrite=shared –enable-proxy=shared –with-mpm=prefork –enable-so –enable-auth-anon –enable-file-cache=shared –enable-cache=shared –enable-disk-cache=shared –enable-mem-cache=shared
./configure –prefix=/usr/local/apache2 –enable-module=so –enable-module=setenvif –enable-module=rewrite –enable-rewrite=shared –enable-proxy=shared –with-mpm=prefork –enable-so –enable-auth-anon –enable-file-cache=shared –enable-cache=shared –enable-disk-cache=shared –enable-mem-cache=shared
make clean
make
make install
make install
修改配置。本例中,淘金吧 使用的监听端口是8080,请根据实际情况修改。
vi /usr/local/apache2/f
将Listen 80改成Listen 8080
将User daemon和Group daemon改为User apache和Group apache
删除ServerName前的#,将该行改为ServerName 127.0.0.1:8888
vi /usr/local/apache2/f
将Listen 80改成Listen 8080
将User daemon和Group daemon改为User apache和Group apache
删除ServerName前的#,将该行改为ServerName 127.0.0.1:8888
添加用户和用户组
groupadd apache
useradd apache –g apache
groupadd apache
useradd apache –g apache
apache mod_jk配置
下载mod_jk,将其改名为mod_jk.so,拷贝到/usr/local/apache2/modules下。
顺便说一句,mod_jk模块费了很大精力,最后才在/dist/tomcat/to
mcat-connectors/jk/binaries/linux/目录下到。我用的是mod_jk 1.2.23,看到本文的时候,mod_jk应该有新版了。但mod_jk的向下兼容做得不太好,最好先用mod_jk 1.2.23调试,成功后再尝试换用新版mod_jk。
chmod +x /usr/local/apache2/modules/mod_jk.so
在/usr/local/apache2/f的末尾增加:
Include conf/f
Include conf/f
建立空文件/usr/local/apache2/conf/uriworkermap.properties
vi /usr/local/apache2/conf/f,输入以下内容:
# Load mod_jk module
# Specify the filename of the mod_jk lib
LoadModule jk_module modules/mod_jk.so
# Where to find workers.properties
JkWorkersFile conf/workers.properties
# Load mod_jk module
# Specify the filename of the mod_jk lib
LoadModule jk_module modules/mod_jk.so
# Where to find workers.properties
JkWorkersFile conf/workers.properties
# Where to put jk logs
JkLogFile logs/mod_jk.log
# Set the jk log level [debug/error/info]
JkLogLevel info
# Select the log format
JkLogStampFormat “[%a %b %d %H:%M:%S %Y]”
# JkOptions indicates to send SSK KEY SIZE
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
# JkRequestLogFormat
JkRequestLogFormat “%w %V %T”
# Mount your applications
JkMount /application/* loadbalancer
# You can use external file for mount points.
# It will be checked for updates each 60 seconds.
# The format of the file is: /url=worker
JkLogFile logs/mod_jk.log
# Set the jk log level [debug/error/info]
JkLogLevel info
# Select the log format
JkLogStampFormat “[%a %b %d %H:%M:%S %Y]”
# JkOptions indicates to send SSK KEY SIZE
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
# JkRequestLogFormat
JkRequestLogFormat “%w %V %T”
# Mount your applications
JkMount /application/* loadbalancer
# You can use external file for mount points.
# It will be checked for updates each 60 seconds.
# The format of the file is: /url=worker
# /examples/*=loadbalancer
JkMountFile conf/uriworkermap.properties
# Add shared memory.
# This directive is present with 1.2.10 and
# later versions of mod_jk, and is needed for
# for load balancing to work properly
JkShmFile logs/jk.shm
# Add jkstatus for managing runtime data
JkMount status
Order deny,allow
Deny from all
Allow from 127.0.0.1
JkMountFile conf/uriworkermap.properties
# Add shared memory.
# This directive is present with 1.2.10 and
# later versions of mod_jk, and is needed for
# for load balancing to work properly
JkShmFile logs/jk.shm
# Add jkstatus for managing runtime data
JkMount status
Order deny,allow
Deny from all
Allow from 127.0.0.1
vi /usr/local/apache2/conf/workers.properties,增加以下内容:
# Define list of workers that will be used
# Define list of workers that will be used
# for mapping requests
worker.list=loadbalancer,status
# Define Node1
# modify the host as your host IP or DNS name.
de1.port=8009
de1.host=192.168.130.95
pe=ajp13
de1.lbfactor=1
# Define Node2
# modify the host as your host IP or DNS name.
de2.port=8009
de2.host= 192.168.130.99
pe=ajp13
de2.lbfactor=0
# Define Node3
worker.list=loadbalancer,status
# Define Node1
# modify the host as your host IP or DNS name.
de1.port=8009
de1.host=192.168.130.95
pe=ajp13
de1.lbfactor=1
# Define Node2
# modify the host as your host IP or DNS name.
de2.port=8009
de2.host= 192.168.130.99
pe=ajp13
de2.lbfactor=0
# Define Node3
# modify the host as your host IP or DNS name.
de3.port=8009
de3.host= 192.168.130.112
pe=ajp13
de3.lbfactor=1
# Load-balancing behaviour
pe=lb
worker.loadbalancer.balance_workers=node1,node2,node3
worker.loadbalancer.sticky_session=1
#worker.list=loadbalancer
# Status worker for managing load balancer
pe=status
de3.port=8009
de3.host= 192.168.130.112
pe=ajp13
de3.lbfactor=1
# Load-balancing behaviour
pe=lb
worker.loadbalancer.balance_workers=node1,node2,node3
worker.loadbalancer.sticky_session=1
#worker.list=loadbalancer
# Status worker for managing load balancer
pe=status
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论