1 集概念
集(Cluster)是一组计算机节点的集合,它们作为一个整体向用户提供一组网络资源。一个理想的集对用户是透明的。用户由单一入口访问集的资源,从来不会意识到集中的节点。在他们看来,集是一个系统,而非多个计算机系统。集还应该支持随意增加和减少集系统的节点,而这同样不会影响到用户的访问。
1.1 集分类
习惯上,把集分为高可用(High Availability,简称HA )集和高性能计算(High Perfermance Computing,简称HPC )集两类。
1) HA集的目标是提高系统的可使用性 (availability),即可靠性 (reliability)和可维护性 (maintainability)。请不要将集中的可使用性(availability)与UE和交互设计中的可用性(Usability)混淆。HA集的核心是防止单点失效,这一般是通过失败转移来实现的,即在一个节点失效后由另一个节点接替服务。不丢失用户状态。HA集的其他主要特性还包括负载均衡、session同步等。我们使用的SQL Server数据库的双机热备和Oracle的RAC都属于HA集。
2) HPC集 采用并行计算技术提供超大规模计算和存储能力,多数超级计算机都是HPC集。这不是我们关注的集。
1.2 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集)的关键。
1.2.1 Jboss版本的选择
目前,Jboss主要有3、4、5三个版本系列。
1) Jboss 5目前只有2个beta版,实用尚需时日。
2) Jboss 3的最后版本是2006年3月更新的3.2.8.SP1。随着Jboss 4日益成熟和Jboss 5的开发,已经停止更新1年多的Jboss 3逐渐淡出历史舞台。
3) Jboss 4最新版本依次是4.2.1.GA、4.2.0.GA和4.0.5.GA。但提供的Jboss集文档只更新到4.0.5 GA
4) Jboss各版本的安装和配置并不相同.不但Jboss 3和Jboss 4的配置文件完全不同,各小版本间也有细微的差别.在集中,Jboss、apache、mod_jk之间也存在着特定版本才能配合的情况。
1.2.2 mod_jk版本的选择
注意,mod_jk有1.x和2.x两个版本系列。mod_jk 2.x已经停止开发,不能使用。 很多人凭直觉认为mod_jk 2.x肯定比mod_jk 1.x好,结果走了弯路。
1.3 负载均衡的粒度
Jboss 支持如下类型的cluster:EJB、web、JNDI、JMS,我们主要了解web cluster。Web cluster实际上可以划分为两个话题:负载均衡 (load balance) 和状态同步。它们是互相独立的,单独配置。负载均衡的概念比较简单,重要的是负载均衡的粒度。可以选择针对每个request的均衡,或者是针对每个用户的均衡。选择不同的粒度,需要不同的状态同步方式。
1.3.1 基于request的负载均衡
该种方式下,负载均衡器 (load balancer)会根据各个node的状况,把每个http request进行分发。使用这样的均衡策略,就必须在多个node之间复制用户的session,实时保持整个cluster的用户状态同步,这种操作被称为session复制(session replication)。Jboss的实现原理是使用(interceptor),根据用户的同步策略拦截request,做同步处理后再交给server产生响应。
该方法的优点是客户不会被绑定都具体的node,只要还有一个node存活,用户状态都不会丢失,cluster都能够继续工作。缺点是node之间通信频繁,响应速度有影响,多并发、高频操作的情况下性能下降比较厉害。
1.3.2 基于用户的负载均衡
该种方式下,当用户发出第一个request后,负载均衡器动态的把该用户分配到某个节点,并记录该节点的jvm路由,以后该用户的所有request都会被绑定这个jvm路由,用户只会与该server发生交互,这种策略被称为粘性session(session sticky)。该方法的优点是响应速度快,多个节点之间无须通信。缺点也很明显,某个node死掉以后,它负责的所有用户都会丢失session。
粘性的session依赖JVM来实现, 只要session开始工作,那么负载均衡将永远把相同的session存放于同一个机器上, 举个例子来说,有一个ID为aaaXXX的session永远放在A机器的JVM-A上, 而bbbXXX的session用于放在B机器的JVM-B上。
使用这种技术的是比较可靠的, 如果A机器宕机, 则可以从B机器上取得我们需要的session, 而使用者并无从查觉,另外使用粘性session是高效率的,只有session发生变更时才需要重写到服务器。
每个用户会绑定都某个节点上进行交互。这种绑定是如何完成的呢?原来apache把客户分发
到节点后,该节点会在用户的session id后面加上此节点的路由名称,变成这个样子:Efdfxxd98daja87daj76da2dka**,server1有了这个标志,就能分辨该session属于哪个节点
2 软件下载
session下载2.1 下载、安装Apache2.2.17
地址:/i
下载的文件:httpd-2.2.17-win32-x86-no_ssl.msi
下载之后直接安装,步骤很简单,下一步即可。
验证 Apache安装成功,可以浏览: localhost,看到下面的“It works”页面就算成功
2.2 下载mod_jk-1.2.30
地址:/dist/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.30/
下载的文件名:mod_jk-1.2.30-httpd-2.2.3.so
注意mod_jk 与apache 服务器的版本必须匹配,下面是从下载页面拷来的说明,清楚的说明了它们之间的匹配关系。
mod_jk-1.2.30-httpd-2.2.3.so is for Apache It has been build against version 2.2.3, but should work with Apache 2.2.0 and later. Rename to mod_jk.so before putting it in your Apache2.2/modules directory or adjust your LoadModule statement.
mod_jk-1.2.30-httpd-2.2.0.so is for Apache It has been build against version 2.0.53, and should work with Apache 2.0.53 and later. Rename to mod_jk.so before putting it in your Apache2.0/modules directory or adjust your LoadModule statement.
3 集成配置
3.1 Apache+mod_jk设置
3.1.1 改变Apache 端口号
因为默认的80端口经常是被占用的,所以我改成了8081,当然也可以不改,修改方式如下:文件路径:D:\Program Files\Apache Software Foundation\Apache2.2\conf\ f  到这一行:Listen 8081
也需要配置一下ServerName,如果没有配置在mod_jk.log里会报错,同样在上面的文件中到这行改为:ServerName localhost:8081
3.1.2 拷贝mod_jk-1.2.30-httpd-2.2.3.so
将上面下载的mod_jk-1.2.30-httpd-2.2.3.so文件拷贝到D:\Program Files\Apache Software Foundation\Apache2.2\modules目录下,因为在配置文件中要求引用这个文件,所以我们改一个简单的名叫mod_jk.so
3.1.3 在f增加载入mod_jk配置
在上面提到f文件中增加:LoadModule jk_module modules/mod_jk.so 根据测试这行不加也行,可能是因为在f文件已经有了这个引用。
在上面提到f文件中增加:include conf/f
3.1.4 新建mod_jk配置文件f
在在上面提到f文件中增加:include conf/f 配置,所以需要在D:\Program Files\Apache Software Foundation\Apache2.2\conf\文件夹下新建一个f文件,其内容如下:
# Load mod_jk module
  # Specify the filename of the mod_jk lib

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。