jboss规则引擎KIE Drools 6.3.0-集群篇

DROOLS集群的原理

  1. Drools集群是架设在jboss集群之上的
  2. Drools集群其实是WorkBench(WB)间的集群
  3. KIE SERVER是JSON服务,它是架设在WB上的,一个WB可以挂1个、多个KIE SERVER
  4. WB除了HTTP间的集群还需要做WB内Repository间的集群,WB的REPO间的集群使用的是GIT协议,它们可以使用ZooKeeper(ZK)来进行集群,俗称“VFS-REPO集群”
  5. 使用APACHE HELIX可以对ZK进行集群划分

DROOLS在生产上的大规模铺设与应用

DROOLS集群后的使用规范

对于Legacy System来说,它可以使用DROOLS集群内任何一台KIE SERVER来进行规则访问。

  • 业务开发人员
  • 普通办公人员
  • 业务执行人员
  • IT管理员

这些。。。对于DROOLS的集群来说他们都被称为内部用户,内部用户只可以通过KIE WB的主控域对Drools内的任何资源进行操作,WB的主控域即为DROOLS集群所属的JBOSS的那个主控,它的地址永远只能是一个。

建立JBOSS集群

按照《JBOSSEAP实战教程2》搭建一个JBOSS的FULL集群,我们采取一主一从,MASTER又同时是CONTROLLER,集群搭完后参数列表如下所示,所以我们的KIE WB的主控端即为8080,一切对于DROOLS内的Assets的更改只可以通过http://192.168.0.101:8080/kie-wb来做更改,而KIE SERVER的服务可以是http://192.168.0.101:8080也可以是http://192.168.0.101:8081 ,并确保每个节点至少4096m的JVM内存可用。

实例名

IP

端口

角色

master1

192.168.0.101

8080

master

slave1

192.168.0.101

8081

slave

搭建ZOOKEEPER集群

在本例中我们使用的是“zookeeper-3.4.6”,把它解压至/opt/zk目录后做一下简单修改即可以,本教程为了演习,在ZK本身间没有作集群,只使用ZK单节点功能即够用了。下面来看ZK的配置,zoo1.cfg文件的内容:

使用 zkServer.sh start zoo1.cfg即可启动

使用Apache Helix来对Zookeeper进行cluster的创建与管理

在本例中我们使用的是“helix-0.6.5版”

开始使用helix,在ZK启动的情况下

$ cd $HELIX_HOME/bin

$ ./helix-admin.sh --zkSvr localhost:2181 --addCluster kie-cluster

我们在ZK里创建了一个叫kie-cluster的东东,记下这个名字

$ ./helix-admin.sh --zkSvr localhost:2181 --addNode kie-cluster nodeOne:12345

$ ./helix-admin.sh --zkSvr localhost:2181 --addNode kie-cluster nodeTwo:12346

接着,我们在这个kie-cluster下创建了2个节点,其中:nodeOne:12345不是端口号,而是一个“唯一标示”,节点间的标示不要重复即可,它的命名一定是 “节点名:数字”这样的形式,这是ZK的一种表示方式。

如果你的集群需要有3个节点,那你就需要addNode三个。

$ ./helix-admin.sh --zkSvr localhost:2181 --addResource kie-cluster vfs-repo 1 LeaderStandby AUTO_REBALANCE

我们为kie-cluster分配一个Resource,这个Resource的标识我们叫“vfs-repo”,这个名字你也可以随便,无所谓的,只要到时记下来就 可以了。

LeaderStandby是ZK的机制,AUTO_REBALANCE是告诉ZK,需要把刚才的nodeOne, nodeTwo重新分配给vfs-repo作用的。

$ ./helix-admin.sh --zkSvr localhost:2181 --rebalance kie-cluster vfs-repo 2

执行直正的rebalance,vfs-repo后面的数字2代表要rebalance两个节点,如果你有3个节点,那你必须写成: kie-cluster vfs-repo 3

$  ./run-helix-controller.sh --zkSvr localhost:2181 --cluster kie-cluster 2>&1 > controller.log &

一切就绪后,我们以后台进程的模式启动helix,并把日志输出到当前目录的controller.log文件中。

开始真正安装drools的集群-预配置-DataSource

先不要安装KIE-WB和KIE-SERVER,把JBOSS集群以full模式启动起来。先启master再启slave。

因为我们用的是full模式,因此不要忘了在domain.xml的profile name=“full”段配上datasource和相应的jndi

开始真正安装drools的集群-预配置-master1 System Properties

启动后,我们要为我们的KIE WB设置System Properties与JVM参数,修改host.xml文件

Master1上的System Properties,注意我红色加粗的部分是和刚才在helix中配置时完全需要匹配的,其中在helix中设置的nodeOne:12345在此需要标示成nodeOne_12345,因为在jboss集群中会把:变成_。这是kie wb中去做的转换,没有为什么 。

<system-properties>
                <property name="jboss.node.name" value="master1" boot-time="false"/>
                <property name="org.uberfire.nio.git.dir" value="/opt/gitrepo/master1" boot-time="false"/>
                <property name="org.uberfire.metadata.index.dir" value="/opt/gitrepo/master1" boot-time="false"/>
                <property name="org.uberfire.cluster.id" value="kie-cluster" boot-time="false"/>
                <property name="org.uberfire.cluster.zk" value="localhost:2181" boot-time="false"/>
                <property name="org.uberfire.cluster.local.id" value="nodeOne_12345" boot-time="false"/>
                <property name="org.uberfire.cluster.vfs.lock" value="vfs-repo" boot-time="false"/>
                <property name="org.uberfire.nio.git.daemon.port" value="9418" boot-time="false"/>
                <property name="org.uberfire.nio.git.ssh.host" value="0.0.0.0" boot-time="false"/>
                <property name="org.uberfire.nio.git.ssh.port" value="18001" boot-time="false"/>
</system-properties>

开始真正安装drools的集群-预配置-slave1 System Properties

<system-properties>
                <property name="jboss.node.name" value="slave1" boot-time="false"/>
                <property name="org.uberfire.nio.git.dir" value="/opt/gitrepo/slave1" boot-time="false"/>
                <property name="org.uberfire.metadata.index.dir" value="/opt/gitrepo/slave1" boot-time="false"/>
                <property name="org.uberfire.cluster.id" value="kie-cluster" boot-time="false"/>
                <property name="org.uberfire.cluster.zk" value="localhost:2181" boot-time="false"/>
                <property name="org.uberfire.cluster.local.id" value="nodeTwo_12346" boot-time="false"/>
                <property name="org.uberfire.cluster.vfs.lock" value="vfs-repo" boot-time="false"/>
                <property name="org.uberfire.nio.git.daemon.port" value="9419" boot-time="false"/>
                <property name="org.uberfire.nio.git.ssh.port" value="18002" boot-time="false"/>
                <property name="org.uberfire.nio.git.ssh.host" value="0.0.0.0" boot-time="false"/>
</system-properties>

这些System Properties可都要配置在master和slave上的host.xml文件中的如下段哦!

开始真正安装drools的集群-预配置-master1 JVM Properties

<property name="org.uberfire.nio.git.ssh.port" value="18001" boot-time="false"/>
</system-properties>

<jvm name="master1" debug-enabled="false">
                <heap size="4096m" max-size="4096m"/>
                <permgen size="256m" max-size="512m"/>
                <jvm-options>
                    <option value="-XX:-UseGCOverheadLimit"/>
                </jvm-options>
</jvm>

开始真正安装drools的集群-预配置-slave1 JVM Properties

<property name="org.uberfire.nio.git.ssh.host" value="0.0.0.0" boot-time="false"/>
</system-properties>

<jvm name="slave1" debug-enabled="false">
                <heap size="4096m" max-size="4096m"/>
                <permgen size="256m" max-size="512m"/>
                <jvm-options>
                    <option value="-XX:-UseGCOverheadLimit"/>
                </jvm-options>
</jvm>

开始真正安装drools的集群-修改master与slave的JBOSS启动文件

$MASTER1_HOME/bin/domain.conf文件

export JAVA_OPTS="$JAVA_OPTS -Xms4g -Xmx4g  -XX:-UseGCOverheadLimit -XX:MaxPermSize=512m -Dorg.jbpm.server.ext.disabled=true -Dorg.kie.demo=false -Djava.awt.headless=true -Dorg.kie.server.persistence.ds=java:/comp/env/jdbc/jbpm -Dorg.kie.server.controller=http://192.168.0.101:8080/kie-wb/rest/controller -Dorg.kie.server.controller.user=kieserver -Dorg.kie.server.controller.pwd=password_1 -Dorg.kie.server.id=kie-server-8080  -Dorg.kie.server.location=http://192.168.0.101:8080/kie-server/services/rest/server"

$SLAVE1_HOME/bin/domain.conf文件

export JAVA_OPTS="$JAVA_OPTS -d64 -server -Xms4g -Xmx4g  -XX:MaxPermSize=512m  -XX:-UseGCOverheadLimit -Dorg.jbpm.server.ext.disabled=true -Dorg.kie.demo=false -Djava.awt.headless=true -Dorg.kie.server.persistence.ds=java:/comp/env/jdbc/jbpm -Dorg.kie.server.controller=http://192.168.0.101:8080/kie-wb/rest/controller -Dorg.kie.server.controller.user=kieserver -Dorg.kie.server.controller.pwd=password_1  -Dorg.kie.server.id=kie-server-8081  -Dorg.kie.server.location=http://192.168.0.101:8081/kie-server/services/rest/server"

上述2个启动文件会被master和slave在使用domain.sh启动时所调用。

它们干了这么几件事:

告诉master,在它上面安装的kie-server的controller为192.168.0.101:8080,kie-server1的名字为kie-server-8080它安装于master内,并且kie-sever向kie-wb发送心跳同步时需要知道kie-wb的username/password(所有kie-server只能有一个controller)

告诉slave,在它上面安装的kie-sever的controller为192.168.0.101:8080,kie-server2的名字为kie-server-8081它安装于slave内,并且kie-sever向kie-wb发送心跳同步时需要知道kie-wb的username/password(所有kie-server只能有一个controller)

kie-wb与kie-server共用一个datasource,datasource的jndi名为:java:/comp/env/jdbc/jbpm

布署kie-wb与kie-server

把kie-wb.war和kie-server.war以目录形式(exploded war)上传到 $maser_home/domain/data目录下。

在master所在的domain.xml文件中増加如下语句:

</socket-binding-groups>

    <deployments>
        <deployment name="kie-wb.war" runtime-name="kie-wb.war">
            <fs-exploded path="/opt/jboss_master1/domain/data/kie-wb.war"/>
        </deployment>
        <deployment name="kie-server.war" runtime-name="kie-server.war">
            <fs-exploded path="/opt/jboss_master1/domain/data/kie-server.war"/>
        </deployment>
    </deployments>

分别以domain.sh启动master1与slave1后打开http://192.168.0.101:9990 这个图形化管理界面

使用【Assign】按钮,把kie-wb与kie-server Assign给到kie-server-group,当界面中的“布署进度“弹出窗体消失后你会看到这两个”包”的Assignments列中的数值会从原来的“0”变为“1”,它代表kie-wb与kie-server已经在”controller”端布署成功,并且已经自动同步到了controller下挂的所有slave中了。

构建kie-server集群,为系统提供规则服务

此时,我们的kie-wb已经完成了集群布署,如果你使用:
http://192.168.0.101:8080/kie-wb
http://192.168.0.101:8081/kie-wb
是可以分别访问我们的规则引擎WEB开发工具的。

而http://192.168.0.101:8080/kie-wb 为整个“规则群”的主控端,一切资源在主控端改变,相关的slave会自动同步主控端。

而一切在slave上的改变,是不会同步到主控端和其它slave身上的,这也是jboss controller“集中统一管理”的一个特点,但这并不意味着KIE SERVER对外访问也是这样。

对外,无论是任何一台KIE SERVER都会为客户提供相同的且版本统一的“规则API服务”。

集群成功启动后在主控端我们已经可以看到2台kie server了。

  • 一台启动在8080端口
  • 另一台启动在8081端口。

我们分别在两台KIE-SERVER上布署一个相同的“规则服务”

名字完全一样 

然后我们使用《 JBOSSEAP实战教程2 》-“使用NGINX来对JBOSS集群作分发”中的配置把NG以UPSTREAM的方式指向:
http://192.168.0.101:8080
http://192.168.0.101:8081

随后,我们就可以通过如:http://192.168.0.101/kie-server/services/rest/server/ 来访问我们的“规则群”了

我们现在把master kill掉,再来通过http://192.168.0.101/kie-server/services/rest/server/containers/instances/HelloDrools_v1 post一个规则请求,看,请求自动被分发到了slave上,而对于“访问端”一切都是“透明的”。

时间: 2024-09-11 11:24:00

jboss规则引擎KIE Drools 6.3.0-集群篇的相关文章

jboss规则引擎KIE Drools 6.3.0-高级讲授篇

在生产环境怎么用BRMS 回溯BRMS开发教程中的那张"业务变现加速器"架构图,考虑下面的问题 业务开发人员开发规则 IT人员提供FACT 关键在于"全动态" SQL语句改了怎么办?不重启 DAO层改了怎么办?不重启 Mybatis的配置文件改了怎么办?不重启 按照上次的<jboss规则引擎KIE Drools 6.3.0 Final 教程>,一起来看一个实际的场景 如何熊掌与鱼兼得? 做到以下几点是否就可以"全得"? 规则更改不重启

jboss规则引擎KIE Drools 6.3.0 Final 教程(1)

前言 目前世面上中文的KIE DROOLS Workbench(JBOSS BRMS)的教程几乎没有,有的也只有灵灵碎碎的使用机器来翻译的(翻的不知所云)或者是基于老版本的JBOSS Guvnor即5.x的一些教程,而且这些教程都是"缺胳膊少腿"的,初学者看后不知道它到底在干吗?能干吗?能够解决自己系统中什么问题. 所以笔者自己写了几个例子,把整个最新的英文版的KIE DROOLS 6.3.0.Final的官方教程给串了起来,用于供读者使用并以此来作为入门以及相关SOA理念的推广的第一

jboss规则引擎KIE Drools 6.3.0 Final 教程(3)

在前2部教程中,介绍了如何在本地运行.drools文件以及使用stateless的方法访问远程repository上的规则. KIE Drools还提供了一种叫有状态-stateful的访问方式. 运行KIE-DROOLS上的规则-另一种写法 先上代码 String url = "http://192.168.0.101:8080/kie-drools/maven2/org/sky/drools/ApprovalDecision/1.0.0/ApprovalDecision-1.0.0.jar&

jboss规则引擎KIE Drools 6.3.0 Final 教程(2)

使用JAVA程序调用规则-运行KIE-DROOLS上的规则 第一步:建立一个MAVEN的Java工程 POM.XML 给出pom.xml文件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0

联想SureHA 2.0集群软件是否占用80端口?

故障现象: SureHA 2.0集群软件是否占用80端口? 解决方案: SureHA 2.0集群软件使用的webmanager嵌入在软件本体中,使用29003端口进行访问,与80端口没有冲突.

Spark-1.4.0集群搭建

主要内容 Ubuntu 10.04 系统设置 ZooKeeper集群搭建 Hadoop-2.4.1集群搭建 Spark 1.4.0集群搭建 假设已经安装好Ubuntu操作系统 Ubuntu 10.04设置 1.主机规划 主机名 IP地址 进程号 SparkMaster 192.168.1.103 ResourceManager DataNode.NodeManager.JournalNode.QuorumPeerMain SparkSlave01 192.168.1.101 ResourceMa

benchmark-redis3.0集群性能问题

问题描述 redis3.0集群性能问题 redis3.0集群为何在3主3从,6主6从,12主12从的集群环境下使用benchmark测试的性能几乎相同? 解决方案 不明白你想问什么,能把问题说明的再清楚一点吗? 解决方案二: 怎么用redis-benchmark对redis cluster集群进行测试???求指导

hdfs-Hadoop2.6.0集群用hadoop df -mkdir -p创建文件

问题描述 Hadoop2.6.0集群用hadoop df -mkdir -p创建文件 我用hadoop2.6.0创建了一个master和4个worker的集群,启动hdfs后,用hadoop fs -mkdir -p /data/wordcount文件夹后,在worker:50075上看不到我新建的这个文件, 请问下各位是为什么 解决方案 Hadoop2.6.0集群安装部署

Spark修炼之道(进阶篇)——Spark入门到精通:第一节 Spark 1.5.0集群搭建

作者:周志湖 网名:摇摆少年梦 微信号:zhouzhihubeyond 本节主要内容 操作系统环境准备 Hadoop 2.4.1集群搭建 Spark 1.5.0 集群部署 注:在利用CentOS 6.5操作系统安装spark 1.5集群过程中,本人发现Hadoop 2.4.1集群可以顺利搭建,但在Spark 1.5.0集群启动时出现了问题(可能原因是64位操作系统原因,源码需要重新编译,但本人没经过测试),经本人测试在ubuntu 10.04 操作系统上可以顺利成功搭建.大家可以利用CentOS