2011-01-31 1 views
7

documentation on replication에서 내게 불분명하다. SYNC command이 블로킹하는지 여부.redis 슬레이브를 추가하면 마스터에 블로킹 호출이 발행됩니까?

마치 새로운 슬레이브를 돌리면 마스터 요청을 처리 할 수 ​​없게 되겠지만, 나는 그 사실을 확인하고 싶습니다.

맥락에서 디스크 동기화가없는 약 8GB의 데이터를 호스팅하는 마스터에 슬레이브를 추가하는 방법을 찾고 있습니다.

* 이전에는 데이터 손실이 문제되지 않았습니다. 우리는이를 변화시키고 있으므로 복제와 지속성은 어느 정도까지 "다시 포팅"되고 있습니다.

답변

18

마스터는 슬레이브의 SYNC 요청시 BGSAVE를 수행하기 때문에 블로킹 작업이 아닙니다.

그래서 순서는 다음

  • 슬레이브 SYNC 요청
  • 마스터 BGSAVE, 슬레이브는 마스터 BGSAVE가합니다 (.rdb 파일)
  • 슬레이브 옮겼다되는 초기 벌크 데이터 완료
  • 대기
  • master는 슬레이브에 대한 모든 새 차이를 누적합니다.
  • 마스터는 전체 rdb 파일을 슬레이브로 보내고 완료합니다.
  • ma 슬레이브가 누적 된 버퍼로 슬레이브에게 먹이를주고, 새로운 것이 클라이언트에서 도착하면, 쓰면된다.

마스터가 저장하도록 구성되지 않은 경우에도 작동하며 단순히 마스터 < -> 슬레이브 동기화에 대한 .rdb를 생성합니다. redis.conf에 "save"줄이없는 마스터 인스턴스에서 BGSAVE는 자동으로 호출되지 않지만 .rdb 파일을 저장할 필요가있는 경우 사용자가 계속 호출 할 수 있습니다.

+0

어떻게하면 bgsave를 방지 할 수 있습니까? 나는 마지막 단계로 뛰어 가고 싶다. 다른 방법으로, 나는 같은 redis 인스턴스를 가지고있다. 다른 인스턴스에 대한 노예이다. 나는 rdb SYNC를 할 필요가 없다는 것을 알고있다. 이것이 가능한가 ? – wener

+0

실제로 Github를 "nosync"라고하고 "unstable"에 대해 코딩하면이 작업을 수행하는 실험적 분기가 있습니다. – antirez

+0

감사합니다. – wener