2017-03-07 207 views
0

我正在Windows PC上的虛擬機上的WSO2 APIM 1.10.0上運行測試環境。它被配置爲使用MySQL服務器(我在我的PC上運行的MiraDB)。一切正常。WSO2 SVN同步器與集羣管理器更新同步的巨大滯後

最近我想通過設立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配置爲集羣與

  • Manager節點端口4500
  • 端口4100和4上的工作器節點200

我檢查使用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

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}] 

趕到客戶在16:34添加ofer2 API,5分鐘後:

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是出版商的休息,這是沒有關係的。

日誌中沒有其他東西看起來很有趣。

最後說明:租戶的更改根本沒有填充。我在管理器上有租戶#1,而且我確實在SVN存儲庫上看到它,但在該工作器上,目錄/ AppMount/wso2/repository/tenants是空的。只有對超碳[-1234]的改變纔會被填充。不知道這是相同的問題,還是別的什麼。

任何想法將不勝感激。


跟進#1,基於從Pubci輸入


  • 時間是同步的B/W所有三個節點
  • 域是在所有三個節點相同(我離開了默認值)

axis2.xml經理(10.0.2.2是該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> 

axis2.xml工作節點1:

<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 

注意「域:空」在日誌中。這個可以嗎?

當工人就要到了,它與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同步器似乎不會更新server/deployment下的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}] 

我應該讓哪些調試,看看消息在工人到達?

回答

0

感謝來自Pubci的意見,我發現了這個問題。

一)在這兩個經理和工人的axis2.xml中,localMemberHost必須是10.0.2.2(這是從虛擬機到其他主機的網關),而不是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. 確保在經理髮生更改後,在工作人員處看到「收到消息」。

調試選項來幫助你:

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

對於故障排除,您可以檢查以下內容。

  1. Axis2.xml中的羣集配置 - 當您在單個節點中運行多個配置文件時,需要將所有3個節點作爲一個羣集進行羣集。所以3個節點中的域名應該相同。
  2. 時間應該在所有3個節點之間同步。

發佈API後,羣集消息將發送到工作節點。那麼只有工作節點會從SVN獲得更新。

關於您在管理器節點中獲得的錯誤消息,請檢查api-manager.xml中的AuthManager配置。看起來您已將該值設置爲管理員/服務。該值應該是密鑰管理器節點主機名。在你的情況下,它應該是管理器節點的主機名。

+0

我更新根據您輸入的一些跟進的原始郵件。參見「跟進1」。 –

+0

請重新檢查您的羣集配置。在成員列表中,我可以使用127.0.0.1。基本上,無論在成員名單中提到的IP地址是否提供給其他成員。他們使用該IP地址連接到其他節點。所以127.0.0.1不能使用。 LocalMemberPort應該是它自己的羣集端口。對於經理來說,它是4500,其他工作者節點應該是4100和4200.您是否看到任何日誌中的「成員加入」消息。如果節點正確聚集,你應該在兩個節點中的任何一箇中看到。 – Pubci

+0

域名無效。您看到的配置是您配置的內容。這並不意味着節點已正確聚類。成員加入日誌應該在那裏。 – Pubci