Zgodnie z komunikatami o zatwierdzeniu git, usługa ServiceStack dodała ostatnio obsługę przełączania awaryjnego. Początkowo zakładałem, że oznacza to, że mogę wycofać jedną z moich instancji Redis, a mój menedżer klienta z pulami poradziłby sobie z awaryjnym przełączaniem awaryjnym i spróbował połączyć się z jedną z moich alternatywnych instancji Redis. Niestety, mój kod właśnie załamuje się i mówi, że nie może połączyć się z początkową instancją Redis.Jak działa przełączanie awaryjne ServiceStack PooledRedisClientManager?
Aktualnie używam instancji Redis 2.6.12 na Windowsie, z masterem na porcie 6379 i slave na 6380, z ustawionymi wskaźnikami, aby automatycznie wypromować urządzenie podrzędne do mastera, jeśli master się wyłączy. Ja obecnie instancji menedżera klienta tak: gospodarze
PooledRedisClientManager pooledClientManager =
new PooledRedisClientManager(new string[1] { "localhost:6379"},
new string[1] {"localhost:6380"});
gdzie pierwsza tablica jest tylko do odczytu (dla Master), a druga tablica jest tylko do odczytu gospodarze (dla slave).
Kiedy kończę kapitana w porcie 6379, strażnicy promują niewolnika do kapitana. Teraz, gdy próbuję uruchomić mój kod C#, zamiast przeskakiwać do portu 6380, po prostu przerywa i zwraca błąd "nie mógł połączyć się z instancją redis na localhost: 6379".
Czy istnieje sposób obejścia tego problemu, czy przejście awaryjne po prostu nie zadziała tak, jak tego chcę?
Znalazłeś sposób @Vliu – jaxxbo
Nie, z większości badań, które zrobiłem, większość ludzi nie polega na kodzie do obsługi przełączania awaryjnego. Używają one (linuksowej) warstwy proxy w bazie danych redis, takich jak HAProxy @jaxxbo – Vliu