Hot klonowanie żywej usługi Linux

14

Musimy sklonować usługę Linux, gdy jest ona aktywna, nie tylko dlatego, że nie możemy zrestartować komputera lub coś takiego; wynika to tylko z naszego specjalnego scenariusza (tak, już przeczytałem tę odpowiedź, ale różni się ona nieco od mojego klonowania działającego serwera Linux ).

Mamy węzeł obliczeniowy, można powiedzieć, że węzeł obliczeniowy NLP, który obsługuje na nim niektóre modele. Kiedy uruchamiamy węzeł (oczywiście z usługą), obliczenia będą strasznie powolne, dopóki nie nakarmimy go kilka razy. Nazywaliśmy to rozgrzewką.

Niestety, praca nad rozgrzewką zajmuje dużo czasu (być może nasze obliczenia zostały zakończone przed rozgrzaniem węzła).

Pojawia się więc problem: czy istnieje stabilny sposób na klonowanie na gorąco serwera Linux, aby utrzymać najwyższą wydajność węzła, abyśmy mogli sklonować i sprawić, że będzie on online w krótszym czasie?

Chen Steven
źródło
Czy przydałaby się wizualizacja maszyny i zrobienie zdjęcia stanu „rozgrzanego”?
TripeHound,
13
Czy rozumiesz, dlaczego tak się rozgrzewa? Na przykład może to być efekt uboczny pamięci podręcznej plików. Ale niektóre odpowiedzi na maszyny do klonowania odrzucają pamięć podręczną plików, ponieważ pamięć podręczną z definicji można zrekonstruować na podstawie oryginału.
MSalters
fork () to jeden ze sposobów tworzenia większej liczby procesów na danym komputerze, przy jednoczesnym oszczędzaniu narzutu związanego z uruchamianiem.
Yet Another User
dzięki, @TripeHound, poprosiłem mojego przyjaciela, który pracuje w VMWare, i powiedział, że nie jest w stanie po prostu zrobić migawki stanu „rozgrzania”, ani żadnych kopii lustrzanych. MSalters, nie jestem w 100% pewien, co dzieje się podczas rozgrzewki, ale wygląda na to, że po zakończeniu usługi, niektóre leniwe ładowanie działa po tym, jak wymaga to obliczenia
chen steven
2
Nieświadomy swojej konfiguracji w tle, ale pachnie to sytuacją, w której serwer nigdy nie może ulec awarii. To sugeruje, że jądro twojego hosta może być starożytne i że aktualizacje nigdy nie zostały zastosowane. Być może jest to wskaźnik systemowej wady projektowej, którą należy wziąć pod uwagę.
Criggie,

Odpowiedzi:

28

Może nie możesz „sklonować na gorąco” całego serwera (możesz, ale tylko jeśli jest to maszyna wirtualna), ale możesz zamrozić i przywrócić pojedynczy proces za pomocą criu , Checkpoint / Restore w przestrzeni użytkownika.

Pozwala to zapisać stan wewnętrzny programu na dysku i zatrzymać program, a później przywrócić program do tego stanu z zapisanych plików.

Aby obsłużyć wybraną operację, możesz skopiować pliki reprezentujące zapisany program na inny serwer i tam go przywrócić.

criu wymaga najnowszego jądra z wkompilowanymi różnymi funkcjami, więc starsze dystrybucje Linuksa mogą nie działać. Możesz uruchomić criu checkna konkretnej maszynie, aby ustalić, czy są spełnione wymagania wstępne.

Michael Hampton
źródło
wygląda niesamowicie i zrobię na tym kilka testów, dzięki bracie
chen steven
Z twojego doświadczenia, jak dobrze to działa w praktyce? Patrząc na ograniczenia list criu (które są prawie tymi, których się spodziewałem - to trudny problem), mam wrażenie, że jest mało prawdopodobne, aby działał z aplikacjami, które nie zostały zaprojektowane z myślą o tym przypadku użycia.
James_pic
@James_pic Minął chyba rok, odkąd spojrzałem na to poważnie, ponieważ obecnie nie mam z tego powodu pożytku. W przypadku demona, który akceptuje tylko połączenia i wykonuje obliczenia (np. Zadanie uczenia maszynowego PO lub serwer WWW), działa całkiem dobrze.
Michael Hampton
12

Może to być nieco poza zasięgiem twojego obecnego środowiska, ale standardowym sposobem na to jest wirtualizacja twojego serwera. Wiele hostów wirtualizacji (VMware, virtualbox itp.) Zezwala na „migawki”, które zapisują stan serwera, a następnie mogą być klonowane w nowych instancjach. Te nowe instancje będą miały dokładnie ten sam stan, co oryginalne, aż do uruchomionych procesów. Oczywiście chcesz mieć pewność, że uruchomione oprogramowanie będzie nadal działało poprawnie w środowisku wirtualnym (przychodzi na myśl obliczenie CUDA / GPU).

cawwot
źródło
Wirtualizacja jest świetna, dopóki oprogramowanie (lub jego zależności) nie wymaga aktualizacji i nie zapewnia płynnego mechanizmu ponownego ładowania. Migawka maszyny wirtualnej lub migracja na żywo uruchamia stary kod.
John Mahowald
Zarówno akceptowanie przeze mnie projektu na „prawdziwej” maszynie lub hoście do wirtualizacji jest możliwe i możemy na kilka sposobów obsługiwać „stare” elementy kodu, na przykład test A / B lub aktualizację ciągłą .etc. Ale czy jesteś pewien, że migawki mogą całkowicie sklonować rozgrzany stan mojego działającego węzła?
chen steven
3
Podczas „migracji na żywo” komputer musi zostać wstrzymany. Podczas wstrzymania jego pamięć jest kopiowana 1: 1 na inną maszynę w klastrze, gdzie jest wstrzymywana - nienaruszona. Może to zająć trochę czasu, w zależności od ilości używanej pamięci i szybkości sieci szkieletowej. Możesz skorzystać z tej metody, jeśli wywoływane przez nią przestoje są wystarczająco niskie, aby spełnić Twoje potrzeby.
Bufor
@chensteven Ostatnio pochodzę ze środowiska virtualbox. To było jakiś czas temu, ale z tego, co pamiętam, uruchomiona migawka zawiera dokładny stan maszyny wirtualnej w momencie wykonania migawki, w tym uruchomione procesy i zawartość pamięci. Tę migawkę można następnie sklonować do nowej maszyny wirtualnej, co daje dwie maszyny w dokładnie tym samym stanie.
cawwot
3

Pytanie, o którym wspominasz, odnosi się do linku http://www.linuxfocus.org/English/March2005/article370.shtml , który opisuje wszystkie sposoby, w jakie wyobrażałem sobie wykonanie twoich próśb.

To, że są tam dostępne opcje, nie ma większego znaczenia dla tego, co działa na serwerze. Musisz wziąć pod uwagę, że wszystkie pliki, które mogą ulec zmianie w procesie klonowania, mogą być niespójnymi plikami na komputerze docelowym. W tym poście podajesz, że mówią o bazach danych, a klonowanie go w ten sposób nie gwarantuje żadnego bezpieczeństwa integralności danych.

Nie jest do końca jasne, co miałeś na myśli „dopóki nie nakarmimy go kilka razy” .

Ale jeśli dobrze zrozumiałem, o co pytasz, musisz wziąć pod uwagę, że aby sklonować system, potrzeba czasu na skopiowanie i obliczenie zasobów.

Aby wykonać „ON / OF” lub lepiej środowisko aktywne / zapasowe, serwer musi być odpowiednio skonfigurowany w klastrze.

Przykro mi, jeśli nie jest to odpowiedź, której oczekujesz, ale masz do wyboru takie opcje.

AtomiX84
źródło
To moja wina, że ​​trochę się tutaj pomylisz, ponieważ „feed” oznacza, że ​​po uruchomieniu mojej usługi musimy kilkakrotnie wywoływać zadania obliczeniowe, aby upewnić się, że węzeł jest „rozgrzany” do najwyższej wydajności. Problemem jest więc dynamiczny klon lub rozbudowa naszego życia, tak jakby duża liczba żądań trafiała do naszego systemu, nie będziemy mieli wystarczająco dużo czasu, aby skonfigurować nowe węzły obliczeniowe (rozgrzewanie zajmuje zbyt dużo czasu), aby radzę sobie z nimi, no wiesz, jak nadchodzące fale
chen steven
1

Istnieje wiele potencjalnych problemów z tym, co próbujesz zrobić, i oczywiście, jak wiesz, najlepiej byłoby przełączyć serwer w tryb offline i sklonować go, gdy żadne dane nie są dynamicznie przechowywane.

Jednak to, co starasz się zrobić, jest całkowicie prawdopodobne, tak jak zrobiłem to wcześniej. Jeśli używasz dd, możesz sklonować pełny serwer na poziomie bloku na inny dysk lub inny serwer. Będzie to jednak wymagało dodatkowej konfiguracji na nowym serwerze i prawdopodobnie nie będziesz w stanie po prostu wyłączyć drugiego i włączyć nowego. Aby to zrozumieć, musimy wiedzieć kilka rzeczy na temat sprzętu i oprogramowania serwera.

Po pierwsze, aby ustalić najlepszą strategię danych, warto wiedzieć, co jest regularnie aktualizowane. Czy masz serwer SQL, który dynamicznie się aktualizuje, ale ma zawartość statyczną? Alternatywnie, czy masz zespół programistów korzystających z systemu wywrotowego, takiego jak git wysyłający ciągłe aktualizacje danych do twoich treści? W zależności od tego, co aktualizuje, określi najlepszy pełny sposób działania.

Jeśli na przykład regularnie aktualizuje się tylko SQL, możesz migrować na nowy serwer, gdy ten serwer działa w następujący sposób:

  • dd sklonować wszystkie dane nowego serwera.
  • Rozpocznij konfigurowanie nowego serwera, może to zająć trochę pracy, zwłaszcza jeśli jest to inny sprzęt, ale nadal może być szybsze niż konfigurowanie od zera.
  • Może to również wymagać pewnych zmian DNS, ponieważ nie można używać tego samego DNS na innym serwerze, jeśli trzeba pracować na drugim serwerze na żywo, podczas gdy pierwszy serwer nadal działa.
  • Po ukończeniu i samodzielnym uruchomieniu nowego serwera wykonaj ostateczną kopię zapasową serwera SQL na oryginalnym serwerze i zaimportuj go na nowy serwer.

Może być konieczne tymczasowe przełączenie oryginalnego serwera w tryb offline, aby upewnić się, że nie przegapisz żadnych danych. Alternatywnie, aby mieć zero przestojów, możesz uruchomić drugi raz na żywo, skierować dns na nowy serwer, a następnie ręcznie zaktualizować wszystkie wpisy dns na nowym serwerze, aby w efekcie zero przestojów. Jest to bardziej kłopotliwe niż kilka minut przestoju, ale tworzenie kopii zapasowej SQL i przywracanie na nowym serwerze, ale może być konieczne do zerowego przestoju.

Jest to oczywiście tylko jeden przykład użycia i w zależności od konfiguracji i kilku zmiennych może być konieczne stworzenie własnej strategii migracji w oparciu o konkretny przypadek.

Drugi problem dotyczy konfiguracji sprzętowej serwera. Czy nowy serwer jest w 100% identyczny sprzętowo ze starym serwerem? Jeśli tak, to konfiguracja jest łatwiejsza. Jeśli jednak z drugiej strony jest to całkowicie inna konfiguracja sprzętowa, może być konieczne zaimplementowanie innej strategii, polegającej na wcześniejszym skonfigurowaniu drugiego serwera, a następnie utworzeniu kopii zapasowej wszystkich danych i baz danych SQL na pierwszy serwer i ręcznie migruj je, zmieniając odpowiednio konfigurację.

Migracja serwerów w żadnym wypadku nie jest trywialna, a aby wykonać udany ruch, musisz mieć głęboką wiedzę na temat serwerów lub personelu, który ma to samo. W każdym razie zdecydowanie zaleca się natychmiastowe wykonanie pełnej kopii zapasowej i przechowanie jej w trzecim źródle, nawet na komputerze lokalnym, aby w najgorszym przypadku (oba serwery uległy awarii i nieodwracalnie zginęły), nadal istniała kolejna kopia twoich danych do przebudowy serwerów.

Mam nadzieję, że to pomoże i powodzenia w przeprowadzce serwera!

serveraddict
źródło