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 最低高可用性部署的主要内容,如果未能解决你的问题,请参考以下文章