2015-01-12 1 views
3

에 나는 큐레이터 클라이언트를 만들 :시간 초과 구성은 큐레이터

RetryPolicy retryPolicy = new RetryNTimes(3, 1000); 
    CuratorFramework client = CuratorFrameworkFactory.newClient(zkConnectString, 
      15000, // sessionTimeoutMs 
      15000, // connectionTimeoutMs 
      retryPolicy); 

내 클라이언트 프로그램을 실행 나는 큐레이터가 사육사와 통신하기 위해 사용하고있는 NIC를 가져 와서 네트워크 파티션을 시뮬레이션 할 수 있습니다. 내가 보는 행동에 따라 몇 가지 질문이 있습니다.

  1. 10 초 후에 ConnectionStateManager - State change: SUSPENDED 메시지가 표시됩니다. 큐레이터가 다른 제한 시간 값의 백분율 또는 항상 10 초를 기준으로 구성 가능한 일시 중지 상태가 될 때까지의 시간입니까?
  2. 마지막으로 성공한 하트 비트 이후 구성된 15 초 세션 제한 시간이 지난 후 알림을 수신하지 못합니다 (). I do 로그에 ZooKeeper - Session: 0x14adf3f01ef0001 closed 메시지가 표시됩니다. 그러나이 메시지는 캡처 또는 수신 대기 할 수있는 이벤트로 보이지 않습니다. 내가 여기서 뭔가를 놓치고 있니?
  3. 연결이 끊어진 후 약 2 분 후에 결국 ConnectionStateManager - State change: LOST 메시지가 나타납니다. 왜 그렇게 오래 있지?
  4. HA 시나리오에서 스플릿 브레인을 방지하기위한 방법으로 InterProcessMutex를 사용하는 것이 목표라면 가장 안전한 방법은 잠금 홀더가 SUSPENDED 메시지를 받았을 때 잠금을 잃었다 고 가정하는 것입니다. 사육사가 네트워크 파티션의 반대쪽에있는 잠금 장치를 해제했을 가능성이 완전히 있기 때문입니다. 이것은 전형적인/건전한 접근입니까?
+0

질문에 대한 답변을 찾았습니까? 나는 같은 문제를 겪고있다. –

답변

0
그것은 당신이 (참고 : 나는 큐레이터의 주요 저자 해요)를 사용하는 큐레이터의 버전을 따라

은 ...

큐레이터 2.X에서

, 잃어버린 상태는 재시도 정책이 있음을 의미 소진되었다. 세션이 손실되었음을 의미하지는 않습니다. ZooKeeper에서는 세션이 일단 앙상블과의 연결이 복구되면 잃어버린다고 결정됩니다. 따라서 큐레이터가 첫 번째 "연결 끊김"메시지를 볼 때 일시 중지됩니다. 그런 다음 작업을 포기하는 재시도 정책으로 인해 실패하면 손실됩니다.

큐레이터 3.x에서 LOST의 의미가 변경되었습니다. "Disconnected"가 수신되면 3.x에서 큐레이터는 내부 타이머를 시작합니다. 타이머가 협상 된 세션 제한 시간을 지날 때 큐레이터는 getTestable(). injectSessionExpiration()을 호출하고 LOST 상태 변경을 게시합니다.