5

레일스 4.0.2를 개발 한 위대한 보석 Octopus를 테스트 중입니다. 다음과 같이 Rails Octopus Gem - 슬레이브가 다운되었을 때의 마스터 - 슬레이브 복제 연결 동작

나는 슬레이브 DB 및 구성 문어를 만들어 (설정> 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 

그것은 내 노예 경우, 슬레이브에서 읽기 및 마스터 쓰기, 아주 좋은 작동 서버는 내가 그것을 마스터 DB로 리디렉션 및 콘텐츠를 기대, 아래로,하지만 약간의 시간이 시도한 후, 그것은 오류가 발생합니다 :

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

나는 경우 DB 내 마스터에 대한 문어 모양을 만들기 위해 할 수있는 일을 슬레이브 서버가 종료 되었습니까? 사전에

감사합니다!

+1

나는 Octopus에 대해 모른다. 그러나 Makara는 슬레이브 페일 오버를 가지고있다. https://github.com/taskrabbit/makara –

+0

@Mauricio - 내 질문에 대답 해 줄 수 있니? http://stackoverflow.com/questions/29445495/rails- master-slave-database를 통한 split-write-read-query? noredirect = 1 # comment47064893_29445495 –

답변

2

Octopus의 기본 동작은 마스터에 모든 데이터를 쓰고 슬레이브에서 모든 데이터를 읽는 것입니다 (마스터에 쓰여진 데이터는 복제 된 것이므로 this blog post에서 전원이 꺼 졌거나 응답이없는 슬레이브가 응용 프로그램 오류를 일으킬 수 있습니다) 연결된 모든 슬레이브에게). 다중 슬레이브 환경에서 읽는 Octopus wiki, "Multiple slaves" section에 명시된대로 라운드 로빈을 사용하여 수행되므로 항상 기본값 당 슬레이브에서 데이터를 검색합니다.

위에서 언급 한 블로그에서 가져온 것 : 대체 메커니즘으로는 슬레이브 노드를 사용할 수 없거나 데이터가 아직 슬레이브에 완전히 복제되지 않은 경우 마스터의 데이터를 직접 읽어야합니다 (.using(:master) 사용). 데이터베이스 노드에서 반복적으로 읽지 않도록 응용 프로그램별로 변경/결과를 캐싱하는 옵션 일 수도 있습니다.

+0

결론적으로이 작업을 자동으로 수행 할 수있는 구성이 없다는 것입니다. 사용하고있는 대체 보석에는이 슬레이브 장애 조치 기능이 있습니까? –

+2

아직 사용하지는 않았지만 [Seamless Database Pooling (SDP)] (https://github.com/wbharding/seamless_database_pool)은 정확하게 조사해야하는 것 같습니다. [이 블로그 게시물] (http://www.williambharding.com/blog/rails/rails-3-slave-database-options-there-are-two/)에서는 Octopus와 SDP를 비교하고 최종선으로 SDP는 Octopus에서 페일 오버 기능이 없기 때문에 만들어졌습니다. 내 대답을 수락 해 주셔서 감사합니다! – SaschaM78