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

集群配置见:WSO2 ESB 5.0.0 集群配置

一、集群数据库

每个基于 Carbon 的产品都使用一个数据库来存储用户管理详细信息和注册表数据等信息。 集群中的所有节点都必须使用一个中央数据库进行配置和治理注册表挂载。

  • 不建议在生产中使用 H2。
  • 不建议在企业测试和生产环境中使用嵌入式 H2 数据库。 它具有较低的性能、集群限制,并且可能导致文件损坏失败。 请改用行业标准的 RDBMS,例如 Oracle、PostgreSQL、MySQL 或 MS SQL。
  • 可以在开发环境中使用嵌入式 H2 数据库,也可以将其用作注册表挂载中的本地注册表。

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

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

下图说明了这些数据库如何连接到管理和工作节点
在这里插入图片描述

二、创建数据库

执行以下步骤来创建必要的数据库。这里使用 MySQL 作为示例,可以使用任何合适的数据库来代替。

  • 1、下载并安装 MySQL 服务器。

  • 2、下载 MySQL JDBC 驱动程序。

  • 3、将下载的 MySQL 驱动压缩包解压,将 MySQL JDBC 驱动 JAR (mysql-connector-java-x.x.xx-bin.jar) 复制到管理节点和工作节点的 <PRODUCT_HOME>/repository/components/lib目录中。

  • 4、通过打开 /etc/hosts 文件并添加以下行来定义用于配置新数据库权限的主机名:<MYSQL-DB-SERVER-IP> carbondb.mysql-wso2.com,仅当数据库不在本地计算机和单独的服务器上时,才需要执行此步骤。

  • 5、在终端/命令窗口中输入以下命令,其中 username 是要用于访问数据库的用户名:mysql -u username -p

  • 6、出现提示时,使用指定的用户名指定用于访问数据库的密码。

  • 7、使用以下命令创建数据库,其中 <PRODUCT_HOME>是安装的任何产品实例的路径,用户名和密码与在前面的步骤中指定的相同:

关于在不同操作系统中使用 MySQL

对于 Microsoft Windows 用户,在 MySQL 中创建数据库时,将字符集指定为 latin1 很重要。不这样做可能会在启动集群时导致错误(错误代码:1709)。此错误发生在某些版本的 MySQL (5.6.x) 中,与 UTF-8 编码有关。 MySQL 最初默认使用 latin1 字符集,它以 2 字节的序列存储字符。然而,在最近的版本中,为了对国际用户更友好,MySQL 默认使用 UTF-8。因此,必须在数据库创建命令中使用 latin1 作为字符集,如下所示以避免此问题。请注意,这可能会导致非拉丁字符(如希伯来语、日语等)出现问题。以下是数据库创建命令的 sql。

mysql> create database <DATABASE_NAME> character set latin1;

对于其他操作系统的用户,标准的数据库创建命令就足够了。对于这些操作系统,以下是数据库创建命令的 sql。

mysql> create database <DATABASE_NAME>;
create database WSO2_USER_DB character set latin1;
use WSO2_USER_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 REGISTRY_DB character set latin1;
use REGISTRY_DB;
source <PRODUCT_HOME>\dbscripts\mysql5.7.sql;
grant all on *.* TO regadmin@"%" identified by "regadmin";
 
create database REGISTRY_LOCAL1 character set latin1;
use REGISTRY_LOCAL1;
source <PRODUCT_HOME>\dbscripts\mysql5.7.sql;
grant all on *.* TO regadmin@"%" identified by "regadmin";
  
create database REGISTRY_LOCAL2 character set latin1;
use REGISTRY_LOCAL2;
source <PRODUCT_HOME>\dbscripts\mysql5.7.sql;
grant all on *.* TO regadmin@"%" identified by "regadmin";

alter user 'regadmin'@'%' identified by 'regadmin';
flush privileges;

从 Carbon 内核 4.4.6 开始,产品将附带两个 MySQL 脚本,如下所示:

mysql.sql :此脚本用于 5.7 之前的 MySQL 版本。

mysql5.7.sql :此脚本用于 MySQL 5.7 及更高版本。

请注意,如果在服务器启动期间使用 -DSetup 选项自动创建数据库,则默认情况下将使用 mysql.sql 脚本来设置数据库。因此,如果为服务器设置了 MySQL 5.7 版,请务必在启动服务器之前执行以下操作:

  • 首先,将现有的 mysql.sql 文件更改为不同的文件名。
  • <PRODUCT_HOME>/dbscripts/mysql5.7.sql脚本更改为 mysql.sql。
  • <PRODUCT_HOME>/dbscripts/identity/mysql5.7.sql脚本更改为 mysql.sql。

MySQL 5.7 仅推荐用于基于 Carbon 4.4.6 或更高版本的产品。

三、配置管理节点

  • 1、在管理器节点上,打开 <PRODUCT_HOME>/repository/conf/datasources/master-datasource.xml文件,并将数据源配置为指向 REGISTRY_LOCAL1、WSO2_REGISTRY_DB 和 WSO2_USER_DB 数据库,如下所示(更改用户名、密码和数据库 环境所需的 URL)。
<datasources-configuration xmlns:svns="http://org.wso2.securevault/configuration">
     <providers>
        <provider>org.wso2.carbon.ndatasource.rdbms.RDBMSDataSourceReader</provider>
    </providers>
    <datasources>
        <datasource>
            <name>REGISTRY_LOCAL1</name>
            <description>The datasource used for registry- local</description>
            <jndiConfig>
                <name>jdbc/WSO2CarbonDB</name>
            </jndiConfig>
            <definition type="RDBMS">
                <configuration>
                    <url>jdbc:mysql://carbondb.mysql-wso2.com:3306/REGISTRY_LOCAL1?autoReconnect=true&amp;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>REGISTRY_DB</name>
            <description>The datasource used for registry- config/governance</description>
            <jndiConfig>
                <name>jdbc/WSO2RegistryDB</name>
            </jndiConfig>
            <definition type="RDBMS">
                <configuration>
                    <url>jdbc:mysql://carbondb.mysql-wso2.com:3306/REGISTRY_DB?autoReconnect=true&amp;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>WSO2_USER_DB</name>
            <description>The datasource used for registry and user manager</description>
            <jndiConfig>
                <name>jdbc/WSO2UMDB</name>
            </jndiConfig>
            <definition type="RDBMS">
                <configuration>
                    <url>jdbc:mysql://carbondb.mysql-wso2.com:3306/WSO2_USER_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>

确保将用户名和密码替换为 MySQL 数据库用户名和密码。

  • 2、要配置数据源,请更新管理器节点的 <PRODUCT_HOME>/repository/conf/user-mgt.xml中的 dataSource 属性,如下所示:
<Property name="dataSource">jdbc/WSO2UMDB</Property>
  • 3、必须更新管理节点的 <PRODUCT_HOME>/repository/conf/registry.xml文件中的 dataSource 属性,如下所示。
<dbConfig name="sharedregistry">   
    <dataSource>jdbc/WSO2RegistryDB</dataSource>
</dbConfig>

四、配置工作节点

  • 1、在工作节点上,打开 <PRODUCT_HOME>/repository/conf/datasources/master-datasource.xml文件并将数据源配置为指向 REGISTRY_LOCAL2、WSO2_REGISTRY_DB 和 WSO2_USER_DB 数据库,如下所示(更改用户名、密码和数据库 URL 根据您的环境需要):
<datasources-configuration xmlns:svns="http://org.wso2.securevault/configuration">
     <providers>
        <provider>org.wso2.carbon.ndatasource.rdbms.RDBMSDataSourceReader</provider>
    </providers>
    <datasources>
        <datasource>
            <name>REGISTRY_LOCAL2</name>
            <description>The datasource used for registry- local</description>
            <jndiConfig>
                <name>jdbc/WSO2CarbonDB</name>
            </jndiConfig>
            <definition type="RDBMS">
                <configuration>
                    <url>jdbc:mysql://carbondb.mysql-wso2.com:3306/REGISTRY_LOCAL2?autoReconnect=true&amp;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>REGISTRY_DB</name>
            <description>The datasource used for registry- config/governance</description>
            <jndiConfig>
                <name>jdbc/WSO2RegistryDB</name>
            </jndiConfig>
            <definition type="RDBMS">
                <configuration>
                    <url>jdbc:mysql://carbondb.mysql-wso2.com:3306/REGISTRY_DB?autoReconnect=true&amp;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>WSO2_USER_DB</name>
            <description>The datasource used for registry and user manager</description>
            <jndiConfig>
                <name>jdbc/WSO2UMDB</name>
            </jndiConfig>
            <definition type="RDBMS">
                <configuration>
                    <url>jdbc:mysql://carbondb.mysql-wso2.com:3306/WSO2_USER_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文件中的 dataSource 属性,如下所示。
<Property name="dataSource">jdbc/WSO2UMDB</Property>
  • 3、必须更新工作节点的 <PRODUCT_HOME>/repository/conf/registry.xml文件中的 dataSource 属性,如下所示。
<dbConfig name="sharedregistry">   
    <dataSource>jdbc/WSO2RegistryDB</dataSource>
</dbConfig>

五、在管理和工作节点上挂载注册表

执行此步骤以确保用于治理和配置的共享注册表安装到两个节点。 此数据库是 REGISTRY_DB。

在管理节点的 <PRODUCT_HOME>/repository/conf/registry.xml文件中配置共享注册表数据库和挂载详细信息,如下所示:

注意:添加以下配置时,不得删除名为 wso2registry 的现有 dbConfig。

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

在工作节点的 <PRODUCT_HOME>/repository/conf/registry.xml中配置共享注册表数据库和挂载详细信息,如下所示:

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

以下是添加这些配置时需要注意的一些要点:

  • <dbConfig name="sharedregistry">标签下指定的 dataSource 必须与 manager 和 worker 的 master-datasources.xml 文件中指定的 jndiConfig 名称匹配。
  • 注册表挂载路径用于标识注册表的类型。例如,/_system/config指的是配置注册表,/_system/governance指的是治理注册表。
  • dbconfig 条目使您能够识别您在 master-datasources.xml 文件中配置的数据源。使用唯一名称 sharedregistry 来引用该数据源条目。
  • remoteInstance 部分是指外部注册表挂载。可以指定此实例的只读/读写性质以及缓存配置和注册表根位置。如果是工作节点,readOnly 属性应该是 true,如果是管理器节点,这个属性应该设置为 false。
  • 此外,必须指定 cacheId,它使缓存能够在集群环境中正常运行。请注意,cacheId 与注册表数据库的 JDBC 连接 URL 相同。该值是远程实例的 cacheId。这里的cacheId应该是$database_username@$database_url的格式,其中$database_username是远程实例数据库的用户名,$database_url是远程实例数据库的URL。此 cacheID 用于标识启用缓存时应查找的缓存。在这种情况下,我们应该连接的数据库是 REGISTRY_DB,它是所有 master/workers 节点共享的数据库。可以通过查看使用相同数据源的安装配置来识别它。
  • 必须为每个远程实例定义一个唯一名称 id,然后从挂载配置中引用该名称。在上面的示例中,远程实例的唯一 ID 是 instanceId。
  • 在每个挂载配置中,指定实际挂载路径和目标挂载路径。 targetPath 可以是任何有意义的名称。在本例中,它是 /_system/config

六、测试

进入管理控制台:https://192.168.1.128:8443
修改日志打印级别为:info
在这里插入图片描述
管理节点:
在这里插入图片描述
工作节点1:
在这里插入图片描述
工作节点2:
在这里插入图片描述

从日志打印可以看到,在管理控制台修改的配置会同步到所有工作节点上面。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

菠萝蚊鸭

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

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

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

打赏作者

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

抵扣说明:

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

余额充值