2012-07-07 4 views
5

나는 ZooKeeper를 처음 사용합니다. 이것이 내가 필요한 것입니다.ZooKeeper - 피어를 동적으로 추가 하시겠습니까?

나는 동료들의 네트워크를 가졌습니다. t=t_1 -> [peer-1 (Leader), peer-2] 피어 1의

  1. 마스터이고, 모든 클라이언트가이 노드에 연결한다.

  2. t=t_2 -> [peer-1 (Leader), peer-2, peer-3] 나중에 피어 -3이 그룹에 참여합니다. Zookeeper 서버 목록에 peer-3을 "동적으로"추가 할 수 있습니까 (즉, peer-1에서 ZooKeeper를 다시 시작하지 않아도됩니까?). 잠시 두 피어 1 피어 -2- 후 t=t_3 -> [peer-3 (Leader), peer-4] 에서

  3. 그룹을두고 (예를 들면, 다이 또는 오프 스위칭된다.) 동적으로 피어 3 피어 (4)을 추가하는 방법이 존재한다고 가정 그룹 피어 3가 리더가되고 모든 클라이언트 요청이 피어 3에 전송됩니다.

이와 비슷한 방법으로 ZooKeeper를 사용하는 것 외에 다른 옵션을 사용할 수 있습니까?

감사합니다.

답변

6

현재 재시작하지 않고도 사육사 클러스터의 구성을 동적으로 변경할 수 없습니다. 문제를 해결할 수있는 열린 문제가 있습니다 (ZOOKEEPER-107). 클러스터 멤버쉽 알고리즘을 설명하는 문서는 매우 흥미로 우며 here입니다.

서버 노드를 한 번에 하나씩 다시 시작하여 클러스터 구성을 변경할 수 있습니다. 예를 들어, 클러스터 경우는 서버 A, B, C를 가지고 있으며, 당신이, 당신은

  • , 뭔가를 할
  • C
  • 을 가져 D를 가져올 수있는 D와 서버 C를 교체하려면, 그것은 피어 목록입니다 인 A, B, D
  • B 아래로 가라
  • A, B로 변경 B의 피어 목록, D
  • B 불러옵니다
  • A, B에 대한 변경 A의 피어 목록, D
  • 을 가지고 A
  • 을 불러 오십시오. 모든 클라이언트의 클라이언트 구성은 A, B를 가리 키도록
  • 변경, D t에서

= T_1, 당신은 2 개 사육사 노드와 클러스터가 있습니다. 두 노드 중 하나가 다운되면 쿼럼 (층 (N/2) + 1)을 설정하지 못하고 클러스터를 사용할 수 없게되므로 매우 취약합니다. 일반적으로 사육사 클러스터는 홀수입니다. 나는 당신이 말할 때 뭘 하려는지 모르겠어요

,

피어-3 리더가되어 모든 클라이언트 요청은 피어-3를 보낼 수 있습니다.

사육사 클러스터에서 어떤 노드를 리더로 지정할 지 노드 자체가 리더를 선출하고 노드가 위아래로 이동함에 따라 리더십이 변경됩니다.또한 일반적으로 클라이언트는 항상 리더에 연결하지 않지만 클라이언트는 클러스터에있는 시스템 목록을 제공 받고 임의로 연결 한 다음 연결되어있는 서버가 다운되면 다시 연결합니다. leaderServes 옵션을 설정하여 리더가 클라이언트 연결을 서버하지 않도록 지정할 수 있습니다.

+1

ZK [alpha 3.5] (https://zookeeper.apache.org/doc/r3.5.2-alpha/zookeeperRecon)에서 해결 된 것 같습니다. fig.html). – Alastair

1

어떤 생산 상황에서도 위의 사용을 권장하지 않습니다. 위의 해결책은 모든 변경이 완료 될 때까지 ZK 쿼럼을 잃어 버리는 경우에만 작동합니다. >이 A 지점에서 B는 D에 대해 잘 모릅니다 - -> D가 AB

에 대해 알고는

"피어 목록이 A, B, D입니다입니다, D를 가져 C를 가져 :

여기에 이유

지금이 시점에서 당신은 옆 B를 가지고 쿼럼 만 A와 B 기능을 가지고 있고 쿼럼을 잃게됩니다.

마이그레이션이 완료되고 쿼럼이 다시 복원 될 때까지, ZK 데이터에 액세스 할 수 없게됩니다

. 가장 잘 이 경우에는 zk를 사용하여 응용 프로그램을 읽기 전용 모드로 페일 오버하고 정상적으로 덮개.

Zookeeper 3.5에서 Zookeeper-107이 발표 될 때까지, 당신은 현명하게 독약을 선택해야합니다.

그것의 더 나은 : 마이그레이션이 완료되면

  1. 단지 설정 새로운 ZK 앙상블 (ZK 클러스터)
  2. 새로운 ZK 앙상블
  3. 에 스냅 샷에서 이전 ZK 앙상블에서
  4. mirate 응용 프로그램을 복원 이전 zk 앙상블을 종료하십시오.
+0

이 방법은 어떨까요 : https://gist.github.com/miketheman/6057930 – pdeva

관련 문제