负载均衡集群是由两台或者两台以上的服务器组成。分为前端负载调度和后端服务两个部分。负载调度部分负载把客户端的请求按照不同的策略分配给后端服务节点,而后端节点是真正提供营养程序服务的部分。与双机热备不同的是,负载均衡集群中,所有的后端节点都处于活动动态,它们都对外提供服务,分摊系统的工作负载。
负载均衡集群可以把一个高负荷的应用分散到多个节点共同完成,适用于业务繁忙、大负荷访问的应用系统。负载均衡集群的一大优点除了将大负荷进行分摊解决性能问题之外,他还有极强的出错互补机制,每一个提供服务的节点在出现问题之后宕机之后,调度系统都会自动将这台宕机机器剔除,当该节点重新启动恢复功能之后,调度系统又会将其加入到集群中,而这一切,对用户来说是完全透明的。下图显示的就是负载均衡集群的基本结构。
说完集群的基本原理和结构之后我们来搭建一个JBoss集群,主要分为以下几个步骤:
一、 准备所需组件:
a) Apache服务器。我选用的是apache_2.2.3-win32-x86-no_ssl.msi
b) mod_jk-apache-2.2.3.so文件。该文件的作用是起分发作用
c) JBoss服务器。我用的JBoss服务器是JBOSS 5.1.0GA
二、 安装安装服务器。
a) 安装Apache服务器(建议选非系统盘)。安装好后将下载好的mod_jk-apache-2.2.3.so文件复制到%APACH_HOME%/modules文件夹下。
b) 安装JBoss比较简单,直接将压缩包解压至相应的安装位置即可。
三、 修改相关配置文件。
a) 在Apache安装路径下找到conf文件夹,在该文件夹中找到httpd.conf文件,在该文件的最后位置添加Include conf/mod_jk.conf。
b) 在conf文件夹下新建mod_jk.conf文件,内容如下:
LoadModule jk_module modules/mod_jk-apache-2.2.3.so
# Where to find workers.properties
JkWorkersFile conf/workers.properties
# where to find the log file
JkLogFile logs/mod_jk.log
# set the log level set the log level
JkLogLevel info
# map to the status server
JkMount /private/admin/mystatus mystatus
# router the request to the right host
JkMount /* balance
(c)同样是在conf文件夹中新建workers.properties文件,文件内容为:
# define list of workers that will be used
# for mapping requests
worker.list=balance,mystatus
# Define Node1
worker.node1.port=11009
worker.node1.host=192.168.24.246
worker.node1.type=ajp13
worker.node1.lbfactor=1
worker.node1.socket_timeout=30
worker.node1.socket_keepalive=1
# Define Node2
worker.node2.port=12009
worker.node2.host=192.168.24.247
worker.node2.type=ajp13
worker.node2.lbfactor=1
worker.node2.socket_timeout=30
worker.node2.socket_keepalive=1
# Define Node3
worker.node3.port=13009
worker.node3.host=192.168.24.245
worker.node3.type=ajp13
worker.node3.lbfactor=1
worker.node3.socket_timeout=30
worker.node3.socket_keepalive=1
# Load-balancing behaviour
worker.balance.type=lb
worker.balance.balance_workers=node1,node2,node3
worker.balance.sticky_session=1
# Status worker for managing load balancer
worker.mystatus.type=status
该文件用于定义服务器节点,在该文件中我定义了三个节点,node1,node2,node3,也就意味着在我的jboss集群中有三台jboss服务器对外提供服 务。如上内容中host表示jboss服务器所在的电脑的IP,port为jboss服务器AJP所监听的端口号,lbfactor表示该服务器节点在该集群中的权重,该值越大,Apache服务器将请求分发至该台JBoss上的几率越大。
e)在部署Web应用时,需要在应用程序的web.xml中加入<distributable/>节点,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>Welcome to JBoss</display-name>
<description>
Welcome to JBoss
</description>
<distributable/>
</web-app>
至此Apache服务器和各Jboss节点服务器配置完毕,顺序启动Apache和各个Jboss节点,在浏览器中输入http://192.168.24.245:8011/aaa.war进行访问,我们可以看到自己定义的访问页面(各Jboss节点中部署的aaa.war包中的index.jsp页面里的内容不一样来做区分),进行刷新可以看到Apache在不断的进行切换。