2013-03-20 3 views
9

동기화 상태를 유지해야하는 작은 서버 클러스터가 있습니다. 첫 번째 생각은 하나의 서버를 "마스터"로 설정하고 redis의 pub/sub 기능을 사용하여 업데이트를 게시하고 (클러스터에 이미 redis를 사용하고 있기 때문에) 클러스터의 다른 서버 인 슬레이브가 장기 실행 작업. 이것은 모든 것을 동기화 상태로 유지하는 간단한 방법 인 것처럼 보였지만 그때 명백한 문제를 생각했습니다. "마스터"가 다운되면 어떻게됩니까? 바로 그곳에서 항상 지도자가 있는지 확인하기위한 기술을 연구하기 시작했습니다. 리더가 선거와 같은 아이디어를 읽게되었습니다. 마지막으로, 나는 실수로 많은 내결함성 논리를 처리하는 Apache Zookeeper (비단뱀 바인딩을 통해 "pettingzoo")을 발견했습니다. 내 자신의 리더 선택 코드를 작성할 수는 있지만, 그것이 사육사처럼 증명되고 테스트 된 것과 거의 비슷하지 않을 것이라고 생각합니다.사육사 대 서버 동기화 동기화

동물원 사용과 관련된 주요 문제는 더 단순한 것으로 얻을 수있을 때 불필요하게 설정에 추가하는 구성 요소에 불과하다는 것입니다. 이런 식으로 누구도 redis를 사용한 적이 있습니까? 또는 달성하고자하는 기능 유형을 얻기 위해 사용할 수있는 다른 간단한 방법이 있습니까? 페팅 동물원에 대한

자세한 정보는 난 두려워 (slideshare)

답변

13

는 고 가용성을 달성하기 위해 더 간단한 방법이 없습니다. 설정하기가 까다 롭고 테스트가 까다 롭습니다. 물리적 클러스터링과 논리적 클러스터링이라는 두 가지 범주로 분류되어 HA를 달성하는 여러 가지 방법이 있습니다.

물리적 클러스터링은 하드웨어, 네트워크 및 OS 레벨 메커니즘을 사용하여 HA를 구현합니다. Linux에서는 모든 엔터프라이즈 배포에 포함 된 완전한 오픈 소스 솔루션 인 Pacemaker을 살펴볼 수 있습니다. 응용 프로그램 (C)에 직접 클러스터링 기능을 포함 시키려면 Corosync cluster engine (Pacemaker에서도 사용됨)을 확인하십시오. 상용 소프트웨어를 사용하려는 경우 Veritas Cluster Server은 잘 구축 된 (그러나 값 비싼) 교차 플랫폼 HA 솔루션입니다.

논리적 클러스터링은 특정 저수준 메커니즘에 의존하지 않고도 HA를 구현하기 위해 (예 : 선거 선거, PAXOS 등 ...) 공상 분산 알고리즘을 사용합니다. 이것은 사육사가 제공하는 것과 같은 것입니다.

Zookeeper는 ZAB 프로토콜 (PAXOS와 매우 유사) 위에 구축 된 일관되고 규칙적인 계층 적 저장소입니다. 이것은 상당히 견고하며 일부 HA 기능을 구현하는 데 사용할 수 있지만 사소하지는 않으며 모든 노드에 JVM을 설치해야합니다. 좋은 예를 들면, recipes과 Netflix의 우수 Curator 라이브러리를 살펴볼 수 있습니다. 요즘 Zookeeper는 순수한 Hadoop 컨텍스트와 IMO를 훨씬 넘어서 사용되며 HA 논리 인프라를 구축하기위한 최상의 솔루션입니다.

Redis pub/sub 메커니즘은 읽지 않은 메시지가 손실되기 때문에 논리 클러스터를 구현하기에 충분하지 않습니다 (pub/sub가있는 항목의 대기열이 없음). Redis 인스턴스 모음의 HA를 얻으려면 Redis Sentinel을 시도 할 수 있지만 자신의 소프트웨어에는 적용되지 않습니다.

C로 프로그래밍 할 준비가되면 자주 잊어 버릴 수 있지만 (매우 유용 할 수있는) IM 프레임 워크는 BerkeleyDB입니다. 그것은 매우 기본이지만 기성 선거의 선거를지지하며 모든 환경에 통합 될 수 있습니다. 설명서는 herehere입니다. 참고 : BerkeleyDB에 데이터를 저장하지 않아도 HA 메커니즘 (토폴로지 데이터 - 사용자가 Zookeeper에 넣은 데이터와 동일 함)의 이점을 누릴 수 있습니다.