2013-07-31 2 views
5

spymemcached & HashAlgorithm.KETAMA_HASH를 사용하여 5 개 노드의 memcached 풀에 연결합니다.spymemcached & HashAlgorithm.KETAMA_HASH를 사용할 때 복구 memcached 노드를 처리하는 방법

내가 알기로 우리가 같은 일관된 해싱 알고리즘을 사용하면 노드가 다운되면, 우리는 키를 다시 배포됩니다로

만약에 (분. 영향을) 걱정할 필요가 없습니다 것입니다 다운 된 노드가 풀에 참여하게됩니다. 내가해야하는 것?

부실 데이터를 제거해야합니까? 아니면 내 프로그램이이 사건에 대한 특별한 처리가 필요한가요?

답변

4

이 문서가 정확하다는 것을 감안할 때 : http://info.couchbase.com/rs/northscale/images/Couchbase_WP_Dealing_with_Memcached_Challenges.pdf

이 어떤 네트워크 중단하고, 하나 이상의 클라이언트가 특정 memcached와 서버가 더 이상 사용할 수없는 것으로 결정하는 경우, 그들은 자동으로 로 일부 데이터를 재탕합니다 원래 노드가 여전히 사용 가능하더라도 나머지 노드. 노드가 결국 서비스로 복귀하면 (예 : 네트워크 중단이 해결 된 후) 노드의 데이터가 오래되고 키 서버 재 매핑 정보가 업데이트되지 않은 클라이언트는 부실 데이터를 읽습니다.

이 최신 여전히 가정 : http://lists.danga.com/pipermail/memcached/2007-April/003852.html 그것은 다시 추가하기 전에 노드를 플러시/안전 갱신 될 것입니다. 다운 된 노드가 부실 항목을 지우도록 강요합니다.

+0

내 이해는 모든 노드의 모든 부실 데이터를 플러시해야한다는 것입니다. 왜? 일부 클라이언트는 다운 된 노드가 작동하는 것을 볼 수 있기 때문에 일부 클라이언트는 여전히 노드가 다운되었다고 가정 할 수 있습니다. 따라서 클라이언트가 키를 다른 노드로 해시 할 수 있으므로 데이터 불일치가 발생할 수 있습니다. 그러나이 문제는 모든 memcached 노드를 잠그고 플러시를 수행하여 경쟁 조건을 피할 수있는 방법이 없으면 어렵습니다. – Howard

+0

내 의견에 따라, 나는 down-ed 노드를 플러시하는 것이 여전히 안전하다고 생각합니다. 깨끗합니다. 노드에 대한 요청이 있으면 새로운 정보를 추가하여 놓치게됩니다. 클라이언트가 다운 된 것으로 판단되면 다른 노드로 해시되며 이로 인해 손실 될 수 있습니다. 이 경우 두 노드 모두 'foo'키를 갖습니다. 다운 된 노드가 해당 클라이언트에 온라인으로 돌아 오면 다시 플러시해야합니다. 여기에 대한 자세한 내용은 다음과 같습니다. http://www.caiapps.com/duplicate-key-problem-in-memcache-php/ –

+1

그래,하지만 당신은 단 하나의 클라이언트가 있지만 여러 대의 서버가있는 경우에만 유효하다고 말했습니다. 주어진 시간에 memcached 서버의 동일한 세트를 사용하도록 다른 클라이언트를 조정할 수있는 방법이 없습니다 (일관된 해싱 사용을 가정). – Howard

관련 문제