当前位置 : 首页 » 文章分类 :  开发  »  JBoss-集群

JBoss-集群

JBoss集群笔记


集群

什么是集群

集群是指把不同的服务器集中在一起,组成一个服务器集合,这个集合给客户端提供一个虚拟的平台,使客户端在不知道服务器集合结构的情况下可以对这一服务器集合进行部署应用,获取服务等操作。集群是企业应用的主要特点,它可以提供:

  • 高扩展性:可以根据自己业务需求添加任意多的服务器到集群
  • 高可用性:使用透明的负载均衡和容错机制,对客户端隐藏集群内部的错误

集群分类

习惯上,把集群分为高可用(High Availability,简称HA)集群和高性能计算(High Perfermance Computing,简称HPC)集群两类。

  • 高可用(High Availability,HA)集群:HA集群的目标是提高系统的可使用性 (availability),即可靠性 (reliability)和可维护性 (maintainability)。
    HA集群的核心是防止单点失效,这一般是通过失败转移来实现的,即在一个节点失效后由另一个节点接替服务。不丢失用户状态。HA集群的其他主要特性还包括负载均衡、session同步等。我们使用的SQL Server数据库的双机热备和Oracle的RAC都属于HA集群。
  • 高性能计算(High Perfermance Computing,HPC)集群:HPC集群采用并行计算技术提供超大规模计算和存储能力,多数超级计算机都是HPC集群。

jboss集群

Jboss集群是HA集群。
在jboss eap中,集群又叫做分区(partition),集群中的一个节点就是一个jboss实例。节点间的通信由JGroups负责,通过JGroups Channel可发现哪些节点在集群中,并可提供节点间的可靠消息交换等核心功能。具有相同配置和名称的JGroups channels可动态发现彼此并自动组成一个集群,这也就是为什么在同一网络中简单的以”run -c production”启动2个jboss实例即可组成一个集群——每个jboss实例启动了默认配置channel,所以他们可互相发现彼此并组成一个集群。通过启动或停止一个与集群中其他节点相同配置的channel,可动态的向集群中添加节点或从集群中删除节点。

在jboss eap中,启动参数中配置相同的-g(partition name,分区名称) 和 -u(multicast address,多播地址)参数的节点可组成一个集群。

集群服务架构

从客户端应用的角度来看,jboss eap有2种基本的服务架构:

  • 客户端拦截器(Client-side interceptor)架构,又叫smart proxies或stubs,适于用C/S结构
  • 外部负载均衡器(External Load balancer)架构,适用于B/S结构

客户端拦截器架构

客户端获取服务器的一个代理对象(proxy object),此后都在此代理对象上做服务调用,代理对象负责发现集群节点、处理请求路由、处理客户端输入参数、并向客户端返回调用结果。此代理总是维护一个集群的最新节点拓扑状态,例如所有可用的节点IP,路由分发算法,以及目标节点不可用时的失败转移策略,并且所有这些对客户端都是透明的。

①客户端连接代理;②代理向Node1发送请求;③Node1节点宕机;④代理转换到Node2;⑤代理向Node2发送请求;⑥代理从Node2动态下载类

外部负载均衡器架构

负载均衡器架构由负载均衡器和n个集群节点组成。每个节点是一个Jboss服务器实例。负载均衡器是全局唯一的前置机,全部用户请求都发到负载均衡器,由其转发到各节点。当负载均衡器发现一个节点失效后,会将请求转发到另一个节点上,从而保证服务得以延续。负载均衡器同时负责加权静态负载均衡调度。总之,负载均衡器的健康程度决定了集群的全局健康度,负载均衡器失败将导致集群全部失效。这是前置机架构集群的主要潜在问题。

①浏览器发送请求;②负载均衡器转发请求到Node1;③Node1宕机;④负载均衡器切换为使用Node2;⑤负载均衡器转发请求到Node2

jboss5集群配置

  • 绑定IP
    当你运行JBoss,不管是不是集群模式,你都需要告诉JBoss他需要绑定到哪个地址来进行监听通讯(默认地址是Localhost,这个地址比较安全但是不是特别有效,特别是在配置集群环境的时候),所以你需要确定使用什么地址。

  • 保证多播可用
    JBossAS默认使用UDP多播来进行集群服务器间通讯的,保证每个服务器所在的网络内的路由器、交换机都配置支持多播,如果你想要在一台服务器上运行多个节点服务,那就需要保证当前服务器系统的路由表中包含一个多播路由地址。
    JBossAS集群不是必须使用UDP多播,它也可以配置成使用TCP unicast来进行节点间交互。

  • 为每个节点确定一个唯一的”ServerPeerID”
    JBoss Messaging集群需要这个唯一ID,如果不运行JBoss Messaging的话就可以忽略这个配置(例如你可以将JBM从服务器配置的deploy目录中移出)。JBM需要在每个节点有一个唯一的编号,即”ServerPeerID”。
    使用-Djboss.messaging.ServerPeerID=n设置消息ID,n值必须为0到1023之间的整数,设为其他值在启动时会报 java.lang.IllegalArgumentException 错误。

除了以上这些步骤,下面有两个可选的步骤,用来帮助你确保你的集群同运行在同一网络中的其他的JBoss集群区分开来。

  • 为集群取个唯一的名字
    JBossAS集群的默认名称是”DefaultPartition”,为你的环境中的不同集群取不同的名称。例如”QAPartition”或者”BobsDevPartition”。名称中”Partition”的使用不是必须的。如果从效率考虑最好短一些,因为它将被包含在所有集群内交互的消息中。
    使用-g 集群名称参数设置集群名称

  • 为集群选择一个唯一的多播地址
    JBossAS默认使用UDP多播来进行节点间交互。为你使用的每个群选择一个为一个的多播地址。一个好的多播地址是类似239.255.x.y的方式。
    使用-u IP启动参数设置多播地址。


jboss5集群配置实例

在所有的服务器上安装JBossAS
在服务器上安装JBoss AS的最简单的方法就是把下载的JBoss解压缩出来就可以.
如果想要在一台服务上运行多个JBossAS实例,你可以把JBoss分别安装在文件系统的不同位置,也可以仅拷贝all目录下的配置内容,例如JBoss的解压目录是/var/jboss,可以这样做
cd /var/jboss/server
cp -r all node1
cp -r all node2

在局域网环境中以集群方式启动JBossAS的最简单方式就是使用”–c all”参数来启动服务实例。这些服务器实例会自动组成一个集群。
让我们看一些不同情况下的启动方法。在每个情况下我们都只创建一个有两个节点的集群,第一个节点的”ServerPeerID”是1,第二个节点的是2。我们把我们的群命名为”DocsPartition”,使用239.255.100.100这个多播地址。

场景1:各节点在不同机器上
这是最常见的使用场景。假设两台机器分别叫做”node1”与”node2”,node1的地址是192.168.0.101,node2的地址是192.168.0.102,他们的”ServerPeerID”分别是1和2。
节点1加载过程
./run.sh –c all –g DocsPartition –u 239.255.100.100 -b 192.168.0.101 –Djboss.messaging.ServerPeerID=1
节点2只有-b参数与ServerPeerID参数不同
./run.sh –c all –g DocsPartition –u 239.255.100.100 -b 192.168.0.102 –Djboss.messaging.ServerPeerID=2
参数-c使用all配置项,该配置项包含集群的配置项,参数-g设置集群的名称。参数-u设置集群内节点交互的多播地址。参数-b设置需要绑定的地址,参数-D设置系统属性jboss.messaging.ServerPeerId的值,JBoss消息需要这个值在群中要求唯一。

场景2:在单台有两个IP地址的服务器上搭建2个节点
在同一台设备上运行多个节点这在开发环境中是经常出现的。在这种情况下,该服务器有多个地址,例如IP地址,这样就可以让多个JBoss实例分别绑定到不同的地址上,防止在地址绑定时出现端口冲突的问题。
假设这个服务器被分配了192.168.0.101和192.168.0.102两个地址。与场景1不同,我们需要保证每个AS实例都要有自己单独的工作区域。所以不能使用all配置实例,我们使用node1与node2配置实例,这两个都拷贝自all实例。
打开一个控制窗口运行第一个实例:
./run.sh –c node1 –g DocsPartition –u 239.255.100.100 -b 192.168.0.101 –Djboss.messaging.ServerPeerID=1
节点2只有-b参数与-c参数不同,同时ServerPeerID的值不同
./run.sh –c node2 –g DocsPartition –u 239.255.100.100 -b 192.168.0.102 –Djboss.messaging.ServerPeerID=2

场景3:在一台只有一个地址的服务器上安装两个节点实例
这个与场景2类似,不同时着台机器只有一个地址。两个实例不能同时绑定到到同一个地址和端口,所以我们需要通知JBoss启动实例时绑定不同的端口。可以通过配置jboss.service.binding.set系统参数来配置,这个参数由ServiceBindingManager服务提供。
打开一个控制窗口运行第一个实例:
./run.sh –c node1 –g DocsPartition –u 239.255.100.100 -b 192.168.0.101 –Djboss.messaging.ServerPeerID=1 -Djboss.service.binding.set=ports-default
节点2:
./run.sh –c node2 –g DocsPartition –u 239.255.100.100 -b 192.168.0.102 –Djboss.messaging.ServerPeerID=2 -Djboss.service.binding.set=ports-01
这样可以通知ServiceBindingManager在第一个节点使用默认端口(例如JNDI中是1099)。第二个节点使用”prots-01”绑定设置,默认是在各个默认端口的基础上累加100(例如JNDI中是1199)。可以从jboss-as/server/all/conf/bindingservice.beans/META-INF/bindings-jboss-beans.xml文件中看到更多的ServiceBindingManager配置项。


参考


上一篇 Navicat

下一篇 Apache-Camel

阅读
评论
2.8k
阅读预计10分钟
创建日期 2016-11-28
修改日期 2018-06-22
类别
标签

页面信息

location:
protocol:
host:
hostname:
origin:
pathname:
href:
document:
referrer:
navigator:
platform:
userAgent:

评论