Windows PC의 VM에서 WSO2 APIM 1.10.0에서 테스트 환경을 실행하고 있습니다. MySQL 서버 (내 PC에서도 실행되는 MiraDB)를 사용하도록 구성되어 있습니다. 모든 것이 잘 작동했습니다.
최근에 내 PC에 3 개의 VM을 설정하여 WSO2 클러스터 환경을 시도하고 싶었습니다.
또한 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는
텔넷을 사용하여 확인했고 모든 포트가 모든 노드에서 액세스 할 수 있습니다.
관리자의 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 리포지토리에 표시되지만 작업자에서는 / AppMount / wso2 / repository / tenants 디렉터리가 비어 있습니다. 수퍼 카본 [-1234]에 대한 변경 사항 만 채워집니다. 그것이 같은 문제인지 다른 것인지 확실하지 않습니다.
모든 아이디어를 높이 평가할 것입니다.
Pubci의 입력을 기반으로 한 후속 조치 # 1
관리자의 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
로그에서 "도메인 : 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}]
작업자에게 메시지가 도착하는지 확인하려면 어떤 디버그를 활성화해야합니까?
Pubci의 의견 덕분에 문제를 발견했습니다.
a) 관리자와 작업자 모두의 axis2.xml에서 localMemberHost는 127.0.0.1이 아닌 10.0.2.2 (VM에서 다른 호스트로의 게이트웨이) 여야합니다.
<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>
(클러스터에서 포트 2222가 다른 용도로 사용되므로 기본값 인 2222 대신 포트 2233을 사용하고 있습니다.)
이제 관리자에서 볼 수 있습니다.
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에 문제가있는 사람을위한 팁 :
도움이되는 디버깅 옵션 :
log4j.logger.org.wso2.carbon.core.deployment=DEBUG
log4j.logger.org.wso2.carbon.deployment.synchronizer=DEBUG
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다