WSO2 是不是支持 MySQL 主/从集群?

Posted

技术标签:

【中文标题】WSO2 是不是支持 MySQL 主/从集群?【英文标题】:Does WSO2 support MySQL Master/Slave Cluster?WSO2 是否支持 MySQL 主/从集群? 【发布时间】:2015-03-09 14:12:36 【问题描述】:

我曾尝试在 WSO2 集群部署中使用 mysql Master/Slave 集群,但启动时失败。 WSO2 是否只支持 MySql Share-Nothing 集群?它如何支持 MySQL Master/Slave?

我的数据源配置如下:

<datasource>
        <name>WSO2REG_LOCAL</name>
        <description>The datasource used for registry</description>
        <jndiConfig>
            <name>jdbc/WSO2REG_LOCAL</name>
        </jndiConfig>
        <definition type="RDBMS">
            <configuration>
                <url>jdbc:mysql:replication://wso2dbmaster:3306,wso2dbslave1:3306,wso2dbslave2:3306/WSO2_REG_LOCAL_AM_GW_MGR_1?roundRobinLoadBalance=true;autoReconnect=true;</url>
                <username>test</username>
                <password>test</password>
                <driverClassName>com.mysql.jdbc.ReplicationDriver</driverClassName>
                <defaultAutoCommit>false</defaultAutoCommit>
                <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>This shared datasource used for registry</description>
        <jndiConfig>
            <name>jdbc/WSO2REG_DB</name>
        </jndiConfig>
        <definition type="RDBMS">
            <configuration>
                <url>jdbc:mysql:replication://wso2dbmaster:3306,wso2dbslave1:3306,wso2dbslave2:3306/WSO2_REG_DB?roundRobinLoadBalance=true;autoReconnect=true;</url>
                <username>test</username>
                <password>test</password>
                <driverClassName>com.mysql.jdbc.ReplicationDriver</driverClassName>
                <defaultAutoCommit>false</defaultAutoCommit>
                <maxActive>50</maxActive>
                <maxWait>60000</maxWait>
                <testOnBorrow>true</testOnBorrow>
                <validationQuery>SELECT 1</validationQuery>
                <validationInterval>30000</validationInterval>
            </configuration>
        </definition>
    </datasource>

registry.xml 配置如下:

<currentDBConfig>wso2registry</currentDBConfig>
<readOnly>false</readOnly>
<enableCache>true</enableCache>
<registryRoot>/</registryRoot>

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

<dbConfig name="sharedregistry">
    <dataSource>jdbc/WSO2REG_DB</dataSource>
</dbConfig>

<remoteInstance url="https://localhost:9443/registry">
    <id>instanceid</id>
    <dbConfig>sharedregistry</dbConfig>
    <readOnly>false</readOnly>
    <enableCache>true</enableCache>
    <registryRoot>/</registryRoot>
    <cacheId>wso2db@jdbc:mysql:replication://wso2dbmaster:3306,wso2dbslave1:3306,wso2dbslave2:3306/WSO2_REG_DB?roundRobinLoadBalance=true;autoReconnect=true;</cacheId>
</remoteInstance>

启动时出现如下异常。

TID: [0] [AM] [2015-03-09 13:30:51,728] ERROR org.wso2.carbon.registry.core.internal.RegistryCoreServiceComponent -  Unable to create fixed remote mounts. org.wso2.carbon.registry.core.internal.RegistryCoreServiceComponent

org.wso2.carbon.registry.core.exceptions.RegistryException:执行处理程序链时发生异常。空值 …… ID:[0] [AM] [2015-03-09 13:31:03,417] 错误 org.wso2.carbon.registry.core.dataaccess.TransactionManager - 无法回滚事务。 org.wso2.carbon.registry.core.dataaccess.TransactionManager java.sql.SQLException:可用连接总数小于回滚或提交的连接总数 在 org.wso2.carbon.registry.core.jdbc.dataaccess.JDBCDatabaseTransaction$ManagedRegistryConnection.rollback(JDBCDatabaseTransaction.java:1284) 在 org.wso2.carbon.registry.core.jdbc.dataaccess.JDBCTransactionManager.rollbackTransaction(JDBCTransactionManager.java:120) 在 org.wso2.carbon.registry.core.jdbc.EmbeddedRegistry.rollbackTransaction(EmbeddedRegistry.java:447) 在 org.wso2.carbon.registry.core.jdbc.EmbeddedRegistry.get(EmbeddedRegistry.java:552) 在 org.wso2.carbon.registry.core.caching.CacheBackedRegistry.get(CacheBackedRegistry.java:180) 在 org.wso2.carbon.registry.core.session.UserRegistry.get(UserRegistry.java:524) ...

【问题讨论】:

【参考方案1】:

通常出现此错误的原因是,您将同一数据库用于本地注册表空间和治理空间。 如果您使用相同的 jdbc/WSO2REG_DB 数据库作为本地和治理注册表空间。从定义上讲是错误的。在集群中的任何节点之间共享本地注册表空间是不正确的。理想情况下,您可以使用默认的 H2 数据库作为本地注册表数据库 (jdbc/WSO2CarbonDB)。基本上,您需要通过指向 H2 db 在 registry.xml 文件中保持以下配置。刚刚发现一些 blog 关于相同的错误可能会有所帮助。

&lt;currentDBConfig&gt;wso2registry&lt;/currentDBConfig&gt;

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

【讨论】:

我没有使用本地注册数据库进行分享,请看我添加的datasource.xm和registry.xml的内容。如果我将所有 jdbc 连接 url 替换为“jdbc:mysql://wso2db:3306”并将 driverClassName 替换为“com.mysql.jdbc.Driver”,则它可以正常工作。 Asela,你对这个问题有什么想法吗?

以上是关于WSO2 是不是支持 MySQL 主/从集群?的主要内容,如果未能解决你的问题,请参考以下文章

为 WSO2 ESB 5.0.0 集群配置 MySQL 数据库

WSO2 Identity Server 集群:集群中的每个节点是不是需要共享一个通用的 SQL 数据库?

WSO2 EI 6.0.0 集群部署文档 - MySQL版

WSO2 EI 6.0.0 集群部署文档 - MySQL版

基于Galera Cluster多主结构的Mysql高可用集群

搭建MHA实现MySQL集群高可用