WSO2 SVN Synchronizer与群集

时间:2017-03-07 15:26:03

标签: wso2 wso2-am wso2carbon

我正在Windows PC上的VM上运行WSO2 APIM 1.10.0上的测试环境。它被配置为使用MySQL服务器(我在我的PC上运行的MiraDB)。一切都运转正常。

最近我想通过在我的PC上设置3个VM来尝试WSO2集群环境:

  • 第一个是运行发布者,商店,KM等(我使用偏移1,所以端口是9444,9764等。)
  • 另外两个运行网关工作者(“访客”端口8243,映射到“主机”端口8243和8943)。

我也在运行VisualSVN服务器以在它们之间进行同步。

在管理器节点上,SVN同步器配置为:

   <DeploymentSynchronizer>
    <Enabled>true</Enabled>
    <AutoCommit>true</AutoCommit>
    <AutoCheckout>true</AutoCheckout>
    <RepositoryType>svn</RepositoryType>
    <SvnUrl>https://10.0.2.2/svn/apigw/</SvnUrl>
    <SvnUser>...</SvnUser>
    <SvnPassword>...</SvnPassword>
    <SvnUrlAppendTenantId>true</SvnUrlAppendTenantId>
</DeploymentSynchronizer>

在工作节点上:

    <DeploymentSynchronizer>
    <Enabled>true</Enabled>
    <AutoCommit>false</AutoCommit>
    <AutoCheckout>true</AutoCheckout>
    <RepositoryType>svn</RepositoryType>
    <SvnUrl>https://10.0.2.2/svn/apigw/</SvnUrl>
    <SvnUser>...</SvnUser>
    <SvnPassword>...</SvnPassword>
    <SvnUrlAppendTenantId>true</SvnUrlAppendTenantId>
</DeploymentSynchronizer>

AXIS2配置为使用

进行群集
  • 端口4500上的Manager节点
  • 端口4100和4200上的工作节点

我使用telnet进行了检查,所有节点都可以访问所有端口。

管理员对API的更改已正确提交给SVN。我检查了Visual SVN和命令行SVN客户端。例如,在添加API ofer3之后,创建了修订版#11,并且被命令行SVN工具看到了:

> svn.exe revert .
> svn.exe update  . -r HEAD --depth=infinity
Updating '.':
U    -1234\synapse-configs\default\api\admin--ofer3_v1.0.0.xml
Updated to revision 11.

但是,在将管理器节点上的更改完成填充给工作人员之前大约需要10分钟。

例如,在经理16:29

添加ofer2 API
TID: [-1234] [] [2017-03-07 16:29:01,156]  INFO {org.apache.synapse.rest.API} -  Initializing API: admin--ofer2:v1.0.0
TID: [-1234] [] [2017-03-07 16:29:16,104]  INFO {org.wso2.carbon.core.deployment.CarbonDeploymentSchedulerTask} -  Sent [SynchronizeRepositoryRequest{tenantId=-1234, tenantDomain='carbon.super', messageId=64959660-b2e6-4293-ad9c-3b0d68229976}]

5分钟后16:34到达客户端:

TID: [-1234] [] [2017-03-07 16:34:14,134]  INFO {org.apache.synapse.rest.API} -  Initializing API: admin--ofer2:v1.0.0
TID: [-1234] [] [2017-03-07 16:34:14,134]  INFO {org.apache.synapse.deployers.APIDeployer} -  API named 'admin--ofer2:v1.0.0' has been deployed from file : /AppMount/wso2worker-1.10.0/repository/deployment/server/synapse-configs/default/api/admin--ofer2_v1.0.0.xml

很多时候它需要更多(9-10分钟)。

我打开了同事调试器,希望看到它每隔几秒就尝试与SVN存储库同步,但只看到它每隔几分钟就会尝试这样做。

还试过:

<SynchronizationPeriod>1</SynchronizationPeriod>

但它没有改变任何东西。

至于日志消息

在工作日志中,我看到:

TID: [-1234] [] [2017-03-07 15:07:31,431] ERROR {org.apache.catalina.loader.WebappClassLoa
der} -  The web application [/api/am/publisher/v0.9] appears to have started a TimerThread
 named [Timer-8] via the java.util.Timer API but has failed to stop it. To prevent a memor
y leak, the timer (and hence the associated thread) has been forcibly canceled.

但/api/am/publisher/0.9是发布者的REST,与之无关。

日志中的其他内容似乎都没有用。

最后注意事项:租户的变更根本没有填充。我在管理器上有租户#1,我确实在SVN存储库上看到了它,但是在worker上,目录/ AppMount / wso2 / repository / tenants是空的。仅填充了对超级碳[-1234]的更改。不确定这是同一个问题还是其他问题。

任何想法都将受到高度赞赏。

根据Pubci 的输入

跟进#1

  • 时间与所有三个节点同步
  • 所有三个节点中的域相同(我保留默认值)

manager的axis2.xml(10.0.2.2是VM主机的地址,因此它作为从一个VM到另一个VM的“桥”)

<parameter name="domain">wso2.am.domain</parameter>
<parameter name="membershipScheme">wka</parameter>
<parameter name="localMemberPort">4500</parameter>
<members>
    <member><hostName>127.0.0.1</hostName><port>4500</port></member>
    <member><hostName>10.0.2.2</hostName><port>4100</port></member>
    <member><hostName>10.0.2.2</hostName><port>4200</port></member>
</members>

工作节点1的axis2.xml:

<parameter name="domain">wso2.am.domain</parameter>
<parameter name="membershipScheme">wka</parameter>
<parameter name="localMemberPort">4500</parameter>
<members>
    <member><hostName>10.0.2.2</hostName><port>4500</port></member>
    <member><hostName>127.0.0.1</hostName><port>4100</port></member>
    <member><hostName>10.0.2.2</hostName><port>4200</port></member>
</members>

当工作人员出现时,会列出以下成员:

TID: [-1234] [] [2017-03-08 09:40:39,450]  INFO {org.wso2.carbon.core.clustering.hazelcast.util.MemberUtils} -  Added member: Host:10.0.2.2, Remote Host:null, Port: 4500, HTTP:-1, HTTPS:-1, Domain: null, Sub-domain:null, Active:true
TID: [-1234] [] [2017-03-08 09:40:39,450]  INFO {org.wso2.carbon.core.clustering.hazelcast.util.MemberUtils} -  Added member: Host:127.0.0.1, Remote Host:null, Port: 4100, HTTP:-1, HTTPS:-1, Domain: null, Sub-domain:null, Active:true
TID: [-1234] [] [2017-03-08 09:40:39,451]  INFO {org.wso2.carbon.core.clustering.hazelcast.util.MemberUtils} -  Added member: Host:10.0.2.2, Remote Host:null, Port: 4200, HTTP:-1, HTTPS:-1, Domain: null, Sub-domain:null, Active:true

请注意日志中的“Domain:null”。这可以吗?

当工作人员出现时,它与SVN存储库正确同步:

TID: [-1234] [] [2017-03-08 09:40:51,184] DEBUG {org.wso2.carbon.deployment.synchronizer.subversion.SVNNotifyListener} -  revert /AppMount/wso2/repository/deployment/server
TID: [-1234] [] [2017-03-08 09:40:58,139] DEBUG {org.wso2.carbon.deployment.synchronizer.subversion.SVNNotifyListener} -  update /AppMount/wso2/repository/deployment/server -r HEAD --depth=infinity
TID: [-1234] [] [2017-03-08 09:40:59,766] DEBUG {org.wso2.carbon.deployment.synchronizer.subversion.SVNNotifyListener} -  notify.at
TID: [-1234] [] [2017-03-08 09:41:00,103] DEBUG {org.wso2.carbon.deployment.synchronizer.subversion.SVNBasedArtifactRepository} -  files were updated to revision number: 15 using SVN Kit

从那时起,碳调度程序任务每15秒就会运行一次SVN同步:

TID: [-1234] [] [2017-03-08 09:41:45,213] DEBUG {org.wso2.carbon.core.deployment.CarbonDeploymentSchedulerTask} -  
    Running deployment synchronizer update... tenant : carbon.super

但是SVN同步器似乎没有更新服务器/部署下的synapse-config中的文件。

您提到这是因为来自经理的消息未到达工作人员。

我确实看到经理发送了一条消息:

TID: [-1234] [] [2017-03-08 08:49:48,121]  
    INFO {org.wso2.carbon.core.deployment.CarbonDeploymentSchedulerTask} -  
    Sent [SynchronizeRepositoryRequest{tenantId=-1234, tenantDomain='carbon.super', 
    messageId=a99ff1fc-58d8-44dd-8804-491216ae1a7c}]

我应该启用哪个调试来查看消息是否到达工作人员?

2 个答案:

答案 0 :(得分:1)

要进行故障排除,您可以查看以下内容。

  1. Axis2.xml中的群集配置 - 当您在单个节点中运行多个配置文件时,您需要将所有3个节点群集为一个群集。因此,所有3个节点中的域名应该相同。
  2. 时间应该在所有3个节点之间同步。
  3. 发布API后,群集消息将发送到工作节点。然后只有工作节点才能从SVN获得更新。

    关于您在管理器节点中收到的错误消息,请检查api-manager.xml中的AuthManager配置。看起来您已将值设置为admin / services。该值应该是密钥管理器节点主机名。在您的情况下,它应该是管理器节点的主机名。

答案 1 :(得分:0)

感谢Pubci的意见,我发现了这个问题。

a)在manager和workers的axis2.xml中,localMemberHost必须是10.0.2.2(这是从VM到其他主机的网关)而不是127.0.0.1:

<parameter name="localMemberHost">10.0.2.2</parameter>

b)同样在axis2.xml中我启用了groupManagement,它已被禁用。在管理器节点中:

    <groupManagement enable="true">
        <applicationDomain name="wso2.apim.domain"
                           description="APIM group"
                           agent="org.wso2.carbon.core.clustering.hazelcast.HazelcastGroupManagementAgent"
                           subDomain="mgt"
                           port="2233"/>
    </groupManagement>

在工作节点中:

    <groupManagement enable="true">
        <applicationDomain name="wso2.apim.domain"
                           description="APIM group"
                           agent="org.wso2.carbon.core.clustering.hazelcast.HazelcastGroupManagementAgent"
                           subDomain="worker"
                           port="2233"/>
    </groupManagement>

(我使用端口2233而不是2222,这是默认设置,因为端口2222在我的群集中用于其他目的)。

现在经理我看到了:

 INFO {org.wso2.carbon.core.clustering.hazelcast.wka.WKABasedMembershipScheme} -  
Member joined [6bf6ae47-bea4-4bc4-beec-9140a626781b]: /10.0.2.2:4200

在工作人员中,在API更改之后,我确实看到了消息,也是针对super.carbon以外的租户:

INFO {org.wso2.carbon.core.clustering.hazelcast.HazelcastClusterMessageListener} -
  Received ClusteringMessage: SynchronizeRepositoryRequest{tenantId=1, tenantDomain='0000s7.com', messageId=a573eeef-46d7-4a2b-bfc9-362296bb60d4}

任何在群集上遇到SVN问题的人的提示:

  1. 确保WSO2出现时显示hazelcast的成员列表是正确的。
  2. 确保在工作人员上线时在管理员日志中看到“成员加入”消息。
  3. 确保在经理变更后,在工作人员处看到“收到消息”。
  4. 调试选项可以帮助您:

    log4j.logger.org.wso2.carbon.core.deployment=DEBUG
    log4j.logger.org.wso2.carbon.deployment.synchronizer=DEBUG