2013-07-02 1 views
6

git commit 메시지에 따르면 ServiceStack에서 최근에 장애 조치 지원을 추가했습니다. 처음에는 이것이 나의 Redis 인스턴스 중 하나를 끌어낼 수 있다는 것을 가정하고, 풀링 된 클라이언트 관리자가 장애 복구를 우아하게 처리하고 대체 Redis 인스턴스 중 하나와 연결을 시도합니다. 불행히도, 내 코드는 버그가 나고 초기 Redis 인스턴스와 연결할 수 없다고 말합니다.ServiceStack PooledRedisClientManager 페일 오버는 어떻게 작동합니까?

현재 Windows에서 Redis 2.6.12의 인스턴스를 실행 중입니다. 포트 6379의 마스터와 6380의 슬레이브가 있으며, 마스터가 다운되면 자동으로 슬레이브를 마스터로 승격하도록 설정됩니다. 나는 현재이처럼 내 클라이언트 관리자를 인스턴스화하고 (슬레이브 용)

PooledRedisClientManager pooledClientManager = 
    new PooledRedisClientManager(new string[1] { "localhost:6379"}, 
     new string[1] {"localhost:6380"}); 

첫 번째 배열은 읽기 - 쓰기 (마스터 용) 호스트, 두 번째 배열은 읽기 전용 호스트.

포트 6379에서 마스터를 종료하면 감시 모니터가 슬레이브를 마스터로 승격합니다. 이제 6380 포트로 장애 조치하는 대신 C# 코드를 실행하려고하면 "localhost : 6379에서 redis 인스턴스에 연결할 수 없습니다"라는 오류가 발생하고 중단됩니다.

이 문제를 해결할 수있는 방법이 있습니까? 아니면 장애 조치 (failover)가 원하는대로 작동하지 않을까요?

+1

길을 찾았습니까? Vliu – jaxxbo

+0

아니요, 대부분의 연구에서 대부분의 사람들은 장애 조치를 처리하기 위해 코드에 의존하지 않습니다. 그들은 HAProxy @jaxxbo와 같은 redis 데이터베이스를 통해 (linux) 프록시 레이어를 사용합니다. – Vliu

답변

4

PooledRedisClientManager.FailoverTo은 읽기/쓰기 호스트 인 호스트와 읽기 전용 호스트를 재설정하고 공장을 다시 시작할 수 있습니다. 따라서 클라이언트를 다시 만들지 않고도 신속하게 전환 할 수 있습니다.

+1

try {// redis operation} catch {PooledRedisClientManager.FailoverTo (읽기 - 쓰기 포트로 슬레이브 포트)}와 비슷합니까? – Vliu

+1

그건 그걸 할 수있는 방법 중 하나입니다. Redis Sentinel에서 들어오는 요청을 처리 할 특별한 서비스를 설정했습니다. 실패한 노드를 감지하면 적절한 슬레이브를 협상하고 승격 한 다음 내 웹 서비스에 새 주소 및 포트를 알립니다. – TheDruidsKeeper

+0

안녕하세요 @ TheDruidsKeeper, 예를 들어, 어떤 서비스를 의미하는지, 실패한 노드를 정확히 감지하는 방법에 대해 감사드립니다. – wliao