2016-06-13 8 views
6

Zacznijmy wymieniając kilka faktów:Migracja Redis do AWS Elasticache przy minimalnym przestoju

  • Elasticache nie może być niewolnikiem mojej istniejącej konfiguracji Redis. Prawdziwy wstyd, który byłby o wiele bardziej skuteczny.
  • Mam tylko jeden serwer Redis do migracji, z około 3 GB danych.
  • Przestój musi być krótszy niż 10 minut. Zakładam, że zwykłe "zatrzymaj witrynę, zatrzymaj redis, klaster zaopatrzenia z migawką" potrwa dłużej.

podobne do tego pytania: How do I set an elasticache redis cluster as a slave?

Jeden pomysł na jak to może działać:

  1. Set Redis użyć AOF i BGSAVE wyzwalania w tym samym czasie.
  2. Gdy BGSAVE się zakończy, zapewnij klaster Elasticache z nasieniem RDB.
  3. Zatrzymaj witrynę i zamknij moją lokalną instancję Redis.
  4. Użyj narzędzia AOF-Replay, aby odtworzyć AOF w Elasticache.
  5. Uruchom ponownie witrynę wskazaną na klastrze Elasticache.

Moje pytania:

  1. Jak mogę zagwarantować, że mój plik AOF zaczyna się dokładnie w tym momencie plik RDB kończy, i że żadne dane nie zostaną napisane pomiędzy?
  2. Czy istnieje narzędzie AOF wspierane przez opiekunów Redis, czy są wszystkie rozwiązania innych firm, a zatem (potencjalnie) o wątpliwej wiarygodności? *

* Bez obrazy przeznaczone do jakichkolwiek autorów takich narzędzi , Jestem pewien, że są świetni, po prostu czuję się o wiele pewniej, używając narzędzia napisanego przez ten sam zespół co produkt, aby uniknąć potencjalnych błędów zgodności.

+0

Czy Twoja aplikacja może działać bez oprogramowania Redis? Czy będzie wolniej (oczywiście brak dostępu do pamięci podręcznej), czy może się nie powieść? –

+0

Jak aktywni są Twoi użytkownicy przez noc? 3 rano 5? Właśnie wtedy migrowałbym poważną zmianę w aplikacji produkcyjnej, która musiała być dostępna dla naszych użytkowników biznesowych. Nawet jeśli twoja aplikacja jest używana 24 godziny na dobę, szanse na to, że masz niski okres użytkowania, który możesz zaplanować, aby zminimalizować zauważony efekt, jeśli jesteś w trybie offline przez 30 minut podczas migracji. –

+0

Aplikacja jest w większości bezużyteczna bez Redis i nie ma tak naprawdę codziennego schematu użytkowania. Jest to stale ładowana aplikacja w ciągu 24 godzin. Co sprawia, że ​​zgadniesz, że to tylko 30 minut przestoju? – arrtchiu

Odpowiedz

3

mam tylko jeden serwer Redis do migracji, z około 3 GB danych

Chciałbym zatrzymać, zapisz Redis do S3, a następnie przesłać go do nowego klastra.

Zgaduję 10 minut, aby zapisać plik i pobrać go do s3.
10 minut po prostu uruchomić klaster elasticache z tych danych. Pozostawia dziesięć dodatkowych minut na skonfigurowanie i przetestowanie.

Ale jest prosty sposób poznania DOKŁADNIE jak długo. Wykonaj migrację testową tego.

  1. DONT zatrzymać system żywo
  2. Run BGSAVE i uzyskać zrzut swojego Redis (zostawić wszystko działa jak normalny)
  3. przesunąć wysypisko S3
  4. launch klaster elasticache dla niego.

Zrobić SZCZEGÓŁOWE notatki, CZAS w każdym kroku, skopiuj polecenia do okna notatnika.

Umieść dokument Word/Excel, aby mieć dokument migracji. W ten sposób wiesz, jak długo to trwa i nie ma niespodzianek. Daj nam znać, jak to działa.

0

Istnieje kilka sposobów na migrację danych bez przestojów. Są jednak trudniejsze do osiągnięcia.

  1. możesz napisać aplikację jednocześnie do dwóch instancji redis - jedna z nich będzie na EC. Gdy pamięci podręczne będą zarówno "ciepłe", możesz po prostu ponownie uruchomić aplikację i odczytać z pamięci podręcznej EC.

  2. Początkowo można migrować do EC2 zamiast EC. naprawdę nie to, co miałeś nadzieję usłyszeć, tak sobie wyobrażam. jest to łatwe, ponieważ możesz ustawić EC2 jako maść twojej instancji redis. Również migracja z EC2 do EC jest nieco łatwiejsza (dane już są na AWS), więc istnieje korzyść dla użytkowników z ogromnymi zbiorami danych.

  3. Można teoretycznie przechwycić polecenia od klienta i wysłać je do EC, a tym samym skutecznie "replikować". Wymaga to jednak pewnego programowania (nie wierzę, że takie narzędzie istnieje ATM) i byłoby trudne z wieloma, efemerycznymi klientami.

Powiązane problemy