Sztuczki, aby instancja AWS spot była "trwała"?

Mój klient używa AWS do swoich VPS. Jedną z rzeczy, z którymi ma problem, jest to, że jeśli oferty dotyczące instancji spot przekraczają jego oferty, jego instancje zostają zakończone. Wydaje się, że to nic wielkiego, z wyjątkiem tego, że instancje spot nie są trwałe, więc za każdym razem musimy przywracać z obrazu.

On chce, żebym napisał coś, co będzie sprawdzać, czy przerwane instancje są co X czasu i uruchamia je ponownie automatycznie. Co ważniejsze, on chce jakiś sposób na udawanie "wytrwałości". Najlepszym pomysłem jest po prostu stworzyć obraz z każdego serwera co Y ilość czasu, a następnie uruchomić z tego obrazu (Jeśli / kiedy ta instancja jest zakończona).

Wszelkie inne pomysły byłoby miło usłyszeć. Moje pytanie brzmi, Czy jestem na dobrej drodze i czy znacie jakieś rozwiązania, które mogą już istnieć?

Aktualizacja: prawie rok później, wracam tutaj, aby znaleźć wszystkie te wspaniałe odpowiedzi i wiele więcej uwagi na ten temat, niż się spodziewałem. Wiele z poniższych odpowiedzi, choć pouczających i pomocnych, kwestionuje moje rozumowanie. Chcę powiedzieć, że nawet wtedy w 100% zgodziłem się, że nie był to mądry pomysł, ale był tym, czego domagał się mój klient, mimo wszelkich prób z mojej strony, zmierzających w lepszym kierunku.

Dziękuję wszystkim za pomoc. W końcu wymyśliłem, jak zrobić dokładnie to, co chciałem i byłem w stanie napisać kod, który automatycznie uruchamia się ponownie zlikwidowane instancje. To nigdy nie było łatwe, ale działało dobrze, zanim przeniosłem się do nowego klienta.

Powodzenia każdemu z was z tym samym problemem, podejmujecie (ewentualnie siłą, jak to było w moim przypadku) coś, co nie będzie łatwe. Prośby o Spot są tańsze, o czym niektórzy tutaj wspominali w swoich odpowiedziach, szczególnie , ponieważ wytrwałość nie jest oferowana. W przeciwnym razie wyobrażam sobie, że rynek" żądań spot " byłby wyceniany znacznie inaczej.

All the same, it jest możliwe, zrobiłem to i było to wspaniałe doświadczenie. Kiedy nie ma sposobu, trzeba go sfałszować! Jeśli nie ty, zrobi to ktoś inny.

UPDATE II: chcę tylko przypomnieć wszystkim, że to jest coś, co w zasadzie miałem za zadanie. Podczas gdy wiele osób po prostu odrzuciło całą koncepcję w tym czasie, skończyło się na bardziej lub mniej funkcjonalnym SaaS pozwalającym na łatwe zarządzanie i monitorowanie wszystkich wystąpień spot, w tym możliwość włączania/wyłączania auto-trwałe wznowienie na instancję, harmonogram czasów dla poszczególnych instancji (że powinny lub nie powinny być kiedykolwiek uruchomione,) itp.

O ile absolutnie zgadzam się, że z punktu widzenia programisty jest to nieeleganckie żądanie, a w tamtym czasie nie chciałem tego robić, to i tak powiedziałbym, że było to w pewnym sensie miłe, ponieważ wymagano od mnie pracy nad nim, ponieważ nie tylko nauczyłem się dużo, nie tylko zyskałem duże zaufanie do moich umiejętności i mojego kodu, ale też byłem bardzo zadowolony z tego, co zrobiłem. wyprodukował naprawdę przydatny i, o ile wiem, bardzo wartościowy kawałek oprogramowania dla mojego klienta(nawet jeśli prosił o złe rzeczy, bo nie wiedział lepiej).

Próbowałem go od tego odwieść, ale on nalegał, a ponieważ to on płacił, skupiłem tam swoją uwagę i nie tylko osiągnąłem to, co wielu tutaj uznało za głupie, ale sprawiłem, że było to opłacalne dla kogoś.

Gdyby to było to głupie, nie uratowałoby to nikogo pieniądze.

Czytam teraz ten post i trochę się marudzę. Byłem wtedy o wiele bardziej naiwny. Znam AWS a lot lepiej, teraz koduję a lot lepiej, itd. Naturalnie.

Ale nadal jestem dumny z rozwiązania tego rozwiązania, zwłaszcza, że to właśnie Ci koledzy, starsi i znacznie bardziej doświadczeni, bez wątpienia[13]}wielcy {14]} Programiści mówili mi, że nie można lub nie powinno się tego zrobić. To wy sprawiliście, że to było dla mnie wyzwanie, więc dziękuję. ty!

Co jeśli można to zrobić z zyskiem? Jesteś pewien,że nie powinno?

Author: Ethan Barron, 2013-10-24

6 answers

Znaleźliśmy rozwiązanie i oto, co musieliśmy zrobić. Zamierzam wymienić to krok po kroku, aby ułatwić odtworzenie tego dla tych, którzy mogą szukać podobnego typu rozwiązania...

  1. Utwórz nową instancję żądania miejsca. Upewnij się, że odznaczyłeś opcję "Usuń po zakończeniu" dla urządzenia głównego, aby wolumin pozostał z tyłu w następnym kroku. Pamiętaj, aby zwrócić uwagę na architekturę (zawsze używamy x86_64) i identyfikator jądra, którego używa twoja instancja (bardzo ważne!)
  2. Teraz SSH do twojej nowej instancji i zrób plik lub coś takiego, abyś mógł zobaczyć efekt trwałości z pierwszej ręki. Po wprowadzeniu pewnych zmian w systemie plików, Wyloguj się z połączenia SSH i zakończ instancję.
  3. Super. Teraz przejdź do konsoli internetowej EC2 i znajdź Nowy wolumin, który był używany dla wystąpienia, które właśnie zakończyliśmy. Kliknij prawym przyciskiem myszy wolumin i wybierz "Utwórz obraz". Postępuj zgodnie z kreatorem, upewniając się, aby wybrać ten sam architektura i identyfikator jądra, które zauważyliśmy wcześniej.
  4. Teraz uruchom Kreator żądań spot przy użyciu nowego obrazu. Postępuj zgodnie z kreatorem, ponownie upewniając się, aby odznaczyć opcję "Usuń po zakończeniu". Dodatkowo, i jest to łatwy krok do pominięcia, upewnij się, że rozwiń zwiniętą sekcję zatytułowaną "Opcje zaawansowane" i ponownie ustaw poprawny identyfikator jądra.

Jeśli wykonasz powyższe kroki do T, będziesz miał nową instancję w tym samym momencie, w którym znajdowała się Twoja stara instancja / align = "left" / Dlatego osiągnęliśmy pewną formę wytrwałości.

 23
Author: Ethan Barron,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-09 00:35:14

(podziękowania dla Ethana Barrona za niektóre z oryginalnych pomysłów. Jest to wersja z pewnymi poprawkami i wyjaśnieniami.)

[1]. Utwórz nową instancję spot. Dezaktywuj "Usuń po zakończeniu" dla urządzenia głównego. Zanotuj architekturę (x86_64) i ID jądra.

[2]. SSH do nowej instancji i utworzyć jakiś plik, coś, co powinno trwać poza restartem. Nie przerywaj jeszcze instancji.

[3]. Tworzenie migawki wystąpienia podczas instancja jest nadal uruchomiona (może to powodować niespójność systemu plików w rzadkich przypadkach, więc ogranicz zapis do woluminu rozruchowego). Zwróć uwagę na nazwę migawki.

[4]. Teraz Zakończ połączenie SSH i zakończ wystąpienie.

[5]. Utwórz AMI z migawki utworzonej w kroku 3 (AWS nie obsługuje tworzenia ami z woluminów; musi to być migawka. Jeśli używasz pozostałego woluminu, istnieje dodatkowy krok: tworzenie migawki).

[6]. Poproś o nowe miejsce instancja oparta na architekturze z kroku 1, identyfikatorze jądra z kroku 1 oraz AMI utworzonym w kroku 5.

To powinno zadziałać.

 11
Author: NightKnight on Cloudinsidr.com,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-08 04:48:35

Znalazłem przydatne rozwiązanie tego problemu, jeśli używasz ubuntu. Używa funkcji o nazwie "overlayroot", która jest zawarta w dystrybucji ubuntu. Chodzi o to, aby utrzymać główny system plików tylko do odczytu i zapisać wszystkie zmiany do nakładkowego systemu plików wspieranego przez EbS. Ponieważ root jest tylko do odczytu, może zostać usunięty po zakończeniu, a wszystkie zmiany zostaną zachowane w nakładkowym systemie plików.

  1. Najpierw Utwórz niestandardowy AMI, który włącza overlayroot. Użyj AWS konsola do uruchomienia ulubionego AMI. Zaloguj się i dodaj następujący wiersz do /etc / overlayroot.lokalne.conf

    overlayroot=device:dev=/dev/xvdf,timeout=180,recurse=0

Użyj AWS, aby utworzyć niestandardowe AMI z instancji "Instances->Actions->Image - > Create Image"

Teraz Utwórz i dołącz wolumin EBS do instancji. "Woluminy- > akcje - > Dołącz wolumin", a następnie zainicjuj wolumin.

mkfs.ext4 /dev/xvdf

Ta pierwsza instancja została użyta tylko do utworzenia niestandardowego AMI i zainicjalizowania woluminu, aby mógł zostać zakończony. Do nie dołączaj woluminu EBS do momentu utworzenia niestandardowego obrazu, aby nie został on uwzględniony w obrazie.

Przy każdym uruchomieniu wystąpienia spot należy wykonać następujące czynności.

  1. Uruchom instancję niestandardową. Pamiętaj, aby ustalić ceny spot.
  2. Po uruchomieniu wystąpienia Dołącz wolumin nakładki do wystąpienia w /dev / sdf.
  3. Uruchom ponownie instancję. "Instancje- > Akcje - > Stan Instancji - > Restart". Po zalogowaniu należy zobacz coś takiego

    ubuntu@ip-10-178-74-83:~$ mount overlayroot on / type overlayfs (rw,discard) ... /dev/xvda1 on /media/root-ro type ext4 (ro,relatime,data=ordered) /dev/xvdf on /media/root-rw type ext4 (rw,relatime,data=ordered)

 7
Author: rks,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-10 05:16:36

Update: czasy się zmieniły

Żądania wystąpień Spot EC2 można teraz skonfigurować na stop zamiast terminate wystąpienie spot przelicytowane lub inne zdarzenie związane z pojemnością, które powoduje przerwanie wystąpienia spot.

Zobacz zachowanie przerwania W EC2 Developer Guide. Niektóre klasy instancji mogą również zostać hibernowane z zainstalowanym odpowiednim agentem.

Zauważ, że ta nowa funkcja nie gwarantuje, że instancje będą nadal Uruchom, ale tylko, że zostaną ponownie uruchomione z nienaruszonymi poprzednimi woluminami EBS, prywatnym IP, elastycznym IP i identyfikatorem instancji.

Poprzednio odpowiedź brzmi:


Instancje Spot

nie mogą być trwałe, ale żądania spot mogą.

Persistent Spot Requests: określając żądanie oferty Spot jako "persistent", upewniasz się, że zostanie ono automatycznie ponownie wysłane po zakończeniu jego wystąpienia-przez Ciebie lub Amazon EC2-do momentu anulowania oferty Prośba. Umożliwia to automatyzację uruchamiania wystąpień Spot w dowolnym momencie, gdy cena Spot jest niższa od ceny maksymalnej.

Http://aws.amazon.com/ec2/spot-instances/#4

To sprawia, że maszyny działają zawsze, gdy cena jest w zasięgu, ale co do reszty, zastanów się, co robią twoje instancje spot, które sprawiają, że myślisz, że trwałość dysków jest drogą do zrobienia. Pomyśl " Chmura."Myśl" efemerycznie."Instancje Spot mają być efemeryczne maszyny, które uruchamiają, pobierają pracę, wykonują pracę, zatwierdzają pracę, a jeśli odejdą, praca nadal czeka na następną instancję, która ją ponownie pobierze,zakończy i zatwierdzi. Możesz "używać" ich z EBS i utrzymywać wolumin, ale jeśli to zrobisz, wystąpienia te nie mogą zostać ponownie uruchomione (jak zauważyłeś).

Jeśli twój AMI używa magazynu instancji i przechowuje wszystko, co musi być trwałe zewnętrznie (na przykład w S3), to nie musisz hakować architektury AWS możesz usiąść i patrzeć, jak maszyny odpalają się, gdy cena jest odpowiednia, wykonują swoją pracę i wyłączają się ponownie, gdy ceny wykraczają poza zakres. I nie ma gnicia, bo każdy boot to lśniący, czysty system.

Lub Twoja instancja(instancje) może montować akcje NFS eksportowane przez maszynę, która jest zawsze włączona.

Albo to: https://serverfault.com/questions/448043/auto-attach-ebs-volume-to-a-new-spot-instance
 7
Author: Michael - sqlbot,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-19 00:02:25

Charakter wystąpień spot jest taki, że są one przejściowe, więc nie możesz uczynić wystąpienia "trwałym". Możesz jednak sprawić, że dane będą trwałe za pomocą EBS.

Twój pomysł jest dobry, jeśli chodzi o zdjęcia i nie jestem pewien, czy jest inny sposób, aby to zrobić, aby być szczerym.

Zawsze możesz sprawdzić dokumentację na instancjach spot lub przejść do forum , aby zobaczyć, czy któryś z inżynierów AWS ma jakieś pomysły.

-- edit--

Nie jestem pewien , czy to zadziała - ponieważ wiązałoby się to z dodatkowymi kosztami, ale zawsze możesz natychmiast uruchomić instancję z wygenerowanego obrazu natychmiast po jego wygenerowaniu i zakończyć istniejącą instancję. Daje to iluzję trwałości, zwłaszcza jeśli nie polegasz na woluminie EBS do przechowywania danych.

 3
Author: Robert H,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-24 20:56:17

AWS niedawno uruchomił nowy pulpit wystąpień Spot, który znacznie ułatwia utrzymanie wystąpienia w stanie trwałym. Obejmowało to również automatyczne ustalanie cen i wsparcie regionu, więc nie trzeba się martwić o licytację idealnej ceny. Po uruchomieniu instancji Utwórz AMI instancji i to wszystko. Następnym razem, gdy poprosisz o wystąpienie spot, wybierz je z listy zachowanych wystąpień. Jądro i EBS są przywracane w takim stanie, w jakim jest.

 2
Author: Anant Gupta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-15 07:59:23