Obecnie mam działający serwer redis działający na instancji w chmurze i chcę przeprowadzić migrację tego serwera redis do nowej instancji w chmurze i użyć tej instancji jako mojego nowego serwera redis. Gdyby to był MySQL, wyeksportowałbym DB ze starego serwera i zaimportowałem go na nowy serwer. Jak mam to zrobić za pomocą Redis?
PS: Nie chcę konfigurować replikacji. Chcę całkowicie migrować serwer redis do nowej instancji.
Odpowiedzi:
Zapisz migawkę bazy danych w pliku dump.rdb, uruchamiając ją
BGSAVE
lubSAVE
z wiersza poleceń. Spowoduje to utworzenie pliku o nazwie dump.rdb w tym samym folderze, co serwer Redis. Zobacz listę wszystkich poleceń serwera .Skopiuj ten plik dump.rdb na inny serwer redis, na który chcesz przeprowadzić migrację. Po uruchomieniu redis szuka tego pliku, aby zainicjować bazę danych.
źródło
appendonly = yes
), ustaw go nano
przed uruchomieniem serwera Redis - w przeciwnym razie nowy zestaw danych nie zostanie załadowany. Po załadowaniu zestawu danych do pamięci włącz go ponownie, zarówno w pamięci (config set appendonly yes
), jak iw pliku konfiguracyjnym./etc/redis/redis.conf
, można przeglądać go znaleźć gdzie.rdb
pliki są:cat /etc/redis/redis.conf | grep "rdb"
. W moim przypadku jest to/var/lib/redis
redis-cli config get dir
dałby ci katalog, w którym.rdb
jest przechowywany.Najpierw utwórz zrzut na serwerze A.
To gwarantuje, że
dump.rdb
jest całkowicie aktualne i pokazuje nam, gdzie jest przechowywane (/var/lib/redis/dump.rdb
w tym przypadku).dump.rdb
jest również okresowo zapisywany na dysk automatycznie.Następnie skopiuj go na serwer B:
Zatrzymaj serwer Redis na B, skopiuj plik dump.rdb (upewniając się, że uprawnienia są takie same jak wcześniej), a następnie uruchom.
Wersja Redis na B musi być większa lub równa wersji A, w przeciwnym razie możesz napotkać problemy ze zgodnością .
źródło
CONFIG GET dir
, które powróciło"/usr/local/var/db/redis"
Jeśli masz łączność między serwerami, lepiej jest skonfigurować replikację (co jest trywialne, w przeciwieństwie do SQL) z nową instancją jako węzłem podrzędnym - wtedy możesz zmienić nowy węzeł na master za pomocą jednego polecenia i wykonać ruch za pomocą zero przestojów.
źródło
Możliwe jest również migrowanie danych za pomocą polecenia SLAVEOF:
Sprawdź, czy otrzymałeś klucze
KEYS *
. Możesz przetestować nową instancję w inny sposób, a kiedy skończysz, po prostu włącz replikację:źródło
Obecnie możesz także korzystać z MIGRATE, dostępnego od wersji 2.6.
Musiałem z tego skorzystać, ponieważ chciałem przenieść dane tylko do jednej bazy danych, a nie do wszystkich. Dwie instancje Redis działają na dwóch różnych maszynach.
Jeśli nie możesz połączyć się bezpośrednio z Redis-2 z Redis-1, użyj powiązania portu ssh:
Mały skrypt do zapętlania wszystkich kluczy za pomocą KLUCZY i PRZESYŁAJ każdy klucz. To jest Perl, ale mam nadzieję, że masz pomysł:
Więcej informacji można znaleźć na stronie http://redis.io/commands/migrate .
źródło
Aby sprawdzić, gdzie należy umieścić plik dump.rdb podczas importowania danych redis,
uruchom klienta
i
następnie
Tutaj / Users / Admin to lokalizacja pliku dump.rdb, który jest odczytywany z serwera, a zatem jest to plik, który należy wymienić.
źródło
możesz także użyć rdd
może zrzucić i przywrócić działający serwer redis i pozwolić filtrom / dopasować / zmienić nazwę zrzutów kluczy
źródło
Kluczowe elementy migracji bez przestojów to:
CONFIG SET slave-read-only no
)W skrócie:
Dodatkowo redis ma opcje, które pozwalają wyłączyć redis źródłowe, aby akceptować zapisy zaraz po odłączeniu celu:
min-slaves-to-write
min-slaves-max-lag
Ten temat obejmuje
Bardzo dobre wyjaśnienie od zespołu RedisLabs https://redislabs.com/blog/real-time-synchronization-tool-for-redis-migration
A nawet ich interaktywne narzędzie do migracji: https://github.com/RedisLabs/redis-migrate
źródło
Chcę również zrobić to samo: migrować bazę danych z autonomicznej instancji redis do innej instancji redis (redis sentinel).
Ponieważ dane nie są krytyczne (dane sesji), dam https://github.com/yaauie/redis-copy próbę.
źródło
Najprostszym sposobem, w jaki znalazłem eksport / kopię zapasową danych Redis (utworzenie pliku zrzutu) jest uruchomienie serwera za pomocą wiersza polecenia z flagą slaveof i utworzenie repliki na żywo w następujący sposób (zakładając, że źródłowa wersja Redis to 1.2.3.4 na porcie 6379):
źródło
Właśnie opublikowałem narzędzie interfejsu wiersza poleceń do npm i github, które pozwala kopiować klucze pasujące do danego wzorca (nawet *) z jednej bazy danych Redis do drugiej.
Narzędzie znajdziesz tutaj:
https://www.npmjs.com/package/redis-utils-cli
źródło
redis-dump w końcu dla mnie zadziałało. Jego dokumentacja zawiera przykład, jak zrzucić bazę danych Redis i wstawić dane do innej.
źródło