首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

AS7群集配备

2012-08-14 
AS7群集配置AS7的群集功能,从大的框架上来讲承袭沿用以往版本的设计,核心仍是基于JGroup。因此如果对以往JB

AS7群集配置
AS7的群集功能,从大的框架上来讲承袭沿用以往版本的设计,核心仍是基于JGroup。因此如果对以往JBoss AS的群集功能使用比较熟悉的话,会觉得AS7的群集并不难上手。

但从细节角度来讲,AS7的群集功能设计有了多方面改进:首先是简化了配置文件,实现单点式配置;此外,AS7中引入了域的概念,通过域对群集内各主机实现了统一配置部署。本文详细介绍AS7下群集的使用方法。

阅读本文之前,必须先了解AS7中域的概念,可参考这篇文章:



这三个组件都是构成AS7群集的要素:

* JGroup用与群集中多AS服务器之间的通信和连接。有关JGroup的详细配置,需要对JGroup本身有一个了解,本文不详细展开这一块。
* Infinispan从AS7开始,开始代替JBoss Cache承担缓存的功能
* modcluster负责Apache HTTPD与AS群集的连接工作。通过HTTPD作为前端,为用户提供一个统一的群集访问点,后面负责将负载分担至群集内各节点。

有关Infinispan可以多说几句:这个项目的引入是AS7的亮点之一,有兴趣可以去它的项目网站上进行深入的了解:



可以看到,这个other-server-group使用了ha这个配置方案,并在协议层绑定至ha-sockets。

因此通过以上分析,如果我们想使用AS7提供的群集功能,在默认情况下,将项目部署至other-server-group这个服务器组即可。接下来是实际操作的过程:

首先保证你已经按照文章一开始说的,根据这篇文章:



注意到在server-groups之中,有一个名为“other-server-group”的服务器组,默认使用ha配置方案,并且绑定至ha-sockets。部署在这个服务器组中的项目,将可以组建群集。

此外还有一点配置需注意,在master和slave的host.xml中,要为使用other-server-group的主机使用相同的端口offset。下面分别是master和slave中host.xml的相关配置。首先是master的配置:



然后是slave中的host.xml配置:



这里的重点是master和slave的端口port-offset都设定为250。因为我们要用这两台主机组建一个群集,如果两个主机服务于不同的端口,那么将会在后续两台主机分担请求时造成不必要的麻烦。此外,在本文中后续我们将使用mod_cluster来将用户请求分派至JBoss AS群集内各节点,而mod_cluster需要群集内各JBoss AS节点服务于相同端口,才能保证正确地将请求分派。

下面再多说几句关于host.xml中的server的port-offset的问题。为什么我们要设置port-offset呢?因此AS7支持同时运行多服务器,并且不同的服务器可以运行于不同的服务器组,这有点类似于Apache HTTPD中虚拟主机的概念,运行一个服务器,可以服务于多个域名,跑很多项目。

因此,如果AS同时跑着多个服务器,为避免端口冲突,就需要使用port-offset将不同的服务器置于不同的端口之下。比如:



类似上面这样的配置,有三个服务器,第一个服务器绑定于默认设置的端口上,第二个服务器offset为150,第三个为250。那么,如果默认的服务端口号为8080,那么第二个服务器就是8080+150 = 8230,第三个则服务于8080+250 = 8330端口,其它各服务端口依此类推。

通过使用offset配置,大大减少了重复的配置。AS7将所有端口的设置置于domain.xml的配置之中:



通过在domain.xml的socket-binding-groups中设置好服务的端口号,再在host.xml中配合port-offset的设置,就实现了多服务器的集中管理,简化了配置工作。

熟悉了端口配置后,我们就可以开始进行实际的群集实验了,好玩的部分开始了!

实验

和《JBoss AS7中的新概念-域》中介绍的一样,我们还是用两台主机做实验,域控制器为master,此外还有一台域内主机slave。

然后我们创建一个测试用的项目,这个项目应该包含Session的群集复制。在web.xml中添加这样一行就可以开启session的群集复制了:



注意到auto-start=true,那么两台主机启动时,你可以看到群集组建的日志(因此server-three的服务器组为other-server-group,而如前所述,other-server-group使用了群集配置方案):

master上面的日志:



如果没有什么问题的话,通过域控制器,这个项目就被同时部署到master及slave上面了。

我们可以试着分别访问群集内两个节点主机,注意到我们在host.xml配置server-three端口的offset为250,因此两个节点服务于8080+250=8330端口:





可以看到,群集内两个节点都跑起来了。我们接下来要使用这个群集,让它们承担负载平衡及并提供HA高可用。在这一点上,有多种方案可以选择,比如基于硬件的群集控制器,基于协议层的LVS,或是nginx来分发请求至群集内的两个节点。

但是AS7默认支持mod_cluster的方式是最方便的,mod_cluster也针对AS7做了很多优化工作,支持开箱即用,不需要很复杂的配置,因此本文下面将基于mod_cluster来讲解群集的使用方法。

使用mod_cluster来使用JBoss AS7群集进行负载平衡

mod_cluster使用Apache HTTPD做为群集控制服务器,用户访问httpd提供的服务端口,然后由mod_cluster负责把请求转给后端的AS7内群集各节点。

mod_cluster的负载平衡计算策略是十分智能的,它通过监控群集内各服务器的性能使用情况,把请求按需进行分配。有关mod_cluster的详细配置策略,可参考:



可以看到已经正确将请求分发给群集节点了。

使用mod_cluster来使用JBoss AS7群集进行HA

接下来我们试试群集的高可用, 我们这里要用到cluster-demo项目。下面是实验方案:

* 在master上面访问cluster-demo项目的put.jsp,设置一个session。
* 断掉master服务。
* 访问群集,访问get.jsp
* 预期结果:用户的请求被转到slave,并且session的数据没有丢失。

接下来是实际操作:

首先访问master的put.jsp:



然后我们将master的AS7服务器停掉,这时候slave上面的AS7开始报错:



会发现服务仍然可用,并且session数据没有丢失。但查看slave的日志,发现请求实际由slave承担了。整个实验实现了我们的预期。

此时,将master重新启动,发现master发现了slave,并重新接管域管理的工作。mod_cluster也发现了master并将其加入了群集节点,一切都是自动化的。

小结

通过上面的讲述,相信你已经初步了解了AS7的群集使用方法。在这个基础上,可以进一步学习mod_cluster,JGroup,Inifinispan等各部件的详细使用方法,从而定制出符合业务目的群集。




热点排行