WSO2 SVN Synchronizer가 클러스터의 관리자 업데이트와 동기화하는 데 큰 지연

오퍼 라하브

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의 관리자 노드
  • 포트 4100 및 4200의 작업자 노드

텔넷을 사용하여 확인했고 모든 포트가 모든 노드에서 액세스 할 수 있습니다.

관리자의 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에 문제가있는 사람을위한 팁 :

  1. WSO2가 나올 때 hazelcast가 표시하는 구성원 목록이 올바른지 확인하십시오.
  2. 작업자가 올 때 관리자 로그에 Member Joins 메시지가 표시되는지 확인하십시오.
  3. 관리자의 변경 후 작업자에게 "메시지 수신"이 표시되는지 확인하십시오.

도움이되는 디버깅 옵션 :

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

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

패키지 업데이트 릴리스와 업데이트 관리자의 가용성 사이에 큰 지연

분류에서Dev

WSO2 Appmanager 및 EMM의 자동 업데이트 기능

분류에서Dev

WSO2 API 관리자 : 외부 데이터베이스를 사용할 때 chpasswd.sh가 작동하지 않음

분류에서Dev

WSO2 업데이트 관리자 (WUM)와 Puppet

분류에서Dev

WSO2이며, 클러스터 MySQL을위한 API를 관리자 데이터베이스 구성

분류에서Dev

WSO2 데이터 서비스 트랜잭션 관리

분류에서Dev

업데이트 관리자가 작동하지 않음

분류에서Dev

업데이트 관리자가 작동하지 않습니다.

분류에서Dev

WSo2 EMM-앱 관리 데이터베이스 버그

분류에서Dev

cURL을 사용하여 wso2 Api 관리자 테스트

분류에서Dev

Ubuntu-12.04 업데이트 관리자 및 소프트웨어 센터가 작동하지 않음

분류에서Dev

Ubuntu-12.04 업데이트 관리자 및 소프트웨어 센터가 작동하지 않음

분류에서Dev

Ubuntu-12.04 업데이트 관리자 및 소프트웨어 센터가 작동하지 않음

분류에서Dev

Doctrine2 엔티티 관리자가 관련 엔티티를 업데이트하지 않음

분류에서Dev

작동하지 않는 위치 관리자의 업데이트 제거

분류에서Dev

업데이트 관리자가 12.04 로의 업그레이드를 감지하지 못함

분류에서Dev

WSO2 API 관리자 게이트웨이 클러스터 구성

분류에서Dev

WSO2 : Siddhi 쿼리에서 출력 스트림 업데이트

분류에서Dev

wso2 api manager 3.1.0 jwks가 토큰을 생성하는 데 사용되는 kid를 반환하지 않습니다.

분류에서Dev

AG-Grid React, 데이터 변경시 사용자 지정 셀 렌더러를 업데이트하는 데 문제가 있습니다. 함수 구성 요소는 클래스 구성 요소와 다르게 작동합니다.

분류에서Dev

여러 스레드가 데이터베이스의 동일한 행을 한 번에 업데이트하여 일관성을 유지하는 방법

분류에서Dev

Tortoise에서 SVN 업데이트가 작동하지 않음

분류에서Dev

JMeter : 플러그인 관리자가 Ubuntu의 옵션> 플러그인 관리자에 업데이트를 표시하지 않습니다.

분류에서Dev

레지스트리 데이터베이스 wso2를 변경할 수 없습니까?

분류에서Dev

사용자 지정 목록보기가 ADT의 새 업데이트와 함께 작동하지 않습니다.

분류에서Dev

Azure DevOps의 마스터 분기와 동기화되지 않는 데이터 팩터 리 v2 adf_publish 분기를 수정하는 방법

분류에서Dev

업데이트 관리자가 실패하고 apt-get 업데이트가 93 %에서 중지됨

분류에서Dev

업데이트 관리자가 더 이상 업데이트를 설치하지 않습니다.

분류에서Dev

CopyQ 클립 보드 관리자가 KeePass의 데이터를 보관하지 못하도록 방지

Related 관련 기사

  1. 1

    패키지 업데이트 릴리스와 업데이트 관리자의 가용성 사이에 큰 지연

  2. 2

    WSO2 Appmanager 및 EMM의 자동 업데이트 기능

  3. 3

    WSO2 API 관리자 : 외부 데이터베이스를 사용할 때 chpasswd.sh가 작동하지 않음

  4. 4

    WSO2 업데이트 관리자 (WUM)와 Puppet

  5. 5

    WSO2이며, 클러스터 MySQL을위한 API를 관리자 데이터베이스 구성

  6. 6

    WSO2 데이터 서비스 트랜잭션 관리

  7. 7

    업데이트 관리자가 작동하지 않음

  8. 8

    업데이트 관리자가 작동하지 않습니다.

  9. 9

    WSo2 EMM-앱 관리 데이터베이스 버그

  10. 10

    cURL을 사용하여 wso2 Api 관리자 테스트

  11. 11

    Ubuntu-12.04 업데이트 관리자 및 소프트웨어 센터가 작동하지 않음

  12. 12

    Ubuntu-12.04 업데이트 관리자 및 소프트웨어 센터가 작동하지 않음

  13. 13

    Ubuntu-12.04 업데이트 관리자 및 소프트웨어 센터가 작동하지 않음

  14. 14

    Doctrine2 엔티티 관리자가 관련 엔티티를 업데이트하지 않음

  15. 15

    작동하지 않는 위치 관리자의 업데이트 제거

  16. 16

    업데이트 관리자가 12.04 로의 업그레이드를 감지하지 못함

  17. 17

    WSO2 API 관리자 게이트웨이 클러스터 구성

  18. 18

    WSO2 : Siddhi 쿼리에서 출력 스트림 업데이트

  19. 19

    wso2 api manager 3.1.0 jwks가 토큰을 생성하는 데 사용되는 kid를 반환하지 않습니다.

  20. 20

    AG-Grid React, 데이터 변경시 사용자 지정 셀 렌더러를 업데이트하는 데 문제가 있습니다. 함수 구성 요소는 클래스 구성 요소와 다르게 작동합니다.

  21. 21

    여러 스레드가 데이터베이스의 동일한 행을 한 번에 업데이트하여 일관성을 유지하는 방법

  22. 22

    Tortoise에서 SVN 업데이트가 작동하지 않음

  23. 23

    JMeter : 플러그인 관리자가 Ubuntu의 옵션> 플러그인 관리자에 업데이트를 표시하지 않습니다.

  24. 24

    레지스트리 데이터베이스 wso2를 변경할 수 없습니까?

  25. 25

    사용자 지정 목록보기가 ADT의 새 업데이트와 함께 작동하지 않습니다.

  26. 26

    Azure DevOps의 마스터 분기와 동기화되지 않는 데이터 팩터 리 v2 adf_publish 분기를 수정하는 방법

  27. 27

    업데이트 관리자가 실패하고 apt-get 업데이트가 93 %에서 중지됨

  28. 28

    업데이트 관리자가 더 이상 업데이트를 설치하지 않습니다.

  29. 29

    CopyQ 클립 보드 관리자가 KeePass의 데이터를 보관하지 못하도록 방지

뜨겁다태그

보관