Jboss7集群配置说明

Posted 空余恨

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jboss7集群配置说明相关的知识,希望对你有一定的参考价值。

Jboss7集群配置说明

第一节      前言

JBOSS7具有独立模式(standalone)和域模式(domain)两种运行方式。独立模式(standalone)是单机器单进程方式,配置布署简单,适用于一般单服务器项目。域模式(domain)是多机器多进程方式,配置稍复杂,适用于大型分布式项目。如果要集群布署项目,最简单的方式就是使用域模式(domain)。

当使用域模式(domain)时,一台机器上的一个JBOSS7应用(host)可以开启多个Web Server,将一个JBOSS7应用(host)作为主控制服务器,就能控制管理其它机器上的JBOSS7应用(host),这样理论上通过增加机器,我们就可以获得无限个Web Server。把我们的Java项目通过主控制服务器布署到这些Web Server上,再通过httpd+mod_cluster,就能获得集群功能。

mod_cluster是JBOSS开发的专门用于集群的httpd模块,JBOSS7应该已内置有mod_cluster模块并已配置好,JBOSS官网也提供了配置好mod_cluster的httpd项目,我们只需下载使用即可。

注意:JBOSS中文文档很少,项目本身的版本更新又频繁,因此初学者不易掌握,容易走入误区。请根据本文的写作顺序,并下载指定的程序版本,确保程序版本匹配。调试环境除httpd+mod_cluster和jboss7独立模式(standalone)可以在windows系统下以外,jboss7域模式(domain)一定要用Linux环境,否则无法调试通过

 

第二节      httpd+ mod_cluster安装、配置、运行

作为初学者,最好先把httpd+mod_cluster调试成功后再往后进行,网上的资料多是针对熟悉linux、jboss、httpd的读者,因此有不同程度的内容缺失,请按本文的介绍操作。

一   下载、安装、运行httpd+mod_cluster

访问http://www.jboss.org/mod_cluster/downloads/1-2-0-Final下载mod_cluster-1.2.0.Final-linux2-x64-ssl.tar.gz(windows下是mod_cluster-1.2.0.Final-windows-x86-ssl)。注意版本是1.2.0.Final,因为我们后面用的是jboss-as-7.1.1.Final,它内置的是mod_cluster-1.2.0.Final版本。还要注意这里下载的是httpd+mod_cluster,也就是包含了httpd的程序,所以文件大小应该是8-9M,而不是只有几百K,只包含几个so文件的程序。网上一般介绍的是下载只包含几个so文件的程序,然后修改linux自带的httpd配置,但是根据测试发现linux自带的httpd版本和我们需要的mod_cluster不匹配,无法配置成功。所以我们要下载包含完全httpd程序的mod_cluster文件。

在linux命令行下输入tar –zxvf mod_cluster-1.2.0.Final-windows-x86-ssl解压文件包,解压后第一件事就是进入opt/jboss/httpd/sbin目录输入./installhome.sh(windows下是httpd-2.2\bin\installconf.bat),生成默认配置。注意这一步不能缺,如果不先生成默认配置,我们后面就没法根据需要修改配置文件。

接着修改opt/jboss/httpd/httpd/conf/httpd.conf文件内容(可以用SSH Secure File Transfer Client把文件下载下来修改保存后再上传上去):

Listen 8000改成

Listen 192.168.1.204:80

#ServerName localhost:8000 改成

ServerName 192.168.1.204:80

文件最下面的

<IfModule manager_module>

 Listen 127.0.0.1:6666

 ManagerBalancerName mycluster

 <VirtualHost 127.0.0.1:6666>

   <Location />

    Order deny,allow

    Deny from all

    Allow from 127.0.0.1

   </Location>

 

   KeepAliveTimeout 300

   MaxKeepAliveRequests 0

   #ServerAdvertise on http://127.0.0.1:6666

   AdvertiseFrequency 5

   #AdvertiseSecurityKey secret

   #AdvertiseGroup 224.0.1.105:23364

   EnableMCPMReceive

 

   <Location /mod_cluster_manager>

      SetHandler mod_cluster-manager

      Order deny,allow

      Deny from all

      Allow from 127.0.0

   </Location>

 

 </VirtualHost>

</IfModule>

改成

<IfModule manager_module>

 Listen 192.168.1.204:6666

 ManagerBalancerName mycluster

 <VirtualHost *:6666>

   <Location />

    Order deny,allow

    Deny from all

    Allow from all

   </Location>

 

   KeepAliveTimeout 300

   MaxKeepAliveRequests 0

   #ServerAdvertise on http://127.0.0.1:6666

   AdvertiseFrequency 5

    AdvertiseSecurityKey 1234567890

   #AdvertiseGroup 224.0.1.105:23364

   EnableMCPMReceive

      AllowDisplay On

 

   <Location /mod_cluster_manager>

      SetHandler mod_cluster-manager

      Order deny,allow

      Deny from all

      Allow from all

   </Location>

 

 </VirtualHost>

</IfModule>

基本上改动的就是把127.0.0.1换成本机局域网IP,Listen192.168.1.204:80是监听IP和端口,这样httpd才会处理访问访问这个IP端口的请求,ServerName 192.168.1.204:80是对外的访问地址,当服务器有DNS功能时,可以改成ServerName www.example.com:80,由DNS来解析域名的IP。注意,本机必须处在一个局域网内并分配有IP,否则可能调试不过。必须启用AdvertiseSecurityKey并设置好密码,没有密码jboss7.1.1.Final无法连接mod_cluster,这是网上多数资料没有讲到的。AllowDisplayOn是显示详细内容,开启后才能看出有没有连接成功的消息。

进入opt/jboss/httpd目录运行./sbin/apachectl start(windows直接运行bin/httpd),注意不要直接进入sbin目录再运行./apachectl start,因为这会运行linux自带的httpd程序,而不是我们这里的httpd(很奇怪的问题)。命令功能运行后应该没有任何输出就直接结束,如果有输入信息,就可能表示有问题。成功启动后,通过浏览器访问http://192.168.1.204,正常情况下页面上会显示It works!文字,如果显示的是apache的介绍页面,则说明你启动的可能是红帽linux自带的apache程序,而不是我们这里使用的httpd程序。再访问http://192.168.1.204:6666/mod_cluster_manager,注意是mod_cluster_manager而不是mod_cluster-manager,“_”和“-”的区别。出现这个画面表示运行正常:

技术分享

 

 

二   用jboss7独立模式(standalone)来检验mod_cluster的配置结果

访问https://www.jboss.org/jbossas/downloads.html下载jboss-as-7.1.1.Final,

解压缩后进入standalone\configuration目录,删除standalone.xml文件,将standalone-full-ha.xml重命名为standalone.xml文件,因为mod_cluster缺省配置都在standalone-full-ha.xml中,现在我们要使用standalone-full-ha.xml内的配置来运行jboss7。修改文件内容:

<serverxmlns="urn:jboss:domain:1.2">

改为

<server name="standalone-node1"xmlns="urn:jboss:domain:1.2">

 

<mod-cluster-configadvertise-socket="modcluster">

改为

<mod-cluster-configadvertise-socket="modcluster" advertise-security-key="1234567890">

 

<subsystemxmlns="urn:jboss:domain:web:1.1"default-virtual-server="default-host" native="false">

改为

<subsystemxmlns="urn:jboss:domain:web:1.1"default-virtual-server="default-host" native="false"instance-id="${jboss.node.name}">

 

<interfaces>

        <interfacename="management">

            <inet-addressvalue="${jboss.bind.address.management:127.0.0.1}"/>

        </interface>

        <interfacename="public">

            <inet-addressvalue="${jboss.bind.address:127.0.0.1}"/>

        </interface>

        <interfacename="unsecure">

            <inet-addressvalue="${jboss.bind.address.unsecure: 127.0.0.1}"/>

        </interface>

    </interfaces>

改为

<interfaces>

        <interfacename="management">

            <inet-addressvalue="${jboss.bind.address.management:192.168.1.204}"/>

        </interface>

        <interfacename="public">

            <inet-addressvalue="${jboss.bind.address:192.168.1.204}"/>

        </interface>

        <interfacename="unsecure">

            <inet-addressvalue="${jboss.bind.address.unsecure:192.168.1.204}"/>

        </interface>

    </interfaces>

name="standalone-node1"是添加Server名称,advertise-security-key="1234567890"是在httpd配置中定义的AdvertiseSecurityKey,没有这个则连接不上httpd+mod_cluster,instance-id="${jboss.node.name}"是JBOSS7.1.1.Final的bug,如果不添加此项,则mod_cluster无法找到Node节点名称。

配置完成后,进入bin目录,运行./ standalone.sh, 启动后通过浏览器访问http://192.168.1.204:6666/mod_cluster_manager,依然和刚才一样并无变化。接下来要在服务器上布署项目才能看得出变化。先停止jboss7。

https://github.com/liweinan/cluster-demo下载cluster-demo-master.zip,解压后将里面的内容手工打包为cluster.war文件,cluster.war文件是一个很简单的web项目,唯一不同的是项目内的web.xml文件中多了一行<distributable/>,这个标记会开启jboss cluster功能。将cluster.war拷贝到standalone\deployments目录中,再启动./ standalone.sh。

注意观察命令行,如果jboss7正常启动mod_cluster功能,会出现如下信息:

18:58:34,855 INFO [org.jboss.modcluster.ModClusterService] (MSC service thread 1-1)Initializing mod_cluster 1.2.0.Final

这里可以看出启动了mod_cluster,且版本是1.2.0.Finals

18:58:36,449 INFO [org.jboss.as.server.deployment] (MSC service thread 1-4) JBAS015876:Starting deployment of "cluster.war"

18:58:36,949 INFO  [stdout](pool-14-thread-1)

18:58:36,964 INFO  [stdout](pool-14-thread-1)-------------------------------------------------------------------

18:58:36,964 INFO  [stdout](pool-14-thread-1) GMS: address=standalone-node1/web, cluster=web, physicaladdress=192.168.1.204:55200

18:58:36,964 INFO  [stdout](pool-14-thread-1)-------------------------------------------------------------------

这里可以看出web server启动mod_cluster功能,如果没有,说明mod_cluster没启动。

上述信息只会在有java应用程序布署到jboss7后才会出现,也只有jboss7中的web server节点布署了java应用程序后才能促使jboss7启动mod_cluster功能。

布署后再次访问http://192.168.1.204:6666/mod_cluster_manager,应该会在原来的内容下有如下显示:

技术分享

如果有,则表示httpd+mod_cluster配置无误,可以接着往下进入域模式的配置管理了。如果没有,说明httpd+mod_cluster或jboss配置有误,二者没能成功建立起联系,需要检查配置并修改重试,直到有上述显示为止,才能说明httpd+mod_cluster是配置成功的。

 

第三节      JBOSS7域模式的配置、布署、运行

一   准备

 

1)    两台具有不同IP的linux服务器:主机master,IP:192.168.1.204,从机slave,IP:192.168.1.206,确保在一个局域网内可互相访问

2)    下载jboss-as-7.1.1.Final.zip,分别解下缩布署到主机和从机上,命名为master和slave

二   账号权限设置

1)    master服务器端

               i.         进入bin目录,运行./add-user.sh,添加admin账号

 

              ii.         再次运行bin/add-user.bat,添加slave账号

 

请注意,用户名必须等于slave的host的名字。这意味着对于每个额外的host需要一个用户。

 

三   修改master服务器缺省配置

1)    修改domain/configuration/host.xml

 

2)    修改domain/configuration/domain.xml

 

四   修改slave服务器缺省配置

1)    修改domain/configuration/host.xml

 

       添加server-identities到security-realm,用于从机尝试连接到主机时的身份验证。因为slave服务名设置为‘slave‘,所以我们应该用‘slave‘用户的密码。加密值属性中的‘MTIzMTIz =‘,是‘123123’的Base64编码。可以通过使用base64计算器来获得http://www.webutils.pl/index.php?idx=base64。在域控制器部分中<domain-controller>,我们还需要添加安全领域属性security-realm="ManagementRealm"

五   试运行

现在一切都是为两个主机设置在域模式下运行。试着在两个主机上分别运行./domain.sh。如果一切都好,我们可以看到master上的日志显示:

 

这表明master和slave都启动成功,且相互已经建立了联系。

六   布署测试程序

1)    通过浏览器访问http://192.168.1.204:9990,使用前名创建的账号:admin,密码:123123。192.168.1.204是主控制端host所在地址,我们用这个host来控制其他的host。进入后可以看到master和slave都有三个server,分别是

技术分享

 

我们要把cluster.war布署在server-three上,因为这个server属于other-server-group,在domain.xml中可以看到other-server-group用的profile是“full-ha”,是专用于mod_cluster的配置。

进入“Manage Deployments”页面,点击“Add Content”在右上角。然后我们应该选择cluster.war文件,遵循指令将其添加到我们的内容库。现在我们可以看到cluster.war已经添加。接下来,我们点击“添加组”按钮,并添加cluster.war到“other-server-group”,然后单击“保存”。

技术分享

 

注意,在Server Active启动的状态下,是无法布署war项目的,因此布署前确保server-three处于关闭状态。

接下来,启动master和slave的server-three,观察命令行,会出现如下信息:

18:58:34,855 INFO  [org.jboss.modcluster.ModClusterService](MSC service thread 1-1) Initializing mod_cluster 1.2.0.Final

……

18:58:36,449 INFO [org.jboss.as.server.deployment] (MSC service thread 1-4) JBAS015876:Starting deployment of "cluster.war"

18:58:36,949 INFO  [stdout](pool-14-thread-1)

18:58:36,964 INFO  [stdout](pool-14-thread-1)-------------------------------------------------------------------

18:58:36,964 INFO  [stdout] (pool-14-thread-1)GMS: address=master /web, cluster=web, physical address=192.168.1.204:55200

18:58:36,964 INFO  [stdout](pool-14-thread-1)-------------------------------------------------------------------

这里可以看出web server启动mod_cluster功能,如果没有,说明mod_cluster没启动。

启动后再访问http://192.168.1.204:6666/mod_cluster_manager,应该会在原来的内容下有类似如下内容

技术分享

这表明httpd+cluster和master,slave成功建产了联系,再访问http://192.168.1.204/cluster/,应该会看到httpd+mod_cluster自动将请求转发至master或slave其中一台服务器上,会显示如下内容

技术分享

 

一切顺利的话,我们可以测试一下,把master或slave不管哪一个host停掉,http://192.168.1.204/cluster/依然会继续运行,httpd+mod_cluster会自动将请求转发至仍然运行的host服务器上,并能转移session会话(我试过slave断了,session能转发到master,但master断了,session无法转发到slave,仍有待解决)。

最后,可以修改host.xml文件,将<servername="server-three" group="other-server-group"auto-start="false">

改为

<server name="server-three"group="other-server-group" auto-start="true">

使server-three自动启动。

以上是关于Jboss7集群配置说明的主要内容,如果未能解决你的问题,请参考以下文章

cratedb 集群搭建说明

Hadoop运行模式编写Hadoop集群常用脚本Hadoop集群启停脚本常用端口号说明集群时间同步时间服务器配置其他机器配置

Zookeeper -- Zookeeper 集群搭建 集群角色说明

ElasticSearch:elasticsearch.yml配置说明

keepalived工作原理和配置说明

cluster(集群)模式-docker版 哈希槽分区进行亿级数据存储 3主3从redis集群扩缩容配置案例架构说明