• 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.2ininstallconf.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,

    解压缩后进入standaloneconfiguration目录,删除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拷贝到standalonedeployments目录中,再启动./ 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自动启动。

  • 相关阅读:
    JWT(JSON WEB TOKEN) / oauth2 / SSL
    Guice 学习
    九 fork/join CompletableFuture
    二 lambda表达式
    IDEA 热部署 + 下载jar包放到maven中
    微服务学习一 微服务session 管理
    一 Optional
    八 线程池(待续)
    七 内置锁 wait notify notifyall; 显示锁 ReentrantLock
    六 多线程问题
  • 原文地址:https://www.cnblogs.com/martin-roger/p/7218076.html
Copyright © 2020-2023  润新知