2017-10-24 13 views
0

필자는 예상대로 3 개의 슬레이브와 3 개의 마스터로 6 개의 노드 Redis 클러스터를 가동했습니다.
Redis 서버 관점에서 볼 때 모든 것이 늠름한 것 같아서 서버에서 cluster failover 또는 debug segfault이라고 부를 수 있으며 적절한 슬레이브가 마스터가됩니다.ConnectionMultiplexer를 사용하여 Redis 클러스터에서 장애 조치를 처리하는 방법은 무엇입니까?

.net 측에서는 StackExchange Redis 설명서를 따르므로 이 있고 여기에서 IDatabase을 가져오고 값을 저장하고 검색 할 수 있습니다. 너무 좋아, 지금까지 srv1:7001,srv2:7001,srv3:7001,srv1:7002,srv2:7002,srv3:7002

:

내가 좋아하는 연결 문자열을 사용하고 있습니다.

그러나 연결 멀티플렉서를 사용할 때 클러스터의 마스터 오류를 처리하는 방법을 파악하려고합니다. 현재 내가 생각해 낼 수있는 가장 좋은 점은 예외를 잡아 내고 현재의 연결 멀티플렉서를 버리고 전혀 새로운 느낌을주는 새로운 멀티플렉서를 만드는 것입니다.

내가 연결할 때 멀티플렉서에게 모든 잠재적 종단점을 말하면서, 나는 이것과 같은 것에 주목하고 새로운 마스터와 자동으로 대화하기를 기대하고 있었다. the documentation 중 일부는 너무 말을이을 암시 : 구성 (특히 마스터/슬레이브 구성) 변경 될 때 연결된 인스턴스가 새로운 상황을 스스로 인식하게하는

마찬가지로

는,이 정보를 통해 (중요하다, CONFIG 등 - 사용 가능한 경우). 내가 srv1:7001을 죽이고 아무것도하지 않고, 다음 연결이 결코 회복하지 않으며, 모든 호출은 새로운 값이 RedisConnectionException 던졌습니다 설정하는 경우 StackExchange.Redis는

...에 의해 자동으로이 작업을 수행합니다.

나는 이벤트가 ConfigurationChanged, ConfigurationChangedBroadcast, ConnectionFailed에 붙으려고 시도하고 마스터가 다운되었을 때 방송을보기 위해 다양한 채널에 가입하려고했습니다. 내가 마스터에서 클러스터를 변경하게 만들면 이들 중 아무 것도 트리거되지 않는 것 같습니다.

그래서 내가 놓친 것이 있는지 궁금합니다.

건배,
크레이그.

답변

0

주위를 놀고 난 후에 멀티플렉서가 결국 스스로를 재구성한다는 것을 알았습니다. 처음에는 디버그 모드 검사에서 멈추는 동안 이것을 알았고, 계속 진행했을 때 예기치 않게 다시 작동하기 시작했습니다.

기본값 인 60보다 연결 문자열에 configCheckSeconds=1을 설정하면 재구성이 훨씬 더 신속하게 이루어 지므로 이것이 범인이라고 가정합니다.

이 설정을 너무 많이 변경하면 오버 헤드가 얼마나 될지 잘 모르겠습니다. 아마도 일반적인 사용에서는 실패한 클러스터 노드가 아마도 거의 발생하지 않을 것이므로 매우 자주 재구성 할 필요는 없습니다. 방금 테스트를 통해 극단적 인 시나리오를 만들었습니다.