我们经常会遇到这种情况,有时候希望在同一台机器上部署若干个JBoss实例,上面运行不同的应用程序,这样的话无论由于什么原因需要对某个JBoss实例进行关闭、重启等操作都不会影响到其它实例上面的应用的正常运行,我们知道JBoss启动时默认发布的不同的服务需要开放一些端口,如果只是简单地拷贝两套JBoss或者在一个JBoss中启动多个配置的话,同时启动多个JBoss实例会由于端口冲突而导致JBoss无法启动。

遇到这种情况可能大家最容易想到的解决办法就是既然端口冲突的话,那我就修改端口呗,这种方法当然也可以,但是JBoss不像Tomcat那样,Tomcat只需要修改两三个端口即可,而JBoss默认发布的服务端口包括http协议的8080、AJP协议的8009、JNP服务的1099、RMI命名服务的1098、RMI/JRMP invoker的4444端口等,而且不是在同一个文件中配置的,有些在server.xml中,有些在配置下的jboss-service.xml文件中,手工修改不但繁琐而且极易出错,尤其是实例多的话。

不过幸运的是JBoss提供了另外一种简便的方法:Binding Manager服务,不需要繁琐的端口配置就可以实现多实例运行端口不冲突,详细步骤如下:

以JBoss 4.2.3 GA为例,假设server下有两个不同的配置node1、node2(名字无所谓,default1、default1也行),%JBOSS_HOME%表示JBoss安装目录。

关键文件是%JBOSS_HOME%\docs\examples\binding-manager\sample-bindings.xml,该文件默认情况下定义了4组不同的端口配置(port-default、port-01、port-02、port-03),也就是说默认情况下支持同一台机器部署4个JBoss实例。

1、node2配置如下
修改node2/conf/jboss-service.xml文件,配置Service Binding(默认注释掉)如下:

  1. <mbean code="org.jboss.services.binding.ServiceBindingManager"
  2. name="jboss.system:service=ServiceBindingManager">
  3. <attribute name="ServerName">ports-01</attribute>
  4. <attribute name="StoreURL">${jboss.home.url}/docs/examples/binding-manager/sample-bindings.xml</attribute>
  5. <attribute name="StoreFactoryClassName">
  6. org.jboss.services.binding.XMLServicesStoreFactory
  7. </attribute>
  8. </mbean>
<mbean code="org.jboss.services.binding.ServiceBindingManager"
name="jboss.system:service=ServiceBindingManager">
<attribute name="ServerName">ports-01</attribute>
<attribute name="StoreURL">${jboss.home.url}/docs/examples/binding-manager/sample-bindings.xml</attribute>
<attribute name="StoreFactoryClassName">
org.jboss.services.binding.XMLServicesStoreFactory
</attribute>
</mbean>

这里配置node2使用的是port-01端口配置。

2、node1配置如下
node1默认可以不用配置,正常启动即可,这种情况下使用的是JBoss提供的默认端口8080、8009等,也可以参照第一步的配置,只需修改“ServerName”与node1不一样即可,如ports-02,注意只能是在sample-bindings.xml中定义的四组端口范围内。

3、启动实例

  1. run.bat -c node1 -b 192.168.10.100
  2. run.bat -c node2 -b 192.168.10.100
run.bat -c node1 -b 192.168.10.100
run.bat -c node2 -b 192.168.10.100

4、访问地址
node1访问地址:http://192.168.10.100:8080(默认不配置的情况)或者http://192.168.10.100:8280(使用port-02的情况)
node2访问地址:http://192.168.10.100:8180(使用port-01的情况)

大家也许注意到端口的规律,默认情况下是8080,其它实例的端口依次在8080的基础上增大100,对应关系如下:

  1. port-default     8080
  2. port-01          8180
  3. port-02          8280
  4. port-03          8380
port-default     8080
port-01 8180
port-02 8280
port-03 8380

当然其他端口如AJP协议端口8009也分别变成8109、8209、8309、8409,其它以此类推。

5、注意事项
1)上述配置的前提是每个实例的server.xml中HTTP协议的端口配置均为默认的8080,若该端口修改过,则需要修改sample-bindings.xml中port-default中的默认8080端口为server.xml中HTTP协议端口。
2)上述方法也同样适用于同一台机器上面部署多个JBoss的情况而不是同一个JBoss下多个配置。
3)一般情况下默认的4组端口足够使用,若仍不够,可自行添加其他port组。
4)若可能,仍是推荐不用的实例绑定到不同的IP地址上。

PS.

同一机器多JBoss实例常用场景:
1)32位JVM限制无法使用超过2G的内存,通过多实例可以充分利用服务器上大内存。
2)不用JBoss实例用于不同用途:开发环境、测试环境等。
3)希望在同一个机器上部署不同版本的JBoss。
4)希望在同一个机器上部署基于不同JVM的JBoss(不同应用对JVM要求不一样的情况)。
等等

一台机器运行多个JBoss多实例的更多相关文章

  1. 一台机器运行多个JBoss 4.2.3多实例,或多个同一版

    http://www.java123.net/v/426419.html     暂未验证 今天应用更新,放到测试服务器上打算测试.测试服务器上有个jboss4.2.3有项目在跑,我是功能改造又不想影 ...

  2. 一台Ubuntu server上安装多实例MySQL

    受环境所迫,在一台Ubuntu server上安装多个实例MySQL. 手动安装MySQL 环境:Ubuntu server 11.10 64bit + mysql-5.5.17-linux2.6-x ...

  3. 配置JBOSS多实例

    在使用Jbossserver时.非常多情况我们须要配置多个实例,以下为大家介绍JBoss里怎样配置多实例,以Jboss5.1为例介绍. 1.复制${JBOSS_HOME}\server\default ...

  4. jboss jms 实例

      最近温习了下EJB和JMS,整理了下思路,和大家分享下P2P和Pub/Sub的demo :JBoss 7 集成了HornetQ,JMS可以在HornetQ中间件运行,有时间在和大家分享关于Horn ...

  5. Window 下一台机器配置三个Tomcat实例

    下面我们把配置的详细过程写在下面,以供参考:(此例以配置三个Tomcat为例) 1. 下载apache-tomcat-8.0.63,下载下来的文件为apache-tomcat-8.0.63.zip. ...

  6. Tomcat 一台机器运行多个Tomcat

    转 https://www.cnblogs.com/andy1234/p/8866588.html 在一台Win10 PC 上面同时开启两个Tomcat系统为例. 1. 硬件环境 2. 到Tomcat ...

  7. windows下一台机器运行多个tomcat

    一.将本机原有的tomcat配置不变, 二.下载新的tomcat解压版,地址:http://tomcat.apache.org/download-80.cgi 三.下载完成解压后,为了方便区分,最好将 ...

  8. 使用elasticsearch7.3版本在一台主机上部署多个实例组建集群

    系统:centos 7.4 x64 主机ip:192.168.0.160 软件包:elasticsearch-7.3.0-linux-x86_64.tar.gz 配置步骤 vim /etc/secur ...

  9. 同一台服务器启动多个driver负载机实例

    COSBench添加driver负载机 说明:Driver是COSBench测试工具中对负载机的一种标记,相当于loadrunner中的负载发生器. 在进行测试时,不管出于什么原因,我有时候就想单台服 ...

随机推荐

  1. MongoDB数据库的初识

    1,MongoDB是基于分布式文件存储的数据库,有c++语言编写,旨在为WEB应用提供可扩展的高效性能数据存储解决方案. MongoDB是一个介于关系型数据库和非关系数据库之间的产品,是非关系数据库当 ...

  2. Oracle - 查询语句 - 多表关联查询

    /* SQL语句的历史版本 SQL89 比较多 SQL92 SQL99 多表关联查询 笛卡尔积 等值关联查询 非等值关联查询 左外连接 右外连接 全外连接 自连接 */ --------------- ...

  3. 清空sql 日志

    USE [master] GO ALTER DATABASE 库名 SET RECOVERY SIMPLE GO USE 库名 GO ,,TRUNCATEONLY) GO USE [master] G ...

  4. 解决Android 6.0获取wifi Mac地址为02:00:00:00:00:00问题【转】

    本文转载自:http://www.jb51.net/article/128398.htm 这篇文章主要介绍了Android 6.0获取wifi Mac地址为02:00:00:00:00:00的解决方法 ...

  5. es的forcemerge——按照天分割

    归并线程配置 segment 归并的过程,需要先读取 segment,归并计算,再写一遍 segment,最后还要保证刷到磁盘.可以说,这是一个非常消耗磁盘 IO 和 CPU 的任务.所以,ES 提供 ...

  6. I.MX6Q MfgTool2 ucl2.xml eMMC

    /**************************************************************************** * I.MX6Q MfgTool2 ucl2 ...

  7. Django Cache缓存系统介绍及Memcached使用

    在动态网站中,用户每次请求一个页面,服务器都会执行以下操作:查询数据库,渲染模板,执行业务逻辑,最后生成用户可查看的页面. 这会消耗大量的资源,当访问用户量非常大时,就要考虑这个问题了. 缓存就是为了 ...

  8. 第十七周 Leetcode 403. Frog Jump(HARD) 线性dp

    leetcode403 我们维护青蛙从某个石头上可以跳那些长度的距离即可 用平衡树维护. 总的复杂度O(n^2logn) class Solution { public: bool canCross( ...

  9. cookie绕过验证码登录

    #coding:utf-8 ''' cookie绕过验证码登录,第一步先访问登录页面获取登录前的cookie,第二步用fiddler抓到的手动登录的cookie加入cookie中,登录成功,第三步登录 ...

  10. 关于centOS7的一些笔记

    使用systemctl查看 开启 关闭服务: 查看: systemctl status arcgis.server 开启: systemctl start arcgis.server 关闭: syst ...