Jak wykonać kopię zapasową działającego serwera Linode?

21

Chcemy wykonać kopię zapasową wszystkiego na naszym serwerze Debian, który działa zdalnie po drugiej stronie świata (hostowany przez Linode), bez wyłączania go.

W tym systemie działa powłoka, poczta e-mail, XMPP / prosody i sieć, z kilkoma prostymi ustawieniami nginx.
Chcemy tworzyć kopie zapasowe plików związanych z tymi rzeczami, aby były bezpieczne. Na przykład pliki przechowywane przez użytkowników w katalogach domowych.

Nie musimy dokładnie kopiować istniejącego pliku wrt każdego pliku / etc; zamiast tego powodem, dla którego nawet wykonujemy kopię zapasową, jest przeniesienie jej do nowej konfiguracji (nowsza wersja Debiana wciąż na Linode).

Widzę, że Linode oferuje usługę tworzenia kopii zapasowych. Ale w dłuższej perspektywie potrzebujemy również własnych kopii zapasowych, na wypadek, gdyby uległy one awarii lub wydarzy się coś dziwnego.

Powodem tego pytania jest to, że kiedy próbowałem tworzyć kopie zapasowe w przeszłości, popełniłem jeden z tych dwóch błędów:

  • Poszedłem „OK, po prostu skopiuję /i wszystko pod nim”, a następnie utknąłem w jakiejś dziwnej nieskończonej pętli albo z powodu napędu, na który kopiowałem, został zamontowany pod / media / backup i kopiował się rekurencyjnie [obv ten konkretny problem nie dotyczy tutaj, ponieważ będziemy tworzyć kopie zapasowe na rsync lub podobnym] lub utknął, próbując skopiować niektóre „żywe” rzeczy do / proc lub / var lub cokolwiek innego, na przykład próbując nadążać za ciągle zmieniającymi się logami, lub
  • Poszedłem: „OK, po prostu wezmę absolutne minimum tego, czego potrzebujemy… hmm, katalogi domowe wszystkich i nasze katalogi serwerów sieciowych (wszystkie poniżej /var), a następnie przejrzyjmy kopię /etcwszystkich starych wiadomości w / var / vmail ”, a potem niezmiennie spieprzyłem uprawnienia do plików lub znaczniki czasu (upewnię się, że tym razem nie utworzę kopii zapasowej plików unixowych na dysku FAT) lub o czymś zapomniałem („ o, strzelaj, miałem kilka niestandardowych skryptów w / usr / local / bin, którego nigdzie indziej nie zapisałem, zapomniałem je zdobyć, zgadnij, że już ich nie ma ”).

Tak więc obv kopiowanie całego dysku prosto prowadzi do pułapek, a selektywne kopiowanie katalogów prowadzi do pułapek. Chcę wiedzieć, jak to zrobić dobrze.

Pytanie o awarię serwera Czego potrzeba do pełnego systemu tworzenia kopii zapasowych? obejmuje filozofię i dobre praktyki, ale szukam tych bardziej szczegółowych szczegółów:

  • Które katalogi muszę skopiować, a które wykluczyć (biorąc pod uwagę, że jest to system, który obecnie działa i obsługuje wiki, czat XMPP, e-mail - z nowymi wiadomościami przychodzącymi podczas pracy kopiowania)
  • Jakie atrybuty pliku, takie jak znaczniki czasu oraz właściciel i grupa, muszę przedstawić i jak to zrobić? ← Myślę, że sam mogę odpowiedzieć na tę połowę pytania, na przykład… hmm… rsync -HXazMyślę, że to dla nas dobra opcja? -zObv naprawdę nie wiąże się z pytaniem, które jest „co mam zachować”

Wiele porad dotyczących tworzenia kopii zapasowych, które widzę, na przykład za pomocą dd, wydaje się zakładać, że dysk jest odmontowany i nie jest używany. Ale ja nie powinien wykluczać „żywe” jak katalogi / proc, a niektóre z podkatalogów w / var (Jednak niektóre rzeczy z katalogu / var wiem na pewno zrobić potrzebę utrzymania) i / zamontować? O czym jeszcze muszę pomyśleć w tej sytuacji? Później chyba po prostu mogę zrobić to za pomocą rsync i użyć kilku --excludeflag.

Czy są lepsze pomysły, szczególnie przyjazne dla FOSS?

Sandra
źródło
Rozumiem, że to pytanie wydaje się niezwykle proste, ale tak długo działając na tego rodzaju systemach, pomyślałem o tym raz po raz i nigdy tak naprawdę nie zastanawiałem się, jak to zrobić poprawnie
Sandra
Z uwagi na to, cp -r -aże zachowuje jak najwięcej atrybutów plików podczas kopiowania plików (w oparciu o obsługę docelowego systemu plików). -aFlag nakazuje cpzachować atrybuty. Kopiowanie przez sieć lub system plików, który nie obsługuje wymaganych atrybutów, tar -czawsze działało dla mnie, chociaż uważam, że istnieją pewne przypadki brzegowe, których nie obejmuje, a w szczególności tardomyślnie zależą od dopasowania nazw użytkowników na oba systemy. To powiedziawszy, skopiowałem cały (odmontowany) system Linux tarbez żadnych widocznych problemów.
Micheal Johnson
Czy jest też jakiś konkretny powód, dla którego konieczne jest skopiowanie systemu na żywo?
Micheal Johnson
Korzystasz z usługi migawki linode?
ivanivan

Odpowiedzi:

15

Chcesz więc wykonać kopię zapasową całego dysku bez tych wszystkich nieprzyjemnych błędów, a także odfiltrować wszystkie foldery / proc i inne foldery tymczasowe?

Opcją jest zamontowanie folderu głównego w innym folderze w systemie plików, na przykład:

$ cd /mnt
$ mkdir drive
$ mount --bind / drive

To da ci wszystkie pliki na twoim dysku, które nie są uważane za tymczasowe (jak foldery / proc lub / sys).

Teraz, gdy masz czysty widok swojego folderu głównego, możesz po prostu skopiować go na dysk zapasowy przy użyciu standardowego cplub rsync. Coś w stylu:

cp -R /mnt/drive /mnt/backupdrive

To rozwiązuje oba wymienione problemy:

  • Nie wchodzisz w rekursję, ponieważ dysk kopii zapasowej nie jest zamontowany w napędzie (punkt widzenia)
  • nie przegapisz żadnych ważnych plików, ponieważ zabierasz je wszystkie

Zobacz też: man mount (8)

rollstuhlfahrer
źródło
6
Uważaj, dzięki temu rozwiązaniu możesz kopiować zapisywane pliki, takie jak bazy danych. Zalecam uruchomienie skryptu, aby zrzucić bazę danych w osobnym pliku przed skopiowaniem plików. Na przykład dla MySQL możesz użyć mysqldump.
Marco Martinelli
10

W Linuksie wszystko jest plikiem. Jest to możliwe przez rsync, ale są rzeczy, o których należy pamiętać, które (w najlepszym razie) trudno jest obejść.

Najpierw powinieneś pomyśleć o replikacji, szczególnie w przypadku baz danych. Jest to również dobry pomysł, aby skonfigurować serwer proxy / moduł równoważenia obciążenia przed serwerem podstawowym, aby podczas przełączania można było łatwo przełączać się między serwerami głównymi i serwerami kopii lustrzanych.

Na poziomie sprzętowym najlepszą sytuacją będzie posiadanie serwera lustrzanego po drugiej stronie, z taką samą liczbą portów Ethernet, takim samym układem dysku twardego i tak dalej. Wszystko, co się różni, implikuje potrzebę zmian konfiguracji systemu.

tzn. jeśli masz dwa porty eth, chcesz się upewnić, że konfiguracja sieci, zapora sieciowa itp. są zgodne z nazwą interfejsu na obu serwerach, a jeśli jest inna, musisz zmienić konfigurację po rsync lub zmienić nazwę urządzenia na drugim (docelowy) serwer.

To samo z układem partycji. Powinieneś utworzyć te same partycje, co na głównym serwerze, ale jeśli utworzysz je od zera, otrzymasz różne UUID, więc będziesz musiał zmienić fstab, grub, mdadm (jeśli dotyczy soft-raid) itd. .

Ale istnieje również wiele rzeczy, które mogą pójść nie tak, jak bazy danych, które mogą być niespójne, jeśli nie zostały wcześniej zatrzymane (przed wykonaniem rsync).

Najlepszą strategią będzie najpierw przygotowanie sprzętu i systemu plików (partycji) - w celu dopasowania do konfiguracji głównego serwera. Następnie zamontuj puste parytony za pośrednictwem systemu pośredniczącego (np. Live CD z tymczasowo zainstalowanym serwerem ssh). Tworzysz puste / proc, / dev, / sys, a następnie zsynchronizujesz resztę w następujący sposób:

rsync -avz -H --delete /etc /bin (...and so on) destserver:/mnt/yourrootfs/

Następnie musisz zainstalować GRUB na urządzeniu i pracować nad konfiguracją, aby można go było uruchomić, zmienić konfigurację sieci, fstab i inne rzeczy wspomniane wcześniej.

Możesz także spróbować zainstalować nowy system (z tą samą wersją, której używasz na głównym serwerze), a następnie wyłączyć go, zamontować za pomocą innego tymczasowego systemu (np. Live cd), a następnie zastąpić cokolwiek innego niż / proc, / sys, / dev i / boot with rsync.

Ale to tylko ogólny pomysł. Sprawy mogą się komplikować w zależności od tego, co faktycznie masz na tym serwerze, jaka jest twoja konfiguracja, konfiguracja sieci i sprzętu. A pod koniec dnia może to być naprawdę trudne lub niemożliwe do zrobienia bez zauważalnego przestoju.

Comar
źródło
Re bazy danych: Jeśli masz odpowiednie abstrakcje systemu plików (np. LVM), możesz być w stanie zrobić spójną migawkę dysku bez konieczności pełnej replikacji bazy danych. Wymaga to jednak kill -9bezpieczeństwa bazy danych , w przeciwnym razie jej odzyskanie może się nie powieść. Dobra baza danych powinna poradzić sobie z tą sytuacją, ale zaskakująca liczba produktów nie (lub gorzej, prawie zawsze odzyskują, ale zawodzą raz na niebieskim księżycu, gdy naprawdę potrzebujesz ich do działania). W praktyce replikacja i tak jest prawdopodobnie bardziej niezawodna.
Kevin
5

To, czego tak naprawdę chcesz, to przywraca. Cokolwiek robisz, musisz regularnie je przywracać.


Linode ma usługę tworzenia kopii zapasowych. Migawki można wykonywać według ograniczonego z góry określonego harmonogramu lub za pomocą interfejsu API.

Zaletą kopii zapasowych opartych na migawkach jest to, że oferują one bardzo krótki czas, ponieważ dane nie zmieniają się podczas tworzenia kopii. Migawki można również łatwo przywrócić na innym hoście, w tym przypadku nowym Linode.

John Mahowald
źródło
Nie widzę nic o tym, aby kopie zapasowe nadal działały, jeśli np. Linode bankrutuje.
Mark
Dowiedziałem się o usłudze tworzenia kopii zapasowych Linode podczas pisania jednej ze zmian w moim pytaniu, omówiłem to z moim kolegą i poszliśmy na to. Rozwiązało to nasz natychmiastowy kryzys, ale postaramy się znaleźć sposób na przechowywanie danych również w naszych własnych domach. Więc + za podniesienie, że mają tę usługę, nie wiedziałem, kiedy po raz pierwszy opublikowałem. Ale przywracania mają następujący problem: jeśli nasz serwer jest źle skonfigurowany, jak kula gumy do żucia i wieszaków z drutu, niekoniecznie chcemy przywrócić go do dokładnie tego samego źle skonfigurowanego stanu. Chcemy jednak naszych ulubionych danych.
Sandra
Napisałem trochę więcej o eksportowaniu tej kopii zapasowej do innego magazynu, jeśli pasuje do celu punktu odzyskiwania i domen awarii. Ale zostawiłem to krótko. Dobry plan ciągłości działania, którego kopie zapasowe są jedynie częścią, identyfikuje i radzi sobie z takimi zagrożeniami.
John Mahowald
1

Używam BackupPC do mojego małego wirtualnego prywatnego serwera, to działa dość dobrze. BackupPC może używać rsync pod maską i obsługuje pełne i przyrostowe kopie zapasowe. Spójrz na to i sprawdź, czy spełni twoje wymagania.

Hans-Martin Mosner
źródło
1

Uruchom swój system na ZFS. Następnie możesz zrobić natychmiastową, atomową migawkę, używając czegoś podobnego do:

# zfs snap -r tank@name-of-backup

gdzie tankjest jakakolwiek jest twoja pula ZFS. Ta migawka gwarantuje natychmiastową migawkę systemu plików i wszystkich jego potomnych systemów plików.

Po utworzeniu migawki możesz przenieść ją na inny host przy użyciu zfs sendi ssh.

Jim L.
źródło
0

Moim zdaniem Zależy to od tego, gdzie i gdzie działasz serwer z wewnętrznym poleceniem linux, nie jest to możliwe, musisz naśladować / potokować kompletne dane i biblioteki. Jeśli działasz na vmware i dobrze skonfigurowałeś, zapewnia on migrację na żywo. W przeciwnym razie musisz użyć narzędzi innych firm. Mam nadzieję, że to ci pomoże. Więcej referencji Jak wykonać kopię zapasową serwera na żywo?

Rsync to dobra komenda do synchronizacji danych między serwerami.

asktyagi
źródło
0

Dostępne są 2 rozwiązania, w których nie musisz (więcej) polegać na brakujących bitach, a także na pominięciu jednego elementu z listy z powodu niekompletnej listy kontrolnej, a może po prostu z powodu przeoczenia czegoś gorącego.

Po pierwsze, jeśli przeniesiesz to na platformę z większą kontrolą nad platformą sprzętową, możesz wykonać migawki dysku wszystkich plików, gdy serwer jest uruchomiony. Na przykład w AWS możesz wykonać migawkę dysku EBS, a nawet zapłacić za różnice tylko wtedy, gdy wykonasz kolejną migawkę później.

Po drugie, zalecam skryptowanie konfiguracji całego serwera za pomocą systemu zarządzania konfiguracją, takiego jak Ansible. To będzie

  • dokumentuj wszystko, co skonfigurowałeś w kontroli źródła

  • pozwalają na przetestowanie odtworzenia serwera z kopii zapasowej lub bez systemu operacyjnego, aby upewnić się, że skrypty są aktualne

  • pozwalają ponownie uruchomić skrypt w nowszym systemie operacyjnym, zwykle z niewielkimi zmianami.

pies
źródło
1
Okazuje się, że możesz także robić migawki na Linode. Sprawdzę Ansible! To rodzaj pobocznego tematu do tego, co pierwotnie chciałem wiedzieć, ale coś takiego - i nigdy o tym nie słyszałem [to znaczy, słyszałem o fikcyjnym urządzeniu ze wspaniałych książek Hainish] - brzmi cudownie!
Sandra