2017-11-30 17 views
1

우리는 제품에 hazelcast 분산 잠금 및 캐시 기능을 사용하고 있습니다. 분산 잠금의 사용은 비즈니스 로직에서 매우 중요합니다.Hazelcast - 클라이언트 모드 - 클러스터 장애 후 복구 방법?

현재 우리는 임베디드 모드를 사용하고 있습니다 (각 응용 프로그램 노드도 hazelcast 클러스터 멤버입니다). 클라이언트 - 서버 모드로 전환 할 것입니다.

우리가 클라이언트 - 서버에서 발견 한 문제는 클러스터가 일정 기간 동안 다운 된 후 클라이언트가 여러 번 시도되고 해당 클라이언트에서 검색된 객체 (맵, 세트 등)가 없으면 더 이상 사용할 수 있습니다.

issue1

: 또한 심지어 Hazelcast 클러스터 후 복구하지 않습니다 클라이언트 인스턴스 내가이 문제가 여러 번 해결 및 기능 요청 인 것으로 끝났다 된 것을 알고

(우리가 HazelcastInstanceNotActiveException를 수신) 다시 작동

issue2

issue3

내 질문 : 무엇을해야 클라이언트를 복구하는 전략이 될 수 있을까요? 현재 우리는 아래와 같이 클라이언트 프로세스에서 작업을 대기열에 넣을 계획입니다. 조건에 따라 클라이언트 인스턴스를 다시 시작하려고 시도합니다 ... clientInstance.getLifecycleService(). isRunning() check를 통해 클라이언트가 실행 중인지 여부를 확인합니다.

private class ClientModeHazelcastInstanceReconnectorTask implements Runnable { 

    @Override 
    public void run() { 
     try { 
      HazelCastService hazelcastService = HazelCastService.getInstance(); 
      HazelcastInstance clientInstance = hazelcastService.getHazelcastInstance(); 
      boolean running = clientInstance.getLifecycleService().isRunning(); 
      if (!running) { 
       logger.info("Current clientInstance is NOT running. Trying to start hazelcastInstance from ClientModeHazelcastInstanceReconnectorTask..."); 
       hazelcastService.startHazelcastInstance(HazelcastOperationMode.CLIENT); 
      } 
     } catch (Exception ex) { 
      logger.error("Error occured in ClientModeHazelcastInstanceReconnectorTask !!!", ex); 
     } 
    } 

} 

이 방법이 적합 : 여기

태스크 코드? 또한 LifeCycle 이벤트를 청취하려고했지만 이벤트를 통해 작동하지 못했습니다.

감사합니다.

답변