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

Posted 菠萝蚊鸭

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WSO2 EI 6.0.0 集群部署文档 - MySQL版相关的知识,希望对你有一定的参考价值。

WSO2 EI 6.0.0 集群部署文档 - mysql

一、虚拟机配置

本文档使用了三个虚拟机,对应部署模式如下图(NFS服务和nginx在同一台虚拟机):

防火墙、开端口等按需开放。
开放端口命令示例:

firewall-cmd --zone=public --add-port=6379/tcp --permanent 
firewall-cmd --reload
firewall-cmd --zone=public --query-port=6379/tcp

二、node03 和 node04 安装 JDK

1、创建 java 目录

mkdir -p /usr/java


2、上传文件

用 xftp 将 jdk-8u202-linux-x64.tar.gz 上传至 /root 目录


3、解压安装包

tar -zxvf jdk-8u202-linux-x64.tar.gz
mv -f jdk1.8.0_202 /usr/java


4、配置环境变量

vim /etc/profile

修改/etc/profile文件,添加JAVA_HOME、PATH、CLASSPATH三个变量,并用export输出三个变量。
按i键进入编辑模式,在文件末尾添加:

JAVA_HOME=/usr/java/jdk1.8.0_202
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export PATH
export CLASSPATH

编辑完成后按Esc键,输入“:wq”存盘退出

使 profile 文件立即生效

source /etc/profile

5、测试 jdk

java -version
javac -version


三、node02 部署 Nginx

1、安装编译工具及库文件

yum -y install make gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel libtool


2、下载安装包

mkdir -p /app
cd /app
wget http://nginx.org/download/nginx-1.20.2.tar.gz


3、解压安装包

tar -zxvf nginx-1.20.2.tar.gz

解压完成后,将文件夹重命名为nginx

mv nginx-1.20.2 nginx


4、进入安装包目录、编译安装

cd nginx
./configure --prefix=/app/nginx --with-http_stub_status_module --with-http_ssl_module

#–prefix指定的是Nginx的安装目录位置

make && make install

5、创建 Nginx 运行用户

/usr/sbin/groupadd nginx
/usr/sbin/useradd -g nginx nginx

此处需要注意:
nginx用户需要有nginx目录下的读写权限,建议执行以下下语句:

# 路径根据安装路径填写
chown -R nginx:nginx /app/nginx
ls -l /app/nginx



四、部署模式

        此部署方案使用两个节点的 ESB 集群。 也就是说,两个 ESB 节点被配置为高可用性和可伸缩性服务请求。 如下图所示,集群中的产品节点前面有一个外部第三方负载均衡器,该负载均衡器以循环方式将请求路由到两个节点。
        注意,两个 ESB 节点被配置为众所周知的成员。 始终建议将集群的所有节点都设为知名成员。

        在使用 Hazelcast 为集群配置 WSO2 产品时,需要在配置中使用特定的 IP 地址,而不是 localhost

        在上图中,第一个 ESB 节点的 IP 为 192.168.100.115,第二个 ESB 节点的 IP 为 192.168.100.105
        如果想在使用同一服务器的开发环境中测试集群,需要对 ESB 节点之一进行端口偏移。请按照以下步骤操作:

  1. 在 <EI_HOME>/conf/carbon.xml 文件中指定端口偏移值。
  2. 不建议将其用于生产环境。 如果要为特定节点设置端口偏移,请根据偏移值更改配置中使用的所有端口。
<Ports>
    ...
    <Offset>5</Offset>
    ...
</Ports>

五、配置负载均衡器 Nginx

负载均衡器自动在多个 WSO2 产品实例之间分配传入流量。 它能够在集群中实现更高级别的容错,并提供分配流量所需的负载平衡。
配置负载均衡器时请注意以下问题:

  • 如果集群设置没有负载均衡器,则不需要这些配置。
  • 上面显示的部署模式的负载均衡器端口是 HTTP 8280 和 HTTPS 8243。如果系统使用其他端口,请确保在执行本节中的配置步骤时将 8280 和 8243 值替换为相应的端口。
  • 负载均衡器以循环方式将请求定向到服务器。 例如,负载均衡器会将请求定向到 ESB 集群的节点 1 (192.168.100.115),如下所示:
    • HTTP 请求将通过 HTTP 8280 端口使用 http://192.168.100.129:8280/ URL 定向到节点 1。
    • HTTPS 请求将通过 HTTPS 8243 端口使用 https://192.168.100.129:8243/ URL 定向到节点 1。
    • 节点 1 的管理控制台将通过 HTTPS 9443 端口使用 https://192.168.100.129:9443/carbon/ URL 访问。

推荐使用 NGINX Plus 作为负载均衡器的选择。
按照以下步骤将 NGINX 社区版本 1.20.2 配置为负载均衡器。

1、配置 ei.http.conf(8280端口)

在 nginx/conf 目录下创建一个名为 ei.http.conf 的 VHos t文件,添加如下配置。这将 NGINX 配置为通过 HTTP 8280 端口使用 http://192.168.100.129:8280/ URL 将 HTTP 请求定向到两个 ESB 节点(192.168.100.115 和 192.168.100.105)。

vim /app/nginx/conf/ei.http.conf
upstream worker_ng 
    server 192.168.100.115:8280 weight=10;
    server 192.168.100.105:8280 weight=10;

server 
    listen 8280;
    server_name 192.168.100.129;
    location / 
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_read_timeout 5m;
        proxy_send_timeout 5m;
        proxy_pass http://worker_ng;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    

2、ei.https.conf(8243端口)

在 nginx/conf 目录中创建一个 VHost 文件(ei.https.conf), 将 NGINX 配置为通过 HTTPS 8243 端口使用 https://192.168.100.129:8243/ URL 将 HTTPS 请求定向到两个 ESB 节点(192.168.100.115 和 192.168.100.105)。

vim /app/nginx/conf/ei.https.conf
upstream ssl_worker_ng 
    server 192.168.100.115:8243 weight=10;
    server 192.168.100.105:8243 weight=10;
    ip_hash;

server 
    listen 8243 ssl;
    server_name 192.168.100.129;
    # 自签证书
    ssl_certificate /app/nginx/ssl/server.crt;
    ssl_certificate_key /app/nginx/ssl/server.key;
    location / 
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_read_timeout 5m;
        proxy_send_timeout 5m;
        proxy_pass https://ssl_worker_ng;
  
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    

3、ui.ei.https.conf(9443端口)

配置 NGINX 以通过 HTTPS 9443 端口以 https://192.168.100.129:9443/carbon 访问管理控制台。 为此,请在 nginx/conf 目录创建一个 VHost 文件 ( ui.ei.https.conf ),并将以下配置添加到其中。
Nginx 社区版和 NGINX Plus

vim /app/nginx/conf/ui.ei.https.conf
upstream ssl_mgt_ng 
    server 192.168.100.115:9443 weight=10;
    server 192.168.100.105:9443 weight=10;
    ip_hash;

server 
    listen 9443 ssl;
    server_name 192.168.100.129;
    ssl_certificate /app/nginx/ssl/server.crt;
    ssl_certificate_key /app/nginx/ssl/server.key;
    location / 
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_read_timeout 5m;
        proxy_send_timeout 5m;
        proxy_pass https://ssl_mgt_ng;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    
    error_log  logs/error.log ;
    access_log  logs/access.log;

4、签发本地 ssl 证书

  1. 在 nginx 目录中创建一个名为 ssl 的目录。
  2. 按照以下说明为两个 ESB 节点创建 SSL 证书。

创建密钥时输入 ei.wso2.com 作为通用名称(非公网域名需要添加hosts映射,否则使用 IP )。
签发本地ssl证书示例:

mkdir -p /app/nginx/ssl
cd /app/nginx/ssl
openssl genrsa -des3 -out server.key 1024
openssl req -new -key server.key -out server.csr
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt


在 node03 和 node04 执行以下命令将证书添加到 <EI_HOME>/repository/resources/security/client-truststore.jks 文件:

scp -r 192.168.100.129:/app/nginx/ssl/server.crt /app/server.crt
keytool -import -trustcacerts -alias server -file /app/server.crt -keystore /app/wso2ei-6.7.0-SNAPSHOT/repository/resources/security/client-truststore.jks

出现提示时,输入默认密码 wso2carbon。

5、配置 nginx.conf

vim /app/nginx/conf/nginx.conf
user  nginx;
worker_processes  auto;

error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

pid        logs/nginx.pid;

events 
    worker_connections  1024;


http 
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    include /app/nginx/conf/ei.http.conf;
    include /app/nginx/conf/ei.https.conf;
    include /app/nginx/conf/ui.ei.https.conf;


6、启动 Nginx

创建日志文件

# 创建日志文件
mkdir -p /app/nginx/logs
touch /app/nginx/logs/error.log
touch /app/nginx/logs/access.log
# 创建 pid 文件
touch /app/nginx/logs/nginx.pid
chown -R nginx:nginx /app/nginx

执行以下命令启动 NGINX

# 停止
/app/nginx/sbin/nginx -s stop
# 启动
/app/nginx/sbin/nginx -c /app/nginx/conf/nginx.conf

如果只是对 VHost 文件进行修改时不需要重新启动服务器,请执行以下命令:

# 重载配置文件
/app/nginx/sbin/nginx -s reload


六、创建数据库

WSO2 EI 的所有配置文件都使用数据库来存储用户管理详细信息和注册表数据等信息。 集群中的所有节点都必须使用一个中央数据库进行配置和治理注册表挂载。 创建以下数据库和关联的数据源。

数据库描述
WSO2_USER_DB JDBC用户存储和授权管理器
REGISTRY_DB用于产品节点中的配置和治理注册表挂载的共享数据库
REGISTRY_LOCAL1节点 1 中的本地注册表空间
REGISTRY_LOCAL2节点 2 中的本地注册表空间

对于大多数企业测试和生产环境,建议使用行业标准的 RDBMS,例如 Oracle、PostgreSQL、MySQL、MS SQL 等。 但是,也可以仅将嵌入式 H2 数据库用于 REGISTRY_LOCAL1 和 REGISTRY_LOCAL2
按照以下步骤创建必要的数据库。
这些说明假设将 MySQL 安装为关系数据库管理系统 (RDBMS),但可以根据需要安装另一个受支持的 RDBMS。

  1. 下载并安装 MySQL 服务器。
  2. 下载 MySQL JDBC 驱动程序。
  3. 下载并解压 WSO2 EI 二进制发行版。在本文档中,<EI_HOME> 指的是 WSO2 EI 产品的根目录。
  4. 解压下载的MySQL驱动,将MySQL JDBC驱动JAR(mysql-connector-java-x.x.xx-bin.jar)复制到两个ESB节点的<EI_HOME>/lib/目录下
  5. 在终端/命令窗口中执行以下命令,其中用户名是要用于访问数据库的用户名:mysql -u username -p
  6. 出现提示时,指定密码以使用指定的用户名访问数据库。
  7. 使用以下命令创建数据库:

如果使用的是 MySQL 5.7 或更高版本,则需要使用 mysql5.7.sql 脚本而不是 mysql.sql 脚本。(EI 6.6.0只有mysql.sql文件)

yum install -y unzip
unzip wso2ei-6.7.0-SNAPSHOT_ZH.zip
cp -r /app/wso2ei-6.7.0-SNAPSHOT/dbscripts/mysql.sql /app/
mysql -u root -p'CWCcwy12'
create database WSO2_USER_DB;
use WSO2_USER_DB;
source /app/mysql.sql;
grant all on *.* TO regadmin@"%" identified by "regadmin";
create database REGISTRY_DB;
use REGISTRY_DB;
source /app/mysql.sql;
grant all on *.* TO regadmin@"%" identified by "regadmin";

/*** REGISTRY_LOCAL1 和 REGISTRY_LOCAL2 不是必须的,可以使用内置H2数据库 **/
create database REGISTRY_LOCAL1;
use REGISTRY_LOCAL1;
source /app/mysql.sql;
grant all on *.* TO regadmin@"%" identified by "regadmin";
create database REGISTRY_LOCAL2;
use REGISTRY_LOCAL2;
source /app/mysql.sql;
grant all on *.* TO regadmin@"%" identified by "regadmin";
/**********************************************************************/

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

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

create database <DATABASE_NAME> character set latin1;

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

create database <DATABASE_NAME>;

七、配置 ESB 节点配置文件

对集群的所有节点进行以下配置。

mkdir -p /app
cd /app
yum install -y unzip
unzip wso2ei-6.7.0-SNAPSHOT_ZH.zip

1、挂载注册表

vim /app/wso2ei-6.7.0-SNAPSHOT/conf/registry.xml

将以下配置添加到每个 ESB 节点的 <EI_HOME>/conf/registry.xml 文件中,以配置共享注册表数据库和挂载详细信息。 这确保了用于治理和配置的共享注册表(即 REGISTRY_DB 数据库)安装在两个 ESB 节点上。
添加这些配置时请注意以下几点:

  • 不得删除名为 wso2registry 的现有 dbConfig。

  • 新建名为:sharedregistry 的注册表数据库配置,在 标记中指定的数据源必须与在 <EI_HOME>/conf/datasources/master-datasources.xml 文件中指定的 JNDI 配置名称相匹配。

  • 注册表装载路径表示注册表的类型。例如,“/_system/config”指的是配置注册表,“/_system/governance”指的是治理注册表。
  • 条目能够识别在 <EI_HOME>/conf/datasources/master-datasources.xml 文件中配置的数据源。唯一名称“sharedregistry”指的是该数据源条目。
  • 部分是指外部注册表安装。在本节中指定此实例的只读/读写性质、缓存配置和注册表根位置。
  • 此外,在 部分中指定缓存 ID。这使缓存能够在集群环境中正常运行。
    • 缓存 ID 与注册表数据库的 JDBC 连接 URL 相同。该值是远程实例的缓存 ID。格式为 d a t a b a s e u s e r n a m e @ database_username@ databaseusername@database_url,其中 d a t a b a s e u s e r n a m e 为 远 程 实 例 数 据 库 的 用 户 名 , database_username 为远程实例数据库的用户名, databaseusernamedatabase_url 为远程实例数据库URL。此 cacheID 表示启用的缓存。在这种情况下,它应该连接的数据库是 REGISTRY_DB,它是所有节点共享的数据库。可以在正在使用的同一数据源的安装配置中找到它。
  • 为每个远程实例定义一个唯一的实例 ID(使用 标记)。请务必从相应的挂载配置中引用相同的实例 ID(使用 标记)。在此示例中,远程实例的唯一 ID 是“instanceId”。该 ID 与配置挂载和治理挂载的实例 ID 相同。例如:节点1的id为node03,节点2的id为node04。
    • 请注意,如果注册表装载配置(使用 部分指定)没有具有相同实例 ID 的对应远程注册表实例(使用 部分指定),则注册表装载将不会成功。如果在和配置下误用了不匹配的实例ID,则需要按照以下步骤纠正错误:
      1. 删除现有的本地注册表。如果使用的是嵌入式 H2 以外的数据库,则需要执行设置新数据库的添加步骤。
      2. 应用 registry.xml 文件中的配置。
      3. 重新启动服务器。
  • 在每个挂载配置中指定实际挂载路径和目标挂载路径。目标路径可以是任何有意义的名称。在本例中,它是“/_system/eiconfig”。
<dbConfig name="sharedregistry">
    <dataSource>jdbc/WSO2RegistryDB</dataSource>
</dbConfig>
<remoteInstance url="https://localhost:9443/registry">
    <id>node04</id>
    <dbConfig>sharedregistry</dbConfig>
    <readOnly>false</readOnly>
    <enableCache>true</enableCache>
    <registryRoot>/</registryRoot>
<cacheId>regadmin@jdbc:mysql://192.168.100.129: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>node04</instanceId>
    <targetPath>/_system/eiconfig</targetPath>
</mount>
<mount path="/_system/governance" overwrite="true">
    <instanceId>node04</instanceId>
    <targetPath>/_system/governance</targetPath>
</mount>


2、连接数据库

vim /app/wso2ei-6.7.0-SNAPSHOT/conf/datasources/master-datasources.xml

按照下面给出的步骤更新数据源。

  • 打开 <EI_HOME>/conf/datasources/master-datasources.xml 文件,并将数据源配置为指向每个 ESB 节点的相关数据库。
    • 相应地替换 MySQL 环境的用户名、密码和数据库 URL。
    • 如果未启用 SSL,请将 useSSL=false 属性附加到 属性的值。
  • 对于 ESB 节点 1,将数据源配置为指向 REGISTRY_LOCAL1、WSO2_REGISTRY_DB 和 WSO2_USER_DB 数据库,如下所示:
<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://192.168.100.129: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_LOCAL1</name>
            <description>The datasource used for registry- local</description>
            <jndiConfig>
                <name>jdbc/WSO2CarbonDB</name>
            </jndiConfig>
            <definition type="RDBMS">
                <configuration>
                    <url>jdbc:h2:./repository/database/WSO2CARBON_DB;DB_CLOSE_ON_EXIT=FALSE;LOCK_TIMEOUT=60000</url>
                    <username>wso2carbon</username>
                    <password>wso2carbon</password>
                    <driverClassName>org.h2.Driver</driverClassName>
                    <maxActive>50</maxActive>
                    <maxWait>60000</maxWait>
                    <testOnBorrow>true</testOnBorrow>
                    <validationQuery>SELECT 1</validationQuery>
                    <validationInterval>30000</validationInterval>
                    <defaultAutoCommit>false</defaultAutoCommit>
                </configuration>
            <

以上是关于WSO2 EI 6.0.0 集群部署文档 - MySQL版的主要内容,如果未能解决你的问题,请参考以下文章

解决 WSO2 EI 6.0.0~6.6.0 删除带有 Class 的碳应用时提示 ClassNotFoundException 异常

解决 WSO2 EI 6.0.0~6.6.0 删除带有 Class 的碳应用时提示 ClassNotFoundException 异常

解决 WSO2 EI 6.0.0~6.6.0 删除带有 Class 的碳应用时提示 ClassNotFoundException 异常

WSO2 APIM和EI docker模式集成

WSO2 ESB / EI / AM 汉化方法

WSO2 ESB / EI / AM 汉化方法