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>
	    <hostName>192.168.1.129</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没有演示者模式,不需要关注这部分内容。

四、基于 SVN 的部署同步器

SVN 的作用是在节点间共享部署的 C-Apps

1、下载 svnkit-all-1.8.7.wso2v1.jar

http://product-dist.wso2.com/tools/svnkit-all-1.8.7.wso2v1.jar 下载 SVNKit 并将复制到 <PRODUCT_HOME>/repository/components/dropins 文件夹中。

2、下载 trilead-ssh2-1.0.0-build215.jar

下载 http://maven.wso2.org/nexus/content/groups/wso2-public/com/trilead/trilead-ssh2/1.0.0-build215/trilead-ssh2-1.0.0-build215.jar 并复制到 <PRODUCT_HOME>/repository/components/lib 文件夹。 这个 .jar 文件是 SVNKit 正常工作所必需的。

3、配置基于 SVN 的部署同步

启用基于 SVN 的部署同步,并将 AutoCommit 属性标记为 true(管理节点配置为 true,工作节点 AutoCommit 属性标记为 false)。 编辑 <PRODUCT_HOME>/repository/conf/carbon.xml 文件,如下所示。

<DeploymentSynchronizer>
	<Enabled>true</Enabled>
	<AutoCommit>true</AutoCommit>
	<AutoCheckout>true</AutoCheckout>
	<RepositoryType>svn</RepositoryType>
	<SvnUrl>svn://192.168.131.128/wso2</SvnUrl>
	<SvnUser>wso2</SvnUser>
	<SvnPassword>123456</SvnPassword>
	<SvnUrlAppendTenantId>true</SvnUrlAppendTenantId>
</DeploymentSynchronizer>

五、启用集群

1、启动两个节点

对于第一个启动的节点,将显示类似于以下内容的 CLI 日志,表示它成功以集群方式启动。
在这里插入图片描述

启动第二个节点后,第一个节点显示类似于以下内容的 CLI 日志,表示另一个节点已加入群集。
在这里插入图片描述

第二个节点加入群集后,将显示类似于以下内容的 CLI 日志。
在这里插入图片描述

2、测试集群

在节点1更新配置
在这里插入图片描述
节点1更新配置
在这里插入图片描述

节点2同步配置
在这里插入图片描述
在这里插入图片描述
在节点2更新同样会把配置同步到节点1

3、同步碳应用

在节点1发布一个car包
在这里插入图片描述
会自动同步到节点2
在这里插入图片描述
向节点2发送消息,节点2收到的请求不会同步到节点1。但是碳应用在两个节点间已经同步了。如果节点2发生故障,可以把请求发送到节点1来进行处理。
在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菠萝蚊鸭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值