2011-10-27 2 views
4

새로운 유형의 Redis입니다.AOF가없는 충돌 후 Redis에서 세트의 일관성을 유지할 수 있습니까?

가설 설정/상황 : Redis가 10 분마다 스냅 샷을 수행한다고 가정합니다. AOF가 꺼져 있습니다. 게시물의 ID를 유지하는 "게시물"이라는 세트가 있습니다. 게시물의 ID를 유지하는 MySQL 테이블도 있습니다. 지금 레디 스 3 개 ID를 가지고 있으며, 그래서 MySQL을는

  • 그러나 레디 스 않습니다 -

    1. 레디 스의 MySQL과 레디 스 2 개 후 ID의 총 스냅 샷을 수행 있습니다
    2. 사용자가 새 게시물을 작성 MySQL은 3

    있는 동안 충돌하거나이를 재시작하면

  • 을 살해, 레디 스 이제 레디 스 데이터가 일치하지 않는 것을 깨닫게 어떻게이 개 ID를 가지고? 내가 읽은 것에서 AOF는 더 많은 문제를 제기하고 완벽하지는 않습니다. 세트를 일관되게 유지하는 더 단순하고/더 우아한 솔루션이 있습니까?

  • +2

    "하지만 Redis가 충돌하거나 죽습니다."... 강제로 죽이거나 강제로 죽지 않으면 종료하기 전에 저장을 수행합니다. –

    +0

    아, 나는 그것을 알지 못했다. 나는 똑똑하다고 생각한다. 팁 고마워. –

    답변

    2

    여기서 말하는 데이터의 양은 어느 정도입니까? 그렇지 않은 경우 Redis의 모든 데이터를 MySQL 데이터베이스에서 간단히 다시로드하는 프로세스를 가질 수 있습니다. 좋은 점은 10 분 백업 저장소에서 모든 데이터를 Redis로로드 한 다음 Redis에서 모든 키를 키별로 덮어 쓸 수 있다는 것입니다. 그것이 이미 있다면, 그러면 위대합니다. 그렇지 않다면, 그것을 더합니다.

    두 시스템 간의 동시성을 구축하기위한 주요 작업 없이는 절대 일관성을 유지할 수 없습니다. AOF는 그렇게 나쁘지 않습니다. 시도 해봐야합니다. 그렇다면 일관성에 대해 걱정해야합니다.

    +0

    와우 괜찮아. 글쎄, 나는 추락 후 매번 MySQL을 다시 읽는 것을 생각했지만 아마도 더 나은 해결책이 있다고 생각하고 있었다. (MySQL에서 선택하는 것을 피하려고했다). 나는 AOF를 시도하지 않았지만, 대부분의 블로그 게시물은 어떤 이유로 든 긍정적 인 것들을 너무 많이 말하지 않습니다. 나는 그 문제가 그렇게 간단하지 않다고 생각한다. 어느쪽으로 든 도와 줘서 고마워. Btw, data-wise 나는 그다지 그렇게 추측하지 않는다. –

    1

    내가 성공한 한 가지 해결책은 다른 서버에서 실행되는 슬레이브 인스턴스를 사용하는 것입니다. 슬레이브와의 동기화가 블로킹되지 않으므로 마지막 명령을 잃을 수도 있으므로 마스터가 충돌하더라도 실제로는 거의 발생하지 않습니다. 이중화를 위해 여러 개의 슬레이브를 가질 수도 있습니다.

    결과적으로 마스터는 더 이상 디스크 입출력을 사용하지 않으며 스냅 샷으로 사용되는 프로세스 포크에 대한 추가 메모리도 사용하지 않습니다. 마스터가 다운되면 임시로 마스터 슬레이브를 마스터로 설정하고 (선호하는 redis 명령을 사용하여 : SLAVEOF NO ONE) 임시 마스터에서 마스터 슬레이브를 얻은 다음 마스터/슬레이브 역할을 원래 구성으로 복원하여 데이터를 복원 할 수 있습니다 동기화가 완료되면

    +0

    흥미 롭다 ... 나는 그것으로 실험해야 할 것이다. 제안 해 주셔서 감사합니다. –

    관련 문제