Mam wiele maszyn wirtualnych Xen działających na wielu serwerach Linux. Te maszyny wirtualne przechowują obrazy dysków w woluminach Linux LVM z nazwami urządzeń wzdłuż linii / dev / xenVG / SERVER001OS i tak dalej. Chciałbym regularnie wykonywać kopie zapasowe tych obrazów dysków, aby w razie potrzeby móc przywrócić maszyny wirtualne (urządzenia LVM są już dublowane za pomocą DRBD między dwoma fizycznymi maszynami, po prostu jestem tutaj wyjątkowo paranoikiem).
Jak mam to zrobić? Oczywiście pierwszym krokiem jest wykonanie migawki urządzenia LVM, ale jak mogę przenieść dane na serwer zapasowy w najbardziej wydajny sposób? Mógłbym po prostu skopiować całe urządzenie, coś w stylu:
dd if=/dev/xenVG/SERVER001OS | ssh administrator@backupserver "dd of=/mnt/largeDisk/SERVER001OS.img"
... ale wymagałoby to dużej przepustowości. Czy istnieje narzędzie podobne do rsync do synchronizowania zawartości bloków całego dysku między zdalnymi serwerami? Coś jak:
rsync /dev/xenVG/SERVER001OS backupServer:/mnt/largeDisk/SERVER001OS.img
Jeśli dobrze rozumiem stronę podręcznika rsync, powyższe polecenie nie zadziała (prawda?), Ale pokazuje, do czego dążę. Rozumiem, że opcja --devices rsync polega na kopiowaniu samych urządzeń, a nie ich zawartości. Utworzenie lokalnej kopii obrazu maszyny wirtualnej przed zsynchronizowaniem go ze zdalnym serwerem nie jest opcją, ponieważ nie ma miejsca na dysku.
Czy istnieje przydatne narzędzie, które może synchronizować między urządzeniami blokowymi i plikiem kopii zapasowej na zdalnym serwerze? Mogę napisać jeden, jeśli będę musiał, ale istniejące rozwiązanie byłoby lepsze. Czy przegapiłem opcję rsync, która robi to dla mnie?
Chociaż dla RSync istnieją łatki „urządzenie zapisujące” i „urządzenie kopiujące”, działają one dobrze tylko na małych obrazach (1-2 GB). RSync będzie spędzał wieki, szukając pasujących bloków na większych obrazach i jest prawie bezużyteczny dla urządzeń / plików o pojemności 40 GB lub większej.
Używamy następujących danych, aby wykonać porównanie sumy kontrolnej na 1 MB, a następnie po prostu skopiować zawartość, jeśli nie jest zgodna. Używamy tego do tworzenia kopii zapasowych serwerów na wirtualnym hoście w USA do systemu tworzenia kopii zapasowych w Wielkiej Brytanii za pośrednictwem publicznego Internetu. Bardzo mała aktywność procesora i wydajność migawki następuje dopiero po godzinach:
Utwórz migawkę:
Początkowe wysiewanie:
Przyrostowa nocna kopia zapasowa (wysyła tylko zmienione bloki):
Usuń migawkę:
źródło
read ARGV,$buf,1024
zamiastread STDIN,$buf,1024
@ sysadmin1138? (Próbuję odpowiedzieć na stackoverflow.com/q/22693823/2987828 i nie rozumiem ARGV tutaj). Codziennie używam wariantu z pytania stackoverflow.com/q/22693823/2987828 i działa dobrze.Osoby zainteresowane zrobieniem tego konkretnie za pomocą migawek LVM mogą polubić moje narzędzie lvmsync , które odczytuje listę zmienionych bloków w migawce i wysyła tylko te zmiany.
źródło
Spójrz na Zumastor Linux Storage Project, który implementuje tworzenie kopii zapasowej „migawki” za pomocą binarnego „rsync” za pomocą narzędzia ddsnap .
Ze strony podręcznika:
ddsnap zapewnia replikację urządzenia blokowego, biorąc pod uwagę funkcję migawki na poziomie bloku, zdolną do efektywnego przechowywania wielu jednoczesnych migawek. ddsnap może wygenerować listę porcji migawek, które różnią się między dwiema migawkami, a następnie przesłać tę różnicę przewodowo. Na dalszym serwerze zapisz zaktualizowane dane w migawkowym urządzeniu blokowym.
źródło
Istnieje skrypt Pythona o nazwie blockync, który jest prostym sposobem synchronizacji dwóch urządzeń blokowych w sieci za pośrednictwem ssh, przenosząc tylko zmiany.
Niedawno zhakowałem go, aby go wyczyścić i zmienić, aby używał tego samego algorytmu szybkiej sumy kontrolnej, co rsync ( Adler-32 ).
źródło
Jeśli próbujesz zminimalizować ilość pustej przestrzeni, którą wyślesz zwykłym drutem
dd
, czy nie możesz po prostu przesłać go do gzip przed przesłaniem go do ssh?np. dd if = / dev / xenVG / SERVER001OS | gzip | ssh administrator @ backupserver "dd of = / mnt / largeDisk / SERVER001OS.img.gz"
źródło
Uwaga: wydajność systemu z migawkami LVM jest proporcjonalna do liczby migawek.
Na przykład wydajność MySQL z migawkami lvm
źródło
Oprócz odpowiedzi Davida Herselmana - poniższy skrypt zostanie zsynchronizowany z urządzeniem lokalnym:
O ile mi wiadomo oba skrypty zostały po raz pierwszy opublikowane na lists.samba.org .
źródło
To stare pytanie, ale nikt nie wspomniał o dwóch bardzo przydatnych narzędziach do wydajnej synchronizacji dwóch urządzeń blokowych:
bdsync , które wykorzystują podejście diff-transfer-and-patch;
blockync (tutaj znajdziesz moją ulepszoną wersję ), które wykorzystują podejście przepisywania w miejscu.
Zdecydowanie sugeruję grę obiema narzędziami i wybranie tych, które lepiej dostosują się do zamierzonego zastosowania.
źródło
Po kilku latach poszukiwań stworzyłem narzędzie do synchronizacji migawek LVM między serwerami. Zaprojektowano go tak, aby używał minimalnej liczby operacji we / wy i umożliwiał działanie systemów podczas synchronizacji.
Jest podobny do wysyłania / odbierania ZFS, ponieważ synchronizuje różnice między migawkami LVM i wykorzystuje cienkie przydzielanie, aby wpływ na wydajność był minimalny.
Chciałbym poznać opinie, więc proszę spojrzeć.
źródło
Skrypt ten miał kilka usprawnień:
źródło