5

Testuję ten wspaniały klejnot Octopus z Rails 4.0.2 w rozwoju.Rails Octopus Gem - Master-Slave Replikacja połączenia zachowanie, gdy slave jest w dół

stworzyłem db niewolnikami i skonfigurowany ośmiornicę następująco (config> shards.yml):

octopus: 
    environments: 
    - development 
    replicated: true 
    fully_replicated: true 
    verify_connection: true 
    development: 
    slave1: 
     host: 192.168.1.12 
     adapter: mysql2 
     username: slave_reader 
     password: my_password 
     database: my_server_development 
     reconnect: true 

Działa bardzo ładne, z czytania i pisania Slave do Mistrza, jednak jeśli moim niewolnikiem serwer jest w dół, spodziewam go przekierować do db Mistrza i uzyskać zawartość, ale po pewnym czasie próbuje, to wyrzuca błąd:

Can't connect to MySQL server on '192.168.1.12' (113)

Co mogę zrobić, aby ośmiornicy wygląd mojego Mistrza db jeśli serwer Slave jest wyłączony?

Z góry dziękuję!

+1

Nie wiem o ośmiornicy, ale Makara ma awaryjne przejście dla niewolników https://github.com/taskrabbit/makara –

+0

@Mauricio - czy możesz odpowiedzieć na moje pytanie tutaj http://stackoverflow.com/questions/29445495/rails- how-to-split-write-read-query-through-master-slave-database-noredirect = 1 # comment47064893_29445495 –

Odpowiedz

2

Jak czytałem w this blog post niewolnik wyłączony lub nie reagujący może powodować awarie aplikacji, ponieważ domyślnym zachowaniem Octopusa jest zapisywanie wszystkich danych do Mastera i odczytanie wszystkich danych z Slave (ponieważ dane zapisane do Mastera są wtedy replikowane do wszystkich podłączonych urządzeń Slave). Jak stwierdzono na podstawie odczytu Octopus wiki, "Multiple slaves" section w środowisku wielu urządzeń podrzędnych, jest wykonywane za pomocą programu round robin, więc zawsze pobiera dane z urządzenia slave domyślnie.

Również z powyższego bloga: jako mechanizm rezerwowy powinieneś odczytać dane bezpośrednio z Master (używając .using(:master)), jeśli żaden z węzłów Slave nie jest dostępny lub dane nie zostały jeszcze w pełni zreplikowane do urządzeń slave. Może to być również opcja buforowania zmian/wyników aplikacji w celu zapobiegania wielokrotnym odczytom z węzłów bazy danych.

+0

Wniosek jest taki, że nie ma konfiguracji, aby klejnot mógł to zrobić automatycznie? Każdy klejnot zastępczy, którego używasz, ma tę funkcję przełączania awaryjnego podległego? –

+2

Nie użyłem go jeszcze, ale SDP, [Seamless Database Pooling] (https://github.com/wbharding/seamless_database_pool), wydaje się być dokładnie tym, na co powinieneś patrzeć. [Ten wpis na blogu] (http://www.williambharding.com/blog/rails/rails-3-slave-database-options-there-are- dwa/) porównuje Octopus do SDP i jako wynik końcowy przeczytasz SDP został stworzony z powodu braku funkcji przełączania awaryjnego w Octopus. Dzięki za zaakceptowanie mojej odpowiedzi! – SaschaM78