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_DB | JDBC 用户存储和授权管理器 |
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&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true&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&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true&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&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true&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&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true&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&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true&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 最低高可用性部署的主要内容,如果未能解决你的问题,请参考以下文章