본문 바로가기

Tibco/BusinessEvents

BE Inference Engine을 위한 Fault Tolerance

일반적으로 Active-Active 구성은 동일한 Agent-Classs를 사용한  PU(Processing Units)을 정의하여 별도의 프로세스(Java Process)를 실행하거나, 하나의 Agent-Class와 하나의 PU가 정의된 구성에서 실행 스크립트에서 -n 옵션으로 여러 개의 프로세스를 실행하여 구현가능하다.

Inference Engine 자체에서 Active-Standby 구성이 간혹 필요한데, 이는 CDD(Cluster Deployment Descriptor)의 구성으로 가능하다. 하지만, 다음과 같은 제약사항이 존재한다. 

Fault Tolerance Limitation Entities that use Memory Only cache mode are not recoverable in fault tolerance failover or failback situations.

즉, FT 구성을 위해서는 중앙의 공유 장소를 위해 Cache Mode를 필요로 하는데, Cache Agent를 사용하지 않는 경우에 위와 같은 Active-Standby 구성을 요구하는 경우가 있을 수 있다. 

이 경우, 구성은 다음과 같이 수행하면 된다.

1) CDD의 Cluster의 Object Management를 Memory에서 Cache로 변경

2) Domain Objects의 Default에서 Mode를 Memory Only 모드로 선택

3) Agent Classes에서 단일 Inference Agent를 구성 : 구성은 다른 구성과 동일하지만, 차이점은 "Max Active"를 1로 설정한다. 

 Max Active(Default 0)  :  Agent-class의 Active한 agent의 최대수를 지정. 이 옵션은 FT(Fault Tolerance)에 사용된다. 예를 들면, 2개의 Agents가 배포되는 환경에서 이 값을 1로 설정하면, 하나의 Agent는 Active 상태이며, 나머지 다른 Agent는 Stand-by 상태로 Active 에이전트가 장애가 발생하면 active 상태로 전의됨.

4) Processing Units에 두 개의 PU를 등록하며, 개별 PU의 Agent는 동일한 Agent-class를 사용하지만, Priority를 서로 다르게 주어야 함. 추가로 Cache의 기능을 사용하기 때문에 두 PU 모두 "Enable Cache Storage" 옵션을 체크하여 사용해야 함.

위의 예와 같이, filePollingInf Agent Classes는 Max Active가 1으로 설정

1) filePollingPU-1의 Priority는 1이고,

2) fillePollingPU-2의 Priority는 2로 설정되어 실행하면, 아래와 같은 로그를 확인할 수 있다.


1번서버 로그

//-----------------------------------------------------------------------------------

2015 Apr 10 13:18:03:350 GMT +9 filePollingPU-1 Info [AgentMgr.Thread.1] - [runtime.service]

Currently known [filePollingUnf] agents = 2

   Member: filePollingPU-1, Agent name: filePollingUnf, Agent id: 0, Agent priority: 1, Status: ACTIVATED

   Member: filePollingPU-2, Agent name: filePollingUnf, Agent id: 1, Agent priority: 2, Status: INITIALIZED

//-----------------------------------------------------------------------------------