- 浏览: 168877 次
- 性别:
- 来自: 北京
最新评论
-
ddnzero:
...
在JBoss AS7中进行项目部署 -
vivianivy:
请问这个集群方案能不能实现文件同步?
AS7群集配置 -
ndzj981479673:
jboss-admin.sh在哪里啊?我的bin目录下没有啊1 ...
JBoss AS7中的新概念-域 -
阿男bluedash:
582399232 写道我在启动域的master后启动slav ...
AS7群集配置 -
582399232:
我在启动域的master后启动slave,结果slave由于连 ...
AS7群集配置
这篇文档已经和最新版的JBoss EAP6和WildFly有出入了,建议参考我写的英文版的文档,会持续更新:https://community.jboss.org/wiki/AS7ClusterHowto
AS7的群集功能,从大的框架上来讲承袭沿用以往版本的设计,核心仍是基于JGroup。因此如果对以往JBoss AS的群集功能使用比较熟悉的话,会觉得AS7的群集并不难上手。
但从细节角度来讲,AS7的群集功能设计有了多方面改进:首先是简化了配置文件,实现单点式配置;此外,AS7中引入了域的概念,通过域对群集内各主机实现了统一配置部署。本文详细介绍AS7下群集的使用方法。
阅读本文之前,必须先了解AS7中域的概念,可参考这篇文章:
如果你按照上面的方法成功地配置好了AS7下的域模式,并成功地部署了一个项目至AS7的域,那么就可以继续阅读本文了。
如果你没看完上面的文章,并且没有进行动手实验,请不要继续阅读本文,否则只是浪费时间!
从AS7开始,群集配置被大大简化,并且当AS7运行在域控模式下时,群集默认是自发现,自启动的。虽然配置变得更为傻瓜,但我们仍需了解一些技术细节,从而可以理解AS7为我们提供的默认群集配置,并根据自己的需要进行配置调整。下面是详细讲解:
AS7的群集配置主要集中在域控制器的配置文件domain.xml里。在domain.xml中,默认有两个profile,一个是default,一个是ha:
其中,ha这个profile里面配置了群集的所需组件(ha的含义代表High Availability,高可用)。这其中主要包括JGroup,Infinispan和modcluster:
这三个组件都是构成AS7群集的要素:
* JGroup用与群集中多AS服务器之间的通信和连接。有关JGroup的详细配置,需要对JGroup本身有一个了解,本文不详细展开这一块。
* Infinispan从AS7开始,开始代替JBoss Cache承担缓存的功能
* modcluster负责Apache HTTPD与AS群集的连接工作。通过HTTPD作为前端,为用户提供一个统一的群集访问点,后面负责将负载分担至群集内各节点。
有关Infinispan可以多说几句:这个项目的引入是AS7的亮点之一,有兴趣可以去它的项目网站上进行深入的了解:
AS7利用Infinispan为多个模块提供缓存服务,包括:
* 为群集提供缓存
* 为Hibernate提供二级缓存
* 为Stateful Session Bean提供群集复制缓存
* 为web项目的session群集复制提供缓存
这一点可以从刚刚提到的domain.xml中的ha配置中看到,我们稍微展开一下Infinispan子系统的配置:
可以看到,Infinispan为刚才说明的4个部分提供缓存。这块已经完全替代了AS6及原有JBoss AS版本中的JBoss Cache。
接下来我们要看domain.xml中另一块与群集相关的配置:
在协议层配置方面,我们发现有domain.xml为我们配置好了一个ha-sockets的端口绑定方案。最后,在server-group中,我们可以在domain.xml中发现一个配置好的,支持群集的服务器组:
可以看到,这个other-server-group使用了ha这个配置方案,并在协议层绑定至ha-sockets。
因此通过以上分析,如果我们想使用AS7提供的群集功能,在默认情况下,将项目部署至other-server-group这个服务器组即可。接下来是实际操作的过程:
首先保证你已经按照文章一开始说的,根据这篇文章:
配置好了域模式来启动AS7。这里要说明一下,AS7的群集功能并不依赖于域管理功能,但是在AS7下,域管理功能和群集结合起来用是推荐的使用方式,通过域管理可以对群集内各AS服务器节点进行统一管理,非常方便。并且我也看不到为什么要不使用域而独立使用群集功能的原因,因此本文都是基于AS7在域模式下运行时的群集配置来讲解的。
在动手使用AS7的群集功能之前,有一点要非常注意,一定要下载使用版本>=7.1.0.CR1b的JBoss AS。否则你会遇到这个BUG:
JBoss AS的下载地址位于:
下载完成后,可以按照《JBoss AS7中的新概念-域》一文中的方法将master和slave两台主机运行起来。但有一点需要注意,我们要使用domain.xml中不同的服务器组来部署群集应用:
注意到在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的群集复制了:
为了方便起见,我创建了一个demo项目在这里:
可以把代码签出使用maven进行编译打包,然后通过域控制器部署至AS7。如果你在master及slave中的host.xml都将server-three设置成了启动时自动加载:
注意到auto-start=true,那么两台主机启动时,你可以看到群集组建的日志(因此server-three的服务器组为other-server-group,而如前所述,other-server-group使用了群集配置方案):
master上面的日志:
slave上面的日志:
以及我们可以看到群集复制及缓存也都加载了起来:
当然,如果将host.xml中的主机配置改为auto-start=false也没有关系,只不过AS7在启动时不会加载这些群集模块,只有项目被部署至server-three时才会按需加载,从而提高AS7的第一次启动时间。
启动完成之后是部署cluster-demo应用,访问域控制器的web控制端进行部署,需要注意的是要部署到server-three:
如果没有什么问题的话,通过域控制器,这个项目就被同时部署到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并不难,但是需要细心。可以根据这篇文档一步一步来:
这里简单介绍下安装方法:
从这里下载mod_cluster:
我下载的是:
然后将相关的包解压到httpd的modules目录:
然后,编辑httpd.conf:
首先要让httpd侦听到公共端口上,而不是默认的localhost:
我们在这个demo中,mod_cluster和master域控制器在一台机器上,所以IP地址和master是一样。但是mod_cluster并不要求AS的域控制器与其在一台机器上,只要它们在一个子网即可通过IP Multicast来自动发现。此外,mod_cluster还支持广域网组建群集,但我怀疑这种方式的实用性,并且也不是本文的重点,所以并不详细展开协议层方面的细节。只需要理解一点就可以了:
* 将你的mod_cluster+httpd服务器和你的与你的AS服务器置于一个子网。
然后是加载相关模块:
注意要把mod_proxy_balancer给disable掉,这个是和mod_proxy_cluster冲突的:
最后是mod_proxy的相关配置:
上面的重点在于这样几处:
我们的群集内各节点都处于10.211.55网段内,因此配置mod_cluster寻找这个网段内的所有节点。接下来是:
给群集起个名字,我们为方便说明,使用AS7中群集所在服务器组的名字:other-server-group。这个并没有什么强制要求。AdvertiseFrequency是mod_cluster发现各节点的查询间隔。这样,有新的节点加入群集,或是从群集中去掉,mod_cluster都是自动配置。
最后是启动httpd:
查看httpd的日志,看看是否正常启动了:
如果有上述日志说明正常启动了。如果有问题,任何时候日志都是你排错的好朋友。接下来我们来启动master和slave两个AS服务器,启动后,如果没什么问题,可以发现两台AS服务器都已经被mod_cluster发现,并纳入了mod_cluster的群集控制之下:
接下来我们试着访问httpd的侦听地址,看看请求是否被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等各部件的详细使用方法,从而定制出符合业务目的群集。
认证失败,一般是slave中host.xml的server name设置不正确:
<host name="slave" xmlns="urn:jboss:domain:2.0">
^^^ 假设你的slave上面的host.xml的name设置如上,那么你在master中必须使用add-user.sh来创建一个同名用户,叫做"slave"。并且这个用户必须有secret value,并将这个secret value设置在你的slave的host.xml中。
这篇文档已经和最新版的JBoss EAP6和WildFly有出入了,建议你参考我写的英文版的文档,会持续更新:
https://community.jboss.org/wiki/AS7ClusterHowto
AS7的群集功能,从大的框架上来讲承袭沿用以往版本的设计,核心仍是基于JGroup。因此如果对以往JBoss AS的群集功能使用比较熟悉的话,会觉得AS7的群集并不难上手。
但从细节角度来讲,AS7的群集功能设计有了多方面改进:首先是简化了配置文件,实现单点式配置;此外,AS7中引入了域的概念,通过域对群集内各主机实现了统一配置部署。本文详细介绍AS7下群集的使用方法。
阅读本文之前,必须先了解AS7中域的概念,可参考这篇文章:
http://bluedash.iteye.com/blog/1279160
如果你按照上面的方法成功地配置好了AS7下的域模式,并成功地部署了一个项目至AS7的域,那么就可以继续阅读本文了。
如果你没看完上面的文章,并且没有进行动手实验,请不要继续阅读本文,否则只是浪费时间!
从AS7开始,群集配置被大大简化,并且当AS7运行在域控模式下时,群集默认是自发现,自启动的。虽然配置变得更为傻瓜,但我们仍需了解一些技术细节,从而可以理解AS7为我们提供的默认群集配置,并根据自己的需要进行配置调整。下面是详细讲解:
AS7的群集配置主要集中在域控制器的配置文件domain.xml里。在domain.xml中,默认有两个profile,一个是default,一个是ha:
<profile name="default">...</profile> <profile name="ha">...</profile>
其中,ha这个profile里面配置了群集的所需组件(ha的含义代表High Availability,高可用)。这其中主要包括JGroup,Infinispan和modcluster:
<profile name="ha"> <subsystem xmlns="urn:jboss:domain:infinispan:1.1">...</subsystem> <subsystem xmlns="urn:jboss:domain:modcluster:1.0"> <mod-cluster-config advertise-socket="modcluster"/> </subsystem> <subsystem xmlns="urn:jboss:domain:jgroups:1.0" default-stack="udp"> <stack name="udp">...</stack> <stack name="tcp">...</stack> </subsystem> </profile>
这三个组件都是构成AS7群集的要素:
* JGroup用与群集中多AS服务器之间的通信和连接。有关JGroup的详细配置,需要对JGroup本身有一个了解,本文不详细展开这一块。
* Infinispan从AS7开始,开始代替JBoss Cache承担缓存的功能
* modcluster负责Apache HTTPD与AS群集的连接工作。通过HTTPD作为前端,为用户提供一个统一的群集访问点,后面负责将负载分担至群集内各节点。
有关Infinispan可以多说几句:这个项目的引入是AS7的亮点之一,有兴趣可以去它的项目网站上进行深入的了解:
http://www.jboss.org/infinispan
AS7利用Infinispan为多个模块提供缓存服务,包括:
* 为群集提供缓存
* 为Hibernate提供二级缓存
* 为Stateful Session Bean提供群集复制缓存
* 为web项目的session群集复制提供缓存
这一点可以从刚刚提到的domain.xml中的ha配置中看到,我们稍微展开一下Infinispan子系统的配置:
<subsystem xmlns="urn:jboss:domain:infinispan:1.1"> <cache-container name="cluster">...</cache-container> <cache-container name="web">...</cache-container> <cache-container name="sfsb">...</cache-container> <cache-container name="hibernate">...</cache-container> </subsystem>
可以看到,Infinispan为刚才说明的4个部分提供缓存。这块已经完全替代了AS6及原有JBoss AS版本中的JBoss Cache。
接下来我们要看domain.xml中另一块与群集相关的配置:
<socket-binding-groups> <socket-binding-group name="standard-sockets">...</socket-binding-group> <socket-binding-group name="ha-sockets">...</socket-binding-group> </socket-binding-groups>
在协议层配置方面,我们发现有domain.xml为我们配置好了一个ha-sockets的端口绑定方案。最后,在server-group中,我们可以在domain.xml中发现一个配置好的,支持群集的服务器组:
<server-groups> <server-group name="other-server-group" profile="ha"> <socket-binding-group ref="ha-sockets"/> </server-group> </server-groups>
可以看到,这个other-server-group使用了ha这个配置方案,并在协议层绑定至ha-sockets。
因此通过以上分析,如果我们想使用AS7提供的群集功能,在默认情况下,将项目部署至other-server-group这个服务器组即可。接下来是实际操作的过程:
首先保证你已经按照文章一开始说的,根据这篇文章:
http://bluedash.iteye.com/blog/1279160
配置好了域模式来启动AS7。这里要说明一下,AS7的群集功能并不依赖于域管理功能,但是在AS7下,域管理功能和群集结合起来用是推荐的使用方式,通过域管理可以对群集内各AS服务器节点进行统一管理,非常方便。并且我也看不到为什么要不使用域而独立使用群集功能的原因,因此本文都是基于AS7在域模式下运行时的群集配置来讲解的。
在动手使用AS7的群集功能之前,有一点要非常注意,一定要下载使用版本>=7.1.0.CR1b的JBoss AS。否则你会遇到这个BUG:
https://issues.jboss.org/browse/AS7-2738
JBoss AS的下载地址位于:
http://www.jboss.org/jbossas/downloads/
下载完成后,可以按照《JBoss AS7中的新概念-域》一文中的方法将master和slave两台主机运行起来。但有一点需要注意,我们要使用domain.xml中不同的服务器组来部署群集应用:
<server-groups> <server-group name="main-server-group" profile="default"> <jvm name="default"> <heap size="64m" max-size="512m"/> </jvm> <socket-binding-group ref="standard-sockets"/> </server-group> <server-group name="other-server-group" profile="ha"> <jvm name="default"> <heap size="64m" max-size="512m"/> </jvm> <socket-binding-group ref="ha-sockets"/> </server-group> </server-groups>
注意到在server-groups之中,有一个名为“other-server-group”的服务器组,默认使用ha配置方案,并且绑定至ha-sockets。部署在这个服务器组中的项目,将可以组建群集。
此外还有一点配置需注意,在master和slave的host.xml中,要为使用other-server-group的主机使用相同的端口offset。下面分别是master和slave中host.xml的相关配置。首先是master的配置:
<servers> ... <server name="server-three" group="other-server-group" auto-start="true"> <!-- server-three avoids port conflicts by incrementing the ports in the default socket-group declared in the server-group --> <socket-bindings port-offset="250"/> </server> </servers>
然后是slave中的host.xml配置:
<servers> ... <server name="server-three-slave" group="other-server-group" auto-start="true"> <!-- server-three avoids port conflicts by incrementing the ports in the default socket-group declared in the server-group --> <socket-bindings port-offset="250"/> </server> </servers>
这里的重点是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将不同的服务器置于不同的端口之下。比如:
<servers> <server name="server-one" group="main-server-group"> </server> <server name="server-two" group="main-server-group" auto-start="true"> <socket-bindings port-offset="150"/> </server> <server name="server-three" group="other-server-group" auto-start="true"> <socket-bindings port-offset="250"/> </server> </servers>
类似上面这样的配置,有三个服务器,第一个服务器绑定于默认设置的端口上,第二个服务器offset为150,第三个为250。那么,如果默认的服务端口号为8080,那么第二个服务器就是8080+150 = 8230,第三个则服务于8080+250 = 8330端口,其它各服务端口依此类推。
通过使用offset配置,大大减少了重复的配置。AS7将所有端口的设置置于domain.xml的配置之中:
<socket-binding-groups> <socket-binding-group name="standard-sockets" default-interface="public"> <socket-binding name="http" port="8080"/> <socket-binding name="https" port="8443"/> <socket-binding name="jacorb" port="3528"/> <socket-binding name="jacorb-ssl" port="3529"/> ...
通过在domain.xml的socket-binding-groups中设置好服务的端口号,再在host.xml中配合port-offset的设置,就实现了多服务器的集中管理,简化了配置工作。
熟悉了端口配置后,我们就可以开始进行实际的群集实验了,好玩的部分开始了!
实验
和《JBoss AS7中的新概念-域》中介绍的一样,我们还是用两台主机做实验,域控制器为master,此外还有一台域内主机slave。
然后我们创建一个测试用的项目,这个项目应该包含Session的群集复制。在web.xml中添加这样一行就可以开启session的群集复制了:
<distributable/>
为了方便起见,我创建了一个demo项目在这里:
https://github.com/liweinan/cluster-demo
可以把代码签出使用maven进行编译打包,然后通过域控制器部署至AS7。如果你在master及slave中的host.xml都将server-three设置成了启动时自动加载:
<servers> ... <server name="server-three" group="other-server-group" auto-start="true"> <socket-bindings port-offset="250"/> </server> </servers>
注意到auto-start=true,那么两台主机启动时,你可以看到群集组建的日志(因此server-three的服务器组为other-server-group,而如前所述,other-server-group使用了群集配置方案):
master上面的日志:
[Server:server-three] 14:27:28,581 INFO [stdout] (MSC service thread 1-2) [Server:server-three] 14:27:28,582 INFO [stdout] (MSC service thread 1-2) ------------------------------------------------------------------- [Server:server-three] 14:27:28,582 INFO [stdout] (MSC service thread 1-2) GMS: address=server-three/web, cluster=web, physical address=10.211.55.5:55450 [Server:server-three] 14:27:28,582 INFO [stdout] (MSC service thread 1-2) -------------------------------------------------------------------
slave上面的日志:
[Server:server-three-slave] 14:28:02,779 INFO [stdout] (MSC service thread 1-11) [Server:server-three-slave] 14:28:02,779 INFO [stdout] (MSC service thread 1-11) ------------------------------------------------------------------- [Server:server-three-slave] 14:28:02,779 INFO [stdout] (MSC service thread 1-11) GMS: address=server-three-slave/web, cluster=web, physical address=10.211.55.2:55450 [Server:server-three-slave] 14:28:02,779 INFO [stdout] (MSC service thread 1-11) ------------------------------------------------------------------- [Server:server-three-slave] 14:28:02,925 INFO [org.jboss.as.clustering.CoreGroupCommunicationService.web] (MSC service thread 1-9) JBAS010207: Number of cluster members: 2
以及我们可以看到群集复制及缓存也都加载了起来:
[Server:server-three-slave] 14:28:03,419 INFO [org.jboss.as.clustering] (MSC service thread 1-9) JBAS010301: Started repl cache from web container [Server:server-three-slave] 14:28:03,419 INFO [org.jboss.as.clustering] (MSC service thread 1-8) JBAS010301: Started registry cache from web container
当然,如果将host.xml中的主机配置改为auto-start=false也没有关系,只不过AS7在启动时不会加载这些群集模块,只有项目被部署至server-three时才会按需加载,从而提高AS7的第一次启动时间。
启动完成之后是部署cluster-demo应用,访问域控制器的web控制端进行部署,需要注意的是要部署到server-three:
如果没有什么问题的话,通过域控制器,这个项目就被同时部署到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的详细配置策略,可参考:
http://docs.jboss.org/mod_cluster/1.1.0/html_single/#LoadMetric
安装配置mod_cluster并不难,但是需要细心。可以根据这篇文档一步一步来:
http://docs.jboss.org/mod_cluster/1.1.0/html/Quick_Start_Guide.html
这里简单介绍下安装方法:
从这里下载mod_cluster:
http://www.jboss.org/mod_cluster/downloads
我下载的是:
mod_cluster-1.1.3.Final-linux2-x86-so.tar.gz
然后将相关的包解压到httpd的modules目录:
/etc/httpd/modules$ tar zxvf mod_cluster-1.1.3.Final-linux2-x86-so.tar.gz
然后,编辑httpd.conf:
% vi /etc/httpd/conf/httpd.conf
首先要让httpd侦听到公共端口上,而不是默认的localhost:
Listen 10.211.55.5:80
我们在这个demo中,mod_cluster和master域控制器在一台机器上,所以IP地址和master是一样。但是mod_cluster并不要求AS的域控制器与其在一台机器上,只要它们在一个子网即可通过IP Multicast来自动发现。此外,mod_cluster还支持广域网组建群集,但我怀疑这种方式的实用性,并且也不是本文的重点,所以并不详细展开协议层方面的细节。只需要理解一点就可以了:
* 将你的mod_cluster+httpd服务器和你的与你的AS服务器置于一个子网。
然后是加载相关模块:
LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_ajp_module modules/mod_proxy_ajp.so LoadModule slotmem_module modules/mod_slotmem.so LoadModule manager_module modules/mod_manager.so LoadModule proxy_cluster_module modules/mod_proxy_cluster.so LoadModule advertise_module modules/mod_advertise.so
注意要把mod_proxy_balancer给disable掉,这个是和mod_proxy_cluster冲突的:
#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
最后是mod_proxy的相关配置:
Listen 10.211.55.5:6666 #Listen 127.0.0.1:8330 <VirtualHost 10.211.55.5:6666> <Directory /> Order deny,allow Deny from all Allow from 10.211.55. </Directory> KeepAliveTimeout 60 MaxKeepAliveRequests 0 ManagerBalancerName other-server-group AdvertiseFrequency 5 </VirtualHost>
上面的重点在于这样几处:
Allow from 10.211.55.
我们的群集内各节点都处于10.211.55网段内,因此配置mod_cluster寻找这个网段内的所有节点。接下来是:
ManagerBalancerName other-server-group AdvertiseFrequency 5
给群集起个名字,我们为方便说明,使用AS7中群集所在服务器组的名字:other-server-group。这个并没有什么强制要求。AdvertiseFrequency是mod_cluster发现各节点的查询间隔。这样,有新的节点加入群集,或是从群集中去掉,mod_cluster都是自动配置。
最后是启动httpd:
service httpd restart
查看httpd的日志,看看是否正常启动了:
% tail -f /etc/httpd/logs/error_log [Fri Jan 20 16:48:44 2012] [notice] Advertise initialized for process 6189 [Fri Jan 20 16:48:44 2012] [notice] Apache/2.2.15 (Unix) DAV/2 mod_cluster/1.1.x configured -- resuming normal operations
如果有上述日志说明正常启动了。如果有问题,任何时候日志都是你排错的好朋友。接下来我们来启动master和slave两个AS服务器,启动后,如果没什么问题,可以发现两台AS服务器都已经被mod_cluster发现,并纳入了mod_cluster的群集控制之下:
[Server:server-three-slave] 16:51:00,798 INFO [org.infinispan.remoting.transport.jgroups.JGroupsTransport] (Incoming-7,null) ISPN000094: Received new cluster view: [server-three-slave/web|7] [server-three-slave/web, server-three/web]
[Server:server-three] 16:51:07,676 INFO [org.jboss.modcluster.ModClusterService] (ContainerBackgroundProcessor[StandardEngine[jboss.web]]) Engine [jboss.web] will use jvmRoute: a019cde8-113d-362c-992e-ea4abc1bf389
接下来我们试着访问httpd的侦听地址,看看请求是否被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开始报错:
[Host Controller] 18:43:02,320 WARN [org.jboss.as.host.controller] (Thread-27) JBAS010900: Could not connect to remote domain controller 10.211.55.5:9999
报告连接不到域控制器。这个没有关系,我们此时还是访问群集节点:
会发现服务仍然可用,并且session数据没有丢失。但查看slave的日志,发现请求实际由slave承担了。整个实验实现了我们的预期。
此时,将master重新启动,发现master发现了slave,并重新接管域管理的工作。mod_cluster也发现了master并将其加入了群集节点,一切都是自动化的。
小结
通过上面的讲述,相信你已经初步了解了AS7的群集使用方法。在这个基础上,可以进一步学习mod_cluster,JGroup,Inifinispan等各部件的详细使用方法,从而定制出符合业务目的群集。
评论
8 楼
vivianivy
2014-05-30
请问这个集群方案能不能实现文件同步?
7 楼
阿男bluedash
2014-01-04
582399232 写道
我在启动域的master后启动slave,结果slave由于连接超时Remote connection failed 最后认证失败 Could not connect to master. Aborting. Error was: java.lang.IllegalStateException: JBAS010942: Unable to connect due to authentication failure.
不知道为什么?请问大家你们的集群怎么弄成功的,不求能达到session复制,只要集群能实现负载均衡就行了。谢谢
不知道为什么?请问大家你们的集群怎么弄成功的,不求能达到session复制,只要集群能实现负载均衡就行了。谢谢
认证失败,一般是slave中host.xml的server name设置不正确:
<host name="slave" xmlns="urn:jboss:domain:2.0">
^^^ 假设你的slave上面的host.xml的name设置如上,那么你在master中必须使用add-user.sh来创建一个同名用户,叫做"slave"。并且这个用户必须有secret value,并将这个secret value设置在你的slave的host.xml中。
这篇文档已经和最新版的JBoss EAP6和WildFly有出入了,建议你参考我写的英文版的文档,会持续更新:
https://community.jboss.org/wiki/AS7ClusterHowto
6 楼
582399232
2013-12-19
我在启动域的master后启动slave,结果slave由于连接超时Remote connection failed 最后认证失败 Could not connect to master. Aborting. Error was: java.lang.IllegalStateException: JBAS010942: Unable to connect due to authentication failure.
不知道为什么?请问大家你们的集群怎么弄成功的,不求能达到session复制,只要集群能实现负载均衡就行了。谢谢
不知道为什么?请问大家你们的集群怎么弄成功的,不求能达到session复制,只要集群能实现负载均衡就行了。谢谢
5 楼
tlg
2012-10-26
如果要扩展到大于3台机器,要怎么配置呢
4 楼
modiliany
2012-07-21
兄弟,请教一下,我按:https://docs.jboss.org/author/display/AS71/AS7+Cluster+Howto
的步骤来配置负载均衡,不过没有成功,在用management console网页启动server-three时,启动不了,总是报连接不了master主机IP的9999端口,连接超时。
我在上面那个帖子留言了,目前还没有老外回复(搜:xf li;中间要空格),另外一个老外也是同样的问题,他们的讨论也还没有得出有效的解决方法:
https://community.jboss.org/message/745403
主题是:Connection timeout to local port 9999 with clustered AS 7.1.1.Final
希望与大家交流:Q305119625,谢谢
的步骤来配置负载均衡,不过没有成功,在用management console网页启动server-three时,启动不了,总是报连接不了master主机IP的9999端口,连接超时。
我在上面那个帖子留言了,目前还没有老外回复(搜:xf li;中间要空格),另外一个老外也是同样的问题,他们的讨论也还没有得出有效的解决方法:
https://community.jboss.org/message/745403
主题是:Connection timeout to local port 9999 with clustered AS 7.1.1.Final
希望与大家交流:Q305119625,谢谢
3 楼
阿男bluedash
2012-07-18
这篇文章最早是我给JBoss AS写的英文版官方文档,后来自己给翻译成中文的。你可以去jboss.org社区提问,也可以看看英文版文档下面大家的回复有没有你要的答案:
https://community.jboss.org/wiki/AS7ClusterHowto
https://community.jboss.org/wiki/AS7ClusterHowto
2 楼
akhuting
2012-07-18
对了,我jboss版本为7.1,好像和7.0有点不太一样,session复制不成功
1 楼
akhuting
2012-07-17
我想问一下session复制是否依赖mod_cluster,我apache转发没成功,我直接手动访问的两个地址,但是session没复制
发表评论
-
为JBoss AS7添加新模块
2011-12-27 13:41 2505注:文本的内容主要探讨JBoss AS7的实现细节,涉及AS7 ... -
Java Annotation介绍
2011-12-08 23:08 2882Java Annotation是Sun公司自J ... -
使用Snowdrop在JBoss中部署Spring工程
2011-12-08 21:46 2185向JBoss中集成Spring一直 ... -
JBoss AS 7 快速上手
2011-12-04 13:01 2193(注:本文撰写时7.0.0.CR1是最新版本,目前已经有7.1 ... -
JBoss Tattletale 简介
2011-12-03 15:39 2836Tattletale[1]可以帮助你分析你的项目中组件之间的依 ... -
在JBoss AS7中进行项目部署
2011-11-29 00:34 4706AS7的项目部署方式与原 ... -
JBoss Module介绍
2011-11-27 01:47 2980从JBoss AS7开始,Classloader这块开始使用全 ... -
JBoss AS7中的新概念-域
2011-11-27 01:30 3856JBoss AS7新加入了域(domain)的概念并实现了相关 ... -
Java中的多线程竞争与CountDownLatch的应用
2011-11-25 01:33 2411线程间的竞争叫做Racing,正如这篇文章的图片一样,不同 ... -
JBoss AS7 - 部署
2011-11-23 23:01 1675首先是启动AS7[1],然后进入管理终端: % ./j ...
相关推荐
同时,还需要配置HTTP负载均衡器,例如使用mod_cluster模块,该模块是JBOSS AS7及以上版本的默认负载均衡解决方案,但也可以在JBOSS 4.2.2上安装使用。mod_cluster通过监听JBOSS节点的管理接口,动态感知节点状态,...
• 《配置和管理红帽群集系统》 — 提供安装、配置和管理红帽群集组件的信息。 • Logical Volume Manager Administration — Provides a description of the Logical Volume Manager (LVM), including information...
### 数据库管理:RHEL平台下MYSQL群集配置 #### 实验环境与目的 本文将详细介绍如何在RHEL (Red Hat Enterprise Linux) 平台上配置MySQL集群。此配置旨在实现数据库服务的高可用性和负载均衡,确保数据的一致性和...
- **通用的配置概念**:如扩展、子系统、路径、接口、socket绑定等,构成了JBossAS7的核心配置框架。 #### 管理任务 - **网络接口和端口**:定义网络通信规则和安全性。 - **管理接口的安全性**:保护管理控制台免...
### Windows 2000群集安装与配置详解 #### 一、系统准备 在进行Windows 2000群集的安装之前,首先需要进行一系列的准备工作来确保整个安装过程能够顺利进行。 ##### 服务器配置 - **服务器命名**:两台服务器分别...
JBoss群集的配置和管理涉及到了解群集系统的基本概念、配置JBoss实例以加入特定群集、配置ClusterPartitionMBean属性、以及管理JGroups协议。JBoss群集的实现大大提升了企业级应用的可用性和性能,是JBoss应用服务器...
4. 安装Win2K AS:在每个群集节点上安装Windows 2000 Advanced Server操作系统,并进行基本配置。 5. 安装Cluster Service:Cluster Service(群集服务)是Windows群集的核心组件,用于管理群集资源和处理节点故障...
### JBoss7配置指南及管理员手册关键知识点解析 #### 一、JBoss主要版本特性 ...以上内容概括了《JBoss7配置指南及管理员手册》的主要知识点,旨在帮助读者更好地理解和掌握JBoss AS 7的配置和管理技巧。
2.3. 群集配置工具 2.4. 配置群集软件 2.5. 编辑 rawdevices 文件 2.6. 配置群集守护进程 2.7. 添加和删除成员 2.8. 配置电源控制器连接 2.9. 配置失效转移域 2.10. 在群集中添加服务 2.11. 检查群集配置 2.12. 配置...
本配置管理员手册将深入探讨JBoss 7的特性和配置方法,帮助管理员理解和掌握其核心功能。 1. JBoss 7特性 - JBoss 7引入了模块化设计,使得应用服务器更加轻量级,启动速度更快。 - 支持Java EE 6,包括EJB 3.1、...
2. 为什么JBoss AS7 这么快 8 3. JBoss AS7中的新概念-域 10 3.1. 域(Domain)的概念及其与群集(Cluster)的区别 10 3.2. 实验 11 1.1.1. 准备工作 11 1.1.2. 配置 12 3.2.1.1. Master上面的配置 14 3.2.1.1.1. ...
本文将重点介绍JBoss7.1.1的核心特性和管理员需要了解的关键概念,包括JBoss的主要版本特性、JBoss AS7的新特性、域(Domain)和群集(Cluster)的概念、JBoss7的配置方法、安全性配置、管理接口、JVM设置、命令行...
本文档将详细解析JBoss 7的配置指南,帮助管理员理解和掌握其核心概念、配置方法以及管理实践。 1. JBoss 7的新特性 - JBoss 4特性:这一版本引入了模块化架构,使得应用程序的部署和管理更加灵活,同时提高了性能...
7. **JBoss 7配置** 进一步深入,配置包括但不限于以下方面: - 启动和停止服务器 - 配置网络端口和服务端口 - 管理数据源、JMS队列和主题 - 定义安全策略和用户角色 - 配置EJB和Web应用程序 - 管理日志和...
- **通用配置概念**:包括扩展、子系统、路径、接口、socket绑定等,这些都是配置JBoss AS 7时的重要组成部分。 - **管理资源**:描述了如何管理和配置JBoss AS 7中的各种资源,包括地址、操作、属性等。 - **...
在创建Domain时,需要配置群集信息,例如,集群的名称、集群的IP地址等。 14. 将“受管理服务器”添加到“集群”中 最后,需要将“受管理服务器”添加到“集群”中,以便完成集群的配置。 本文档提供了一个详细的...
在RedHat AS5系统上,需要安装以下软件包: 1. ipvsadm-1.24-8.1.i386.rpm 2. modcluster-0.8-27.el5.i386.rpm 3. oddjob-0.27-7.i386.rpm 4. oddjob-devel-0.27-7.i386.rpm 5. oddjob-libs-0.27-7.i386.rpm 6. ...
7. 应用程序开发与集成:DSD技术与RPG(Report Program Generator)、CL(Command Language)等AS400编程语言的结合,以及与其他系统的集成策略。 8. 实践案例分析:手册可能包含实际业务场景下的DSD应用示例,帮助...
### 群集Oracle双机热备的安装 #### 一、双机热备概念介绍 双机热备(High Availability Cluster,简称HA)是一种通过两台或多台计算机集群实现高可用性的技术方案。该技术可以确保在一台服务器出现故障时,另一台...
- **创建群集并配置第一个节点**:初始化集群环境。 - **配置第二个节点**:加入第二个节点到集群。 - **测试群集服务的切换**:验证群集服务的正常切换功能。 3. **安装Oracle 9i和Oracle Fail Safe**:根据官方...