WSO2 ESB 5.0.0 集群配置
Posted Calvin Chan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WSO2 ESB 5.0.0 集群配置相关的知识,希望对你有一定的参考价值。
WSO2 ESB 5.0.0 集群配置
一、Worker / Manager 分离的集群部署模式
在此模式中,有三个 WSO2 ESB 节点:1 个节点充当管理节点,2 个节点充当工作节点,以实现高可用性和服务请求。 在此模式中,我们允许通过外部负载均衡器访问管理控制台。 此外,服务请求通过此负载均衡器定向到工作节点。 下图描述了此集群部署场景将遵循的示例模式。
以此模式配置WSO2集群配置时,请在配置文件 axis2.xml 中使用特定 IP 地址而不是 localhost 或主机名。
在这里,我们使用三个节点作为知名成员,一个是管理节点,另外两个是工作节点。 始终建议使用至少两个知名成员,以防止在某个知名成员关闭时重新启动集群中的所有节点。
二、配置负载均衡器
负载均衡器自动在多个 WSO2 产品实例之间分配传入流量。它能够在集群中实现更高级别的容错,并提供分配流量所需的负载平衡。
本实例用了 3 台虚拟机,这里 Nginx 和管理节点放在同一台虚拟机。
1、nginx 安装
关闭虚拟机防火墙
CentOS 7.0 默认使用的是 firewall 作为防火墙
查看防火墙状态
firewall-cmd --state
停止firewall
systemctl stop firewalld.service
禁止firewall开机启动
systemctl disable firewalld.service
Nginx 安装教程见:CentOS7安装Nginx
Nginx 注意事项
本博客的配置步骤是在假设该 ESB 集群的负载均衡器使用公开默认的 8000 和 8043 端口的情况下编写的。
如果使用域名,可以利用 80 和 443 端口做代理。
请注意以下几点:
- 如上面的部署模式所示,负载均衡器端口是 HTTP 8000 和 HTTPS 8043。
- 使用 http://192.168.1.128:8000/service 通过 HTTP 8000 端口将 HTTP 请求定向到工作节点。
- 使用 https://192.168.1.128:8043/service 通过 HTTPS 8043 端口将 HTTPS 请求定向到工作节点。
- 通过 HTTPS 8443 端口以 https://192.168.1.128:8443/carbon 身份访问管理控制台
- 在 WSO2 ESB 集群中,工作节点在 PassThrough 传输端口(8280 和 8243)上处理服务请求,并且可以使用 HTTPS 8443 端口访问管理控制台。
2、Nginx 配置
拦截管理节点 8000 端口请求并转发到 129/130 两台机器的 8280 端口的 WSO2 ESB
esb.http.conf
upstream worker_node
server 192.168.1.129:8280;
server 192.168.1.130:8280;
server
listen 8000;
server_name localhost;
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_node;
拦截管理节点 8043 端口请求并转发到 129/130 两台机器的 8243 端口的 WSO2 ESB
esb.https.conf
upstream ssl_worker_node
server 192.168.1.129:8243;
server 192.168.1.130:8243;
server
listen 8043;
server_name localhost;
ssl on;
ssl_certificate /usr/local/nginx/ssl/wrk.crt;
ssl_certificate_key /usr/local/nginx/ssl/wrk.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_node;
拦截管理节点 8443 端口请求并转发到管理节点,通过 9443 端口访问管理控制台
mgt.esb.https.conf
server
listen 8443;
server_name localhost;
ssl on;
ssl_certificate /usr/local/nginx/ssl/wrk.crt;
ssl_certificate_key /usr/local/nginx/ssl/wrk.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://192.168.1.128:9443/;
error_log /usr/local/nginx/logs/mgt-error.log ;
access_log /usr/local/nginx/logs/mgt-access.log;
3、创建 ssl 证书
cd /usr/local/nginx
mkdir ssl
cd ssl
openssl genrsa -des3 -out wrk.key 1024
openssl req -new -key wrk.key -out wrk.csr
cp wrk.key wrk.key.org
openssl rsa -in wrk.key.org -out wrk.key
openssl x509 -req -days 365 -in wrk.csr -signkey wrk.key -out wrk.crt
三、本地 SVN 服务器配置
四、配置管理节点
1、下载 WSO2 ESB
下载并解压缩 WSO2 ESB 二进制发行版。将提取的目录为<PRODUCT_HOME>
2、设置集群配置
编辑<PRODUCT_HOME>/repository/conf/axis2/axis2.xml
文件如下。
- 为此节点启用集群:
<clustering class="org.wso2.carbon.core.clustering.hazelcast.HazelcastClusteringAgent" enable="true">
- 将成员资格方案设置 wka 为启用众所周知的地址注册方法(该节点向我们稍后定义的 WKA 成员发送集群启动消息)。
<parameter name="membershipScheme">wka</parameter>
- 指定此节点将加入的集群的名称。
<parameter name="domain">wso2.esb.domain</parameter>
- 指定用于传送集群消息的主机的 IP 地址(不是 localhost 或主机名)。
<parameter name="localMemberHost">192.168.1.128</parameter>
- 指定用于传送集群消息的端口。此端口号不受
<PRODUCT_HOME>/repository/conf/carbon.xml
中指定的端口偏移值的影响。如果此端口号已分配给另一台服务器,则集群框架会自动增加此端口号。但是,如果两台服务器在同一台机器上运行,必须确保为每台服务器设置一个唯一的端口。
<parameter name="localMemberPort">4100</parameter>
- 指定知名成员。
在以下示例中,知名成员是工作程序节点。这里的hostName值是主机的 IP 地址。WKA 工作节点的port值必须与其相同 localMemberPort (在本例中为 4200)。虽然此示例仅表示一个知名成员,但建议在此至少添加两个知名成员。这样做是为了确保集群具有高可用性。
<members>
<member>
<hostName>192.168.1.128</hostName>
<port>4100</port>
</member>
<member>
<hostName>192.168.1.129</hostName>
<port>4101</port>
</member>
<member>
<hostName>192.168.1.130</hostName>
<port>4102</port>
</member>
</members>
- 更改以下集群属性。
<parameter name="properties">
<property name="backendServerURL" value="https://$hostName:$httpsPort/services/"/>
<property name="mgtConsoleURL" value="https://$hostName:$httpsPort/"/>
</parameter>
3、配置 HostName
编辑 <PRODUCT_HOME>/repository/conf/carbon.xml
<HostName>192.168.1.128</HostName>
<MgtHostName>192.168.1.128</MgtHostName>
4、配置基于 SVN 的部署同步
启用基于 SVN 的部署同步,并将 AutoCommit 属性标记为 true。 为此,请编辑 <PRODUCT_HOME>/repository/conf/carbon.xml
文件,如下所示。
<DeploymentSynchronizer>
<Enabled>true</Enabled>
<AutoCommit>true</AutoCommit>
<AutoCheckout>true</AutoCheckout>
<RepositoryType>svn</RepositoryType>
<SvnUrl>svn://192.168.1.130/wso2</SvnUrl>
<SvnUser>wso2</SvnUser>
<SvnPassword>123456</SvnPassword>
<SvnUrlAppendTenantId>true</SvnUrlAppendTenantId>
</DeploymentSynchronizer>
WSO2 配置 SVN: Configuring+SVN-Based+Deployment+Synchronizer
5、配置端口偏移
在 <PRODUCT_HOME>/repository/conf/carbon.xml
文件中,可以指定端口偏移值。仅适用于在同一服务器上托管多个 WSO2 产品的情况。
<Ports>
...
<Offset>0</Offset>
...
</Ports>
6、将主机名映射到 IP
如果需要,可以将以下主机条目添加到 DNS 或集群所有节点中的 “/etc/hosts” 文件(在 Linux 中)。 可以映射数据库服务器的 IP 地址。 本例中使用 mysql 作为数据库服务器,所以 <MYSQL-DB-SERVER-IP>
是数据库服务器的实际 IP 地址。
<IP-of-MYSQL-DB-SERVER> carbondb.mysql-wso2.com
7、仅允许通过负载均衡器访问管理控制台
如果需要,可以通过编辑 <PRODUCT_HOME>/repository/conf/tomcat/catalina-server.xml
文件,配置 HTTP/HTTPS 代理端口以通过负载均衡器进行通信,如下所示。
<Connector protocol="org.apache.coyote.http11.Http11NioProtocol"
port="9763"
proxyPort="xxxx"
...
/>
<Connector protocol="org.apache.coyote.http11.Http11NioProtocol"
port="9443"
proxyPort="xxxx"
...
/>
五、配置工作节点
1、设置集群配置
编辑 <PRODUCT_HOME>/repository/conf/axis2/axis2.xml
文件如下。
- 为此节点启用集群。
<clustering class="org.wso2.carbon.core.clustering.hazelcast.HazelcastClusteringAgent" enable="true">
- 将成员资格方案设置 wka 为启用众所周知的地址注册方法(此节点将向我们稍后定义的 WKA 成员发送集群启动消息)。
<parameter name="membershipScheme">wka</parameter>
- 指定此节点将加入的集群的名称。
<parameter name="domain">wso2.esb.domain</parameter>
- 指定用于传送集群消息的主机的 IP 地址(不是 localhost 或主机名)。
<parameter name="localMemberHost">192.168.1.129</parameter>
- 指定用于传送集群消息的端口。如果此节点与管理节点或其他工作节点位于同一台服务器上,请将其设置为唯一值,例如工作节点 1 和 2 为 4000 和 4001。此端口号不受 中端口偏移量的影响 carbon.xml。如果这个端口号已经分配给另一个服务器,集群框架会自动增加这个端口号。
<parameter name="localMemberPort">4101</parameter>
<parameter name="properties">
通过在元素 内添加以下属性,将子域定义为工作者 :
<property name="subDomain" value="worker"/>
- hostName通过提供和 localMemberPort 值来指定知名成员。这里的hostName值是主机的 IP 地址。
在以下示例中,知名成员是管理器节点。定义管理器节点很有用,因为 部署同步器需要它 以有效的方式运行。部署同步器使用此配置来识别管理器并跨集群的节点同步部署工件。
<members>
<member>
<hostName>192.168.1.128</hostName>
<port>4100</port>
</member>
<member>
<hostName>192.168.1.129</hostName>
<port>4101</port>
</member>
<member>
<hostName>192.168.1.130</hostName>
<port>4102</port>
</member>
</members>
2、配置 carbon.xml
配置<PRODUCT_HOME>/repository/conf/carbon.xml
文件以使集群配置与产品相匹配。
- 配置 HostName。编辑
<PRODUCT_HOME>/repository/conf/carbon.xml
文件。
<HostName>192.168.1.129</HostName>
<MgtHostName>192.168.1.128</MgtHostName>
3、配置基于 SVN 的部署同步
启用基于 SVN 的部署同步,并将 AutoCommit 属性标记为 false。 为此,请编辑 <PRODUCT_HOME>/repository/conf/carbon.xml
文件,如下所示。
<DeploymentSynchronizer>
<Enabled>true</Enabled>
<AutoCommit>false</AutoCommit>
<AutoCheckout>true</AutoCheckout>
<RepositoryType>svn</RepositoryType>
<SvnUrl>svn://192.168.1.130/wso2</SvnUrl>
<SvnUser>wso2</SvnUser>
<SvnPassword>123456</SvnPassword>
<SvnUrlAppendTenantId>true</SvnUrlAppendTenantId>
</DeploymentSynchronizer>
4、指定端口偏移
在 <PRODUCT_HOME>/repository/conf/carbon.xml
文件中,可以指定端口偏移值。仅适用于在同一服务器上托管多个 WSO2 产品的情况。
<Ports>
...
<Offset>0</Offset>
...
</Ports>
6、创建第二个工作节点
通过刚刚配置为工作程序节点的 WSO2 产品的副本来创建第二个工作程序节点,并在 <PRODUCT_HOME>/repository/conf/axis2/axis2.xml
文件中更改以下内容。
<parameter name="localMemberHost">192.168.1.130</parameter>
<parameter name="localMemberPort">4102</parameter>
六、测试集群
1、启动管理节点
./wso2server.sh -Dsetup
2、启动工作节点
./wso2server.sh -DworkerNode= true
3、测试
启动所有节点,工作节点启动后,管理节点的日志可以看到成员加入的日志消息。
进入管理控制台:https://192.168.1.128:8443
放一个碳应用上去
postman 测试,请求 8000 端口,nginx 进行负载均衡
SVN 文件
以上是关于WSO2 ESB 5.0.0 集群配置的主要内容,如果未能解决你的问题,请参考以下文章
为 WSO2 ESB 5.0.0 集群配置 MySQL 数据库