WSO2 ESB 5.0.0 最低高可用性部署

Posted 菠萝蚊鸭

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WSO2 ESB 5.0.0 最低高可用性部署相关的知识,希望对你有一定的参考价值。

WSO2 ESB 5.0.0 最低高可用性部署

一、高可用性部署(HA)

        WSO2 ESB 要启用 HA 处理,应该在一个集群中有两个 ESB 服务器。

        对于此部署,应将两个 ESB 节点配置为接收所有事件。为此,客户端应将每个请求发送到两个节点中的任何一个(即,使用负载均衡器或故障转移机制)。

        WSO2 ESB 5.0.0 中没有事件接收器,只能通过 HA 集群方式来在节点间同步事件。在WSO2 DAS中,则可以为每个事件接收器(WSO2Event event receiver)设置属性event.duplicated.in.cluster=true,接收器设置此属性时,它接收的每个事件都将发送到集群中的所有节点。

        如果活动节点发生故障,则另一个节点在收到请求时变为活动状态。

当故障节点重新启动时,通过同步,它将获取当前活动节点的所有内部状态。


二、数据库配置

1、配置驱动 jar 包

下载 JDBC 驱动包,放置 JDBC 驱动 jar 包,放置路径为:<PRODUCT_HOME>/repository/components/lib,放置到所有节点的该目录下。

在数据库中配置一个专用用户,授权。

USE mysql;
CREATE USER 'regadmin'@'%' IDENTIFIED BY 'regadmin';
ALTER USER 'regadmin'@'%' IDENTIFIED WITH mysql_native_password BY 'regadmin';
FLUSH PRIVILEGES;
GRANT ALL ON *.* TO regadmin@"%";

2、创建用户数据库和注册表数据库

创建以下数据库和关联的数据源

数据库描述
WSO2UM_DBJDBC 用户存储和授权管理器
REGISTRY_DB在产品节点中安装用于配置和治理注册表的共享数据库
REGISTRY_LOCAL节点的本地注册空间

在上一步中创建的数据库执行以下脚本。
source <PRODUCT_HOME>/dbscripts/mysql5.7.sql;

create database WSO2UM_DB character set latin1;
use WSO2UM_DB;
source <PRODUCT_HOME>\\dbscripts\\mysql5.7.sql;
source <PRODUCT_HOME>\\dbscripts\\identity\\mysql-5.7+.sql;
grant all on *.* TO regadmin@"%" identified by "regadmin";
 
create database WSO2REG_DB character set latin1;
use WSO2REG_DB;
source <PRODUCT_HOME>\\dbscripts\\mysql5.7.sql;
grant all on *.* TO regadmin@"%" identified by "regadmin";
 
create database REGISTRY_LOCAL character set latin1;
use REGISTRY_LOCAL;
source <PRODUCT_HOME>\\dbscripts\\mysql5.7.sql;
grant all on *.* TO regadmin@"%" identified by "regadmin";
  
alter user 'regadmin'@'%' identified by 'regadmin';
flush privileges;

三、节点配置

节点 1 配置

1、配置数据源

数据源配置文件 <PRODUCT_HOME>/repository/conf/datasources/master-datasources.xml

<datasources-configuration xmlns:svns="http://org.wso2.securevault/configuration">
  
    <providers>
        <provider>org.wso2.carbon.ndatasource.rdbms.RDBMSDataSourceReader</provider>
    </providers>
  
    <datasources>
      <datasource>
			<name>REGISTRY_LOCAL</name>
			<description>The datasource used by REGISTRY_LOCAL</description>
			<jndiConfig>
			<name>jdbc/WSO2CarbonDB</name>
			</jndiConfig>
			<definition type="RDBMS">
			<configuration>
				<url>jdbc:mysql://192.168.131.128:3306/REGISTRY_LOCAL?useUnicode=true&amp;characterEncoding=utf8&amp;useSSL=false&amp;allowPublicKeyRetrieval=true&amp;serverTimezone=GMT%2B8</url>
				<username>regadmin</username>
				<password>regadmin</password>
				<driverClassName>com.mysql.jdbc.Driver</driverClassName>
				<maxActive>50</maxActive>
				<maxWait>60000</maxWait>
				<testOnBorrow>true</testOnBorrow>
				<validationQuery>SELECT 1</validationQuery>
				<validationInterval>30000</validationInterval>
			</configuration>
			</definition>
		</datasource>
        <datasource>
			<name>WSO2UM_DB</name>
			<description>The datasource used by user manager</description>
			<jndiConfig>
			<name>jdbc/WSO2UM_DB</name>
			</jndiConfig>
			<definition type="RDBMS">
			<configuration>
				<url>jdbc:mysql://192.168.131.128:3306/WSO2UM_DB?useUnicode=true&amp;characterEncoding=utf8&amp;useSSL=false&amp;allowPublicKeyRetrieval=true&amp;serverTimezone=GMT%2B8</url>
				<username>regadmin</username>
				<password>regadmin</password>
				<driverClassName>com.mysql.jdbc.Driver</driverClassName>
				<maxActive>50</maxActive>
				<maxWait>60000</maxWait>
				<testOnBorrow>true</testOnBorrow>
				<validationQuery>SELECT 1</validationQuery>
				<validationInterval>30000</validationInterval>
			</configuration>
			</definition>
		</datasource>
		<datasource>
			<name>WSO2REG_DB</name>
			<description>The datasource used by the registry</description>
			<jndiConfig>
			<name>jdbc/WSO2REG_DB</name>
			</jndiConfig>
			<definition type="RDBMS">
			<configuration>
				<url>jdbc:mysql://192.168.131.128:3306/WSO2REG_DB?useUnicode=true&amp;characterEncoding=utf8&amp;useSSL=false&amp;allowPublicKeyRetrieval=true&amp;serverTimezone=GMT%2B8</url>
				<username>regadmin</username>
				<password>regadmin</password>
				<driverClassName>com.mysql.jdbc.Driver</driverClassName>
				<maxActive>50</maxActive>
				<maxWait>60000</maxWait>
				<testOnBorrow>true</testOnBorrow>
				<validationQuery>SELECT 1</validationQuery>
				<validationInterval>30000</validationInterval>
			</configuration>
			</definition>
		</datasource>

    </datasources>

</datasources-configuration>

2、在节点间共享用户存储

打开 <PRODUCT_HOME>/repository/conf/user-mgt.xml 文件并修改 <configuration> 元素的 dataSource 属性,如下所示

<configuration>
...
    <Property name="dataSource">jdbc/WSO2UM_DB</Property>
</configuration>

此配置中指定的数据源名称应与数据源配置的用户管理器 userdb 使用的数据源相同。

3、配置注册表

<PRODUCT_HOME>/repository/conf/registry.xml文件中,添加元素的 dataSource 属性 <dbConfig name="sharedregistry"> 如下。

<dbConfig name="sharedregistry">
    <dataSource>jdbc/WSO2REG_DB</dataSource>
</dbConfig>
<remoteInstance url="https://localhost:9443/registry"> 
    <id>gov1</id>
    <cacheId>regadmin@jdbc:mysql://192.168.131.128:3306/WSO2REG_DB?useUnicode=true&amp;characterEncoding=utf8&amp;useSSL=false&amp;allowPublicKeyRetrieval=true&amp;serverTimezone=GMT%2B8</cacheId>
    <dbConfig>sharedregistry</dbConfig>
    <readOnly>false</readOnly>
    <enableCache>true</enableCache>
    <registryRoot>/</registryRoot>
</remoteInstance>
<mount path="/_system/governance" overwrite="true">
    <instanceId>gov1</instanceId>
    <targetPath>/_system/governance</targetPath>
</mount>
<mount path="/_system/config" overwrite="true">
    <instanceId>gov1</instanceId>
    <targetPath>/_system/config</targetPath>
</mount>

添加注册表配置时,请勿替换以下配置。

<dbConfig name="wso2registry">
    <dataSource>jdbc/WSO2CarbonDB</dataSource>
</dbConfig>

4、开启 Hazlecast 集群

配置文件:<PRODUCT_HOME>/repository/conf/axis2/axis2.xml

  • a.如下所示将 clustering class="org.wso2.carbon.core.clustering.hazelcast.HazelcastClusteringAgent" 设置为 true 以启用 Hazlecast 集群。
<clustering class="org.wso2.carbon.core.clustering.hazelcast.HazelcastClusteringAgent" enable="true">

  • b.在两个节点上启用 wka 模式,如下所示。
<parameter name="membershipScheme">wka</parameter>

  • c.在每个节点的成员标签下添加两个 ESB 节点以及集群中的众所周知的成员,如下例所示。
<members>
    <member>
        <hostName>192.168.131.128</hostName>
        <port>4100</port>
    </member>
    <member>
        <hostName>192.168.131.129</hostName>
        <port>4100</port>
    </member>
</members>

  • d.对于每个节点,输入各自的服务器 IP 地址作为 localMemberHost 属性的值,如下所示。
<parameter name="localMemberHost">192.168.131.128</parameter>

5、在接收器中开启集群 CEP

配置文件:<PRODUCT_HOME>/repository/conf/event-processor.xml

  • a.通过设置以下属性启用 HA 模式。
<mode name="HA" enable="true">

  • b.通过设置以下属性禁用 Distributed 模式。
<mode name="Distributed" enable="false">

  • c.对于每个节点,在 HA 模式配置部分下输入事件的相应服务器 IP 地址,如下例所示。 在这里,需要指定事件同步节点、管理器节点以及演示者节点的服务器 IP 地址。
    当 ESB 启用 HA 模式时,默认情况下会启用状态持久性。 如果在启动集群后没有需要任何状态信息的实时用例,应该通过在 <PRODUCT_HOME>/repository/conf/event-processor.xml 文件中将持久性属性设置为 false 来禁用事件持久性,如下所示。
<persistence enable="false">
    <persistenceIntervalInMinutes>15</persistenceIntervalInMinutes>
    <persisterSchedulerPoolSize>10</persisterSchedulerPoolSize>
    <persister class="org.wso2.carbon.event.processor.core.internal.persistence.FileSystemPersistenceStore">
        <property key="persistenceLocation">cep_persistence</property>
    </persister>
</persistence>

当为 ESB 启用状态持久性时,ESB 的内部状态将持久保存在文件中。 这些文件不会自动删除。 因此,如果想节省 ESB 包中的空间,则需要手动删除它们。

这些文件在 <PRODUCT_HOME>/cep_persistence/<tenant-id> 目录中创建。 该目录对每个执行计划都有一个单独的子目录。 每个执行计划可以有多个文件。 每个文件名的格式为 <TIMESTAMP>_<EXECUTION_PLAN_NAME>(例如,1493101044948_MyExecutionPlan)。 如果要清除特定执行计划的文件,则需要将两个文件保留为最新的时间戳并删除其余文件。

启用 HA 模式后,默认情况下会在主动节点和被动节点之间同步事件。 当每秒吞吐量非常高时,这可能会导致高系统开销并影响性能

<!-- HA Mode Config -->
<mode name="HA" enable="true">
   ...
    <eventSync>
        <hostName>192.168.131.128</hostName>
	<management>
	    <hostName>192.168.131.128</hostName>
	<presentation>
	    <hostName>192.168.131.128</hostName>

确保不将 localhost/127.0.0.1/0.0.0.0 指定为上述配置中的主机名。 这是因为集群中的其他节点使用节点的主机名与其通信。

<PRODUCT_HOME>/repository/conf/event-processor.xml 文件中为 HA 部署模式配置了以下节点类型。

eventSync:此设置中的主动节点和被动节点都是事件同步节点,如简介中所述。因此,每个节点都应该在 <eventSync> 元素下指定其运行的主机和端口。

management:在此设置中,两个节点都执行相同的任务,因此,两个节点都被视为管理节点。因此,每个节点都应该在 <management> 元素下指定其运行的主机和端口。

presentation:可以选择仅将此设置中的两个节点之一指定为演示者节点。显示已处理信息的仪表板仅在演示者节点中配置。每个节点都应在 <presentation> 元素下指定指定的演示者节点正在运行的主机和端口。 <presentation> 元素下的主机和端口以及其他配置只有在 <!-- HA Mode Config --> 部分下设置了presenter enable="false 属性时才有效。WSO2 ESB 5.0.0没有演示者模式,不需要关注这部分内容。

节点 2 配置

1、复制节点1作为副本

直接复制配置好的节点1作为副本,并重命名为节点 2

2、修改配置文件

修改配置文件:<PRODUCT_HOME>/repository/conf/axis2/axis2.xml

  • d.对于每个节点,输入各自的服务器 IP 地址作为 localMemberHost 属性的值,如下所示。
<parameter name="localMemberHost">192.168.131.129</parameter>

<PRODUCT_HOME>/repository/conf/registry.xml文件中,添加元素的 dataSource 属性 <dbConfig name="govregistry"> 如下。这里的id和instanceId,必须和节点1一样

<dbConfig name="sharedregistry">
    <dataSource>jdbc/WSO2REG_DB</dataSource>
</dbConfig>
<remoteInstance url="https://localhost:9443/registry"> 
    <id>gov1</id>
    <cacheId>regadmin@jdbc:mysql://192.168.131.128:3306/WSO2REG_DB?useUnicode=true&amp;characterEncoding=utf8&amp;useSSL=false&amp;allowPublicKeyRetrieval=true&amp;serverTimezone=GMT%2B8</cacheId>
    <dbConfig>sharedregistry</dbConfig>
    <readOnly>false</readOnly>
    <enableCache>true</enableCache>
    <registryRoot>/</registryRoot>
</remoteInstance>
<mount path="/_system/governance" overwrite="true">
    <instanceId>gov1</instanceId>
    <targetPath>/_system/governance</targetPath>
</mount>
<mount path="/_system/config" overwrite="true">
    <instanceId>gov1</instanceId>
    <targetPath>/_system/config</targetPath>
</mount>

添加注册表配置时,请勿替换以下配置。

<dbConfig name="wso2registry">
    <dataSource>jdbc/WSO2CarbonDB</dataSource>
</dbConfig>

修改配置文件:<PRODUCT_HOME>/repository/conf/event-processor.xml

<!-- HA Mode Config -->
<mode name="HA" enable="true">
   ...
    <eventSync>
        <hostName>192.168.1.129</hostName>
	<management>
	    <hostName>192.168.1.129</hostName>
	<presentation>
	    

以上是关于WSO2 ESB 5.0.0 最低高可用性部署的主要内容,如果未能解决你的问题,请参考以下文章

WSO2 ESB 5.0.0 集群配置

WSO2 ESB 5.0.0 集群配置

WSO2 ESB 5.0.0 配置 MySQL 数据源

WSO2 ESB 5.0.0 配置 MySQL 数据源

WSO2 ESB 5.0.0 一些组件的使用教程

WSO2 ESB 5.0.0 一些组件的使用教程