2013-10-28 2 views
4

"일관된 해싱"모드에서 memcached를 사용할 때, 노드가 다운되었을 때 클라이언트가 알 고로 키를 다시 매핑합니다. Memcached 일관된 해싱 및 네트워크 파티셔닝, 해결 방법

내가 2 클라이언트가 고려 (A를 B) 및 두 개의 서버 (C, D)

어떤 클라이언트 A가 서버 C가 다운 생각하지만, B는 C가 아직 살아 생각한다면?

그래서 A는 C & D를 계속 사용하지만 B는 D 만 사용합니다. 데이터 불일치를 해결하는 방법은이 경우에서 발생합니까?

답변

1

서버 A와 B가 memcached 인스턴스의 동일한 상태를 확인해야합니다. 나는 그것이 memcached 인스턴스 (C & D) 프록시 (moxi 또는 twemproxy) 뒤에 숨겨 질 때 달성 될 수 있다고 생각합니다. 프록시는 memcached 인스턴스의 상태를 유지 관리합니다. 응용 프로그램 서버 (A & B)는 프록시에만 연결해야합니다.

0

고유 한 memcached 데몬을 실행하는 "가용성"중앙 서버를 사용하고 사용 가능한 모든 memcached 서버의 배열을 반환하는 "avail_servers"라는 키를 제공합니다. 이것은 끊임없이 새롭게합니다.

내 웹 서버는 먼저이 중앙 서버에 연결하여 사용 가능한 서버 목록을 가져온 다음 값을 저장/검색하는 데 사용합니다. "A"서버가 여전히 "사용 가능"목록에있는 서버를 작동 중지로 간주하면 문제가 해결 될 때까지 서비스 제공을 중단 할 수 있도록 몇 가지 추가 검사를 작성할 수 있습니다.

+0

괜찮 으면서하지만 단일 실패 지점을 도입했습니다. 어떻게이 문제를 해결 했습니까? –

+0

살아있는 서버의 매핑을 유지하기 위해 중앙 서버 대신 Zookeeper와 같은 것을 사용할 수 있습니다. 모든 서버는 "임대"를 유지하기 위해 정기적으로 하트 비트를 보내야합니다. – Dimos