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>