为 WSO2 ESB 5.0.0 集群配置 MySQL 数据库
Posted Calvin Chan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为 WSO2 ESB 5.0.0 集群配置 MySQL 数据库相关的知识,希望对你有一定的参考价值。
为 WSO2 ESB 5.0.0 集群配置 mysql 数据库
集群配置见:WSO2 ESB 5.0.0 集群配置
一、集群数据库
每个基于 Carbon 的产品都使用一个数据库来存储用户管理详细信息和注册表数据等信息。 集群中的所有节点都必须使用一个中央数据库进行配置和治理注册表挂载。
- 不建议在生产中使用 H2。
- 不建议在企业测试和生产环境中使用嵌入式 H2 数据库。 它具有较低的性能、集群限制,并且可能导致文件损坏失败。 请改用行业标准的 RDBMS,例如 Oracle、PostgreSQL、MySQL 或 MS SQL。
- 可以在开发环境中使用嵌入式 H2 数据库,也可以将其用作注册表挂载中的本地注册表。
创建以下数据库和关联的数据源
数据库 | 描述 |
---|---|
WSO2_USER_DB | JDBC 用户存储和授权管理器 |
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&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>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&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>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&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>
确保将用户名和密码替换为 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&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>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&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>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&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
文件中的 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&useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true&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>
WSO2 ESB 5.0.0 集群配置