JBoss6+apache httpd-2.2.21集群配置
写本教程的动机
本人从事多年javaEE开发和项目管理工作但配置集群服务器机会并不多今天有兴致想实现JBoss集群服务器说干就干。在网上找了很多资料发现都是JBoss4.x的配置示例不适用现在主流的JBoss6.x和7.x有一些区别 自己摸索许久才配置成功希望对有此需求的人有所帮助。
本案例是在win8下测试通过但在l inux环境下的配置也是一样的。本案例并非从网上复制粘贴之作是通过本人精心测试通过的如有错误之处请多谅解
注理论是从网上抄下来的是必须读的不然就不知道为什么
云动xietaijun@al iyun.com 2013.6.25
1.集群概念
集群(Cluster)是一组计算机节点的集合它们作为一个整体向用户提供一组网络资源。一个理想的集群对用户是透明的。用户由单一入口访问集群的资源从来不会意识到集群中的节点。在他们看来集群是一个系统而非多个计算机系统。集群还应该支持随意增加和减少集群系统的节点而这同样不会影响到用户的访问。
1.1.集群分类
习惯上把集群分为高可用(High Avai labi l ity 简称HA )集群和高性能计算(HighPerfermance Computing简称HPC)集群两类。
1) HA集群的目标是提高系统的可使用性(avai labi l ity),即可靠性(rel iabi l ity)和可维护性(maintainabi l ity) 。请不要将集群中的可使用性(avai labi l ity)与UE和交互设计中的可用性(Usabi l ity)混淆。 HA集群的核心是防止单点失效这一般是通过失败转移来实现的 即在一个节点失效后由另一个节点接替服务。不丢失用户状态。 HA集群的其他主要特性还包括负载均衡、 session同步等。我们使用的SQL Server数据库的双机热备和Oracle的RAC都属于HA集群。
2) HPC集群采用并行计算技术提供超大规模计算和存储能力多数超级计算机都是HA集群。这不是我们关注的集群。
1.2. Jboss集群架构
Jboss集群是HA集群。Jboss集群有2种架构。一是客户端拦截器(Cl ient-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.3.负载均衡的粒度
Jboss支持如下类型的cluster EJB、web、 JNDI、 JMS我们主要了解web cluster。Webcluster实际上可以划分为两个话题负载均衡(load balance)和状态同步。它们是互相独立的单独配置。负载均衡的概念比较简单重要的是负载均衡的粒度。可以选择针对每个request的均衡或者是针对每个用户的均衡。选择不同的粒度需要不同的状态同步方式。
1.3.1.基于re q ue st的负载均衡
该种方式下负载均衡器(load balancer)会根据各个node的状况把每个http request进行分发。使用这样的均衡策略就必须在多个node之间复制用户的session实时保持整个cluster的用户状态同步这种操作被称为session复制(session repl ication)。 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存放于同一个机器上举个例子来说,有一个I D为aaaXXX的session永远放在A机器的JVM-A上而bbbXXX的session用于放在B机器的JVM-B上。
使用这种技术的是比较可靠的如果A机器宕机则可以从B机器上取得我们需要的session而使用者并无从查觉另外使用粘性session是高效率的只有session发生变更时才需要重写到服务器。
每个用户会绑定都某个节点上进行交互。这种绑定是如何完成的呢原来apache把客户分发到节点后该节点会在用户的session id后面加上此节点的路由名称变成这个样子Efdfxxd98daja87daj76da2dka**,server1有了这个标志就能分辨该session属于哪个节点。
2. Apache配置
2.1下载apache和mod_jkapache下载地址 http://httpd.apache.org/download.cgi
本案例使用的版本 httpd-2.2.21-win32-x86-openssl-0.9.8r.msimod_jk下载地址http://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/windows/本案例使用的版本 tomcat-connectors-1.2.37-windows-i386-httpd-2.2.x.zip
重要提示apache httpd的版本和mod_jk的版本要一致例如在本例中httpd的版本是2.2.21所以对应的mod_jk版本也使用了对应2.2.x的版本。
2.2安装apache
建议将apache安装到非系统盘本示例安装到D:\Apache2.2目录下因为如果安装到
C:\Program Fi les (x86)下时修改或新建文件时需要管理员权限非常麻烦。安装很简单一直下一步提示输入域名时输入127.0.0.1安装完了之后会自动注册成为windows服务在右下角的任务栏上可以看到控制器可以启动/停止/重启服务器。
启动服务之后在浏览器中输入http://localhost回车看到“It works!”表示服务器启动成功默认端口是80。
2.3 mod_jk布署
解压tomcat-connectors-1.2.37-windows-i386-httpd-2.2.x.zip文件将其中的mod_jk.so文件复制到d:\Apache2.2\modules目录下。
2.4修改和新建配置文件重点
修改d:\Apache2.2\conf\httpd.conf文件增加如下两行代码
LoadModulejk_module modules/mod_jk.so
Include conf/mod_jk.conf
在d:\Apache2.2\conf\目录下新建如下三个文件mod_jk.confworkers.propertiesuriworkermap.propertiesm o d_j k.co n f文件内容
----------------------------------------------------------------------------
#Loadmod_jk module
#Specifythefi lename of the mod_jkl ib
LoadModulejk_module modules/mod_jk.so
#Where tofind workers.properties
JkWorkersFi le conf/workers.properties
#Whereto putjk logs
JkLogFi le logs/mod_jk. log
#Set thejk log level [debug/error/info]
JkLogLevel i nfo
#Selectthe log format
JkLogStampFormat "[%a%b%d%H:%M:%S%Y]"
#JkOptionsindicatestosendSSK KEYSIZE
JkOptions+ForwardKeySize+ForwardURICompat -ForwardDirectories#JkRequestLogFormat
JkRequestLogFormat "%w%V%T"
#Mountyourappl ications
JkMount/* loadbalancer
#Youcan use externalfi lefor mount points.
#Itwi l l becheckedforupdateseach60 seconds.
#Theformatof the fi le is:/url=worker
#/examples/*=loadbalancer
JkMountFi le conf/uriworkermap.properties
#Add shared memory.
#This directive is presentwith 1.2.10and
#laterversions of mod_jk,and is neededfor
#for load balancingtoworkproperly
JkShmFi le logs/jk.shm
#Addjkstatusformanaging runtimedata
<Location/jkstatus/>
JkMount status
Order deny,al low
Denyfromal l
Al lowfrom 127.0.0.1
</Location>
----------------------------------------------------------------------------
这里的JkMount/* loadbalancer的意思是所有的请求都有loadbalancer来处理负载均衡。workers.properties文件内容
#Define l ist of workersthatwi l l be used
#for mapping requestsworker. l ist=loadbalancer,status
#Define node1
#modifythe hostasyourhost IPorDNSname.worker.node1.port=8009worker.node1.host=127.0.0.1worker.node1.type=ajp13worker.node1. lbfactor=1worker.node1.cachesize=10
#Load-balancing behaviourworker. loadbalancer.type=lbworker. loadbalancer.balance_workers=node1worker. loadbalancer.sticky_session=1
#worker. l ist=loadbalancer
#Statusworkerformanaging load balancerworker.status.type=status
----------------------------------------------------------------------------
这里的worker. l ist指定哪些worker是可用的。node1是自定义的名称但要与后面的jboss的配置文件对应。一个node就是一个服务器这里为了示例只配置了一个服务器。如果您有第二个服务器可以配置一个node2例如worker.node2.port=8009worker.node2.host=192.168.0.155worker.node2.type=ajp13worker.node2. lbfactor=1worker.node2.cachesize=10
然 后 在 worker. loadbalancer.balance_workers 后 面 加 入 node2 即 可 worker. loadbalancer.balance_workers=node1,node2
对于node的命名规则是worker.节点名.xxxx。所以上述文件定义了两个节点 node1和node2。所有需要负载均衡的节点都必须在worker. loadbalancer.balanced_workers参数中列举出来。worker. loabalancer.sticky_session=True表示当前使用的粘连session要知道粘连session的具体情况可以查看1.3.2worker. loadbalancer.sticky_session_force=False表示如果与用户绑定的server连接不上时自动转向别的server。sticky_session=true表示某个请求始终由当前Tomcat处理不会转移到其他Tomcat上。sticky_session_force=false表示当前Tomcat挂掉的时候 自动将Session复制到其他Tomcat上。如果将sticky_sessio n_force设置为true当你关闭一台Tomcat并刷新网页将得到503错误。但设置为fa lse关闭一台Tomcat并刷新网页被关闭的那台Tomcat上的Session会被自动复制到其他Tomcat上系统继续正常运行。uriworkermap.properties文件内容
此文件内容可以为空根据需求可以加入类似如下代码
#所有请求都由loadbalancer这个server处理
/*=loadbalancer
#所有包含jkstat us请求的都由stat us这个se rve r处理
#/jkstatus=jkstatus
#这里的"!”是“非”的意思。
/*.gif=loadbalancer
/*.jpg=loadbalancer
/*.png=loadbalancer
/*.css=loadbalancer
/*.js=loadbalancer
/*.htm=loadbalancer
/*.html=loadbalancer
配置到此请重新启动apache服务器点击任务栏上的服务器能够正常启动说明到此处的配置是成功的。如果服务器启动失败请按上诉步骤重试。apache重启成功之后在浏览器中访问 http://localhost 回车 如果提示“ServiceTemporari ly Unavai lable”说明配置是成功的。因为我们已经让apache变成了分发服务器将请求分发给了jboss服务器但jboss服务器我们还没有配置。
3. JBoss配置
JBoss下载地址 http://www.jboss.org/jbossa s/downloads
本案例使用的版本 jboss-as-distribution-6.0.0.Final .zip
3.1安装J B os s
JBoss不需要安装 只需将zip文件解压到一个目录即可。本示例解压到
D:\jboss-6.0.0.Final目录下。 JBoss的默认端口是8080。
3.2修改配置文件
修改D:\jboss-6.0.0.Final\server\al l\deploy\jbossweb.sar\server.xml文件
将<Engine name="jboss.web" defaultHost="localhost">改为<Engine name="jboss.web"defaultHost="localhost" jvmRoute="node1"> node1是在workers.properties文件中定义的第一个负载均衡服务器。
修改D:\jboss-6.0.0.Final\server\al l\deploy\jbossweb.sar\META-INF\jboss-beans.xml文件增加如下代码
<property name="useJK">true</property>
<property name="useSessionPassivation">true</property>
<property name="passivationMaxIdleTime">-1</property>
<property name="passivationMinIdleTime">-1</property>
3.3 启动Jboss集群
先启动负载均衡器apache然后启动各JBoss节点。各jboss节点的启动顺序没有要求。双击D:\jboss-6.0.0.Final\bin\run.bat即可启动JBoss服务器。
此时在浏览器中输入http://localhost回车我们发现显示的是JBoss的欢迎界面。因为
Apache负责将请求分发到各个JBoss服务器实际访问的是JBoss服务器中部署的项目。
速云怎么样?速云是一家国人商家。速云商家主要提供广州移动、深圳移动、广州茂名联通、香港HKT等VDS和独立服务器。目前,速云推出深圳独服优惠活动,机房为深圳移动机房,购买深圳服务器可享受5折优惠,目前独立服务器还支持申请免费试用,需要提交工单开通免费体验试用,次月可享受永久8折优惠,也是需工单申请哦!点击进入:速云官方网站地址活动期限至 2021年7月22日速云云服务器优惠活动:活动1:新购首月可...
Dataideas是一家2019年成立的国外VPS主机商,提供基于KVM架构的VPS主机,数据中心在美国得克萨斯州休斯敦,主机分为三个系列:AMD Ryzen系列、Intel Xeon系列、大硬盘系列,同时每个系列又分为共享CPU和独立CPU系列,最低每月1.5美元起。不过需要注意,这家没有主页,你直接访问根域名是空白页的,还好他们的所有套餐支持月付,相对风险较低。下面以Intel Xeon系列共...
LOCVPS发来了新的洛杉矶CN2线路主机上线通知,基于KVM架构,目前可与香港云地、香港邦联机房XEN架构主机一起适用7折优惠码,优惠后最低美国洛杉矶CN2线路KVM架构2GB内存套餐月付38.5元起。LOCPVS是一家成立较早的国人VPS服务商,目前提供洛杉矶MC、洛杉矶C3、和香港邦联、香港沙田电信、香港大埔、日本东京、日本大阪、新加坡、德国和荷兰等机房VPS主机,基于KVM或者XEN架构。...