Dlaczego obrazy ubuntu EC2 nie mają wymiany?

82

Uruchomiłem kilka serwerów na EC2 i nie mają wymiany.

Czy robię coś złego, czy też maszyny tego po prostu nie mają?

rafamvc
źródło
Też się zastanawiałem, ale właśnie skonfigurowałem instancję EBS, sformatowałem ją jako swap i swapon / dev / sdg ...
Tom O'Connor
Jest to również typowy przypadek użycia dysków SSD w systemie Linux, aby nie konfigurować wymiany dysku SSD. Głównie dlatego, że niektórzy ludzie są paranoikami, miałoby to negatywny wpływ na czas przechowywania dysku SSD poprzez wiercenie tego samego zestawu sektorów przez cały czas.
djangofan
1
Jaki AMI i jaki rozmiar instancji EC2. Interfejs AMI musi zostać skonfigurowany do korzystania z partycji wymiany, a instancja musi mieć go dodaną podczas uruchamiania.
Jeremy Bouse
Jeśli to w ogóle możliwe, radzę nie używać swapu na EC2, chyba że masz 99% pewności, że nie będziesz musiał go używać (IE jest tam tylko w nagłych wypadkach). Kiedy wyłączyliśmy swap w niektórych naszych instancjach EC2, nasze miesięczne koszty operacji EBS IO prawdopodobnie zmniejszyły się o połowę. Tylko moje dwa centy, aby cię uratować dwa centy - tak, to było okropne, przepraszam i chowam się w kącie;)
Smudge
Możesz również zajrzeć w te kroki docs.aws.amazon.com/AWSEC2/latest/UserGuide/…
Artem.Borysov

Odpowiedzi:

74

Masz rację, obrazy EBS Ubuntu EC2 nie są dostarczane ze skonfigurowaną przestrzenią wymiany ( przynajmniej dla 11.04 ). „Zwykłe” obrazy typu instancja mają partycję wymiany, choć tylko 896 MB w porównaniu z tą, którą testowałem.

Jeśli jakiś proces wybuchnie, a Ty nie masz przestrzeni wymiany, Twój serwer może zatrzymać się na chwilę, zanim zabije OOM, podczas gdy w przypadku wymiany zamiana staje się wolniejsza. Z tego powodu zawsze lubię mieć przestrzeń do wymiany, nawet przy wystarczającej ilości pamięci RAM. Oto twoje opcje:

  • Utwórz wolumin EBS (2-4 razy większy niż rozmiar pamięci RAM), dołącz go do instancji (lubię nazywać go / dev / xvdm dla „pamięci”) sudo mkswap /dev/xvdm, dodaj go do fstab sudo swapon -ai gotowe . Zrobiłem to już wcześniej i działa dobrze, ale prawdopodobnie jest nieco wolniejszy niż sklep instancji, ponieważ przechodzi przez sieć.

  • Lub możesz partycjonować dysk, aby dodać partycję wymiany, chociaż może to wymagać utworzenia nowego interfejsu AMI. Nie byłem w stanie tego zrobić w działającej instancji, ponieważ nie mogę odmontować głównego systemu plików, a nawet nie mam dostępu do urządzenia dyskowego (/ dev / xvda), tylko partycji (xvda1).

  • Lub możesz utworzyć plik wymiany. To jest teraz moje preferowane rozwiązanie.

    sudo dd if=/dev/zero of=/var/swapfile bs=1M count=2048 &&
    sudo chmod 600 /var/swapfile &&
    sudo mkswap /var/swapfile &&
    echo /var/swapfile none swap defaults 0 0 | sudo tee -a /etc/fstab &&
    sudo swapon -a
    

    Gotowy. :) Wiem, że wiele osób odczuwa niechęć do używania plików zamiast partycji, ale z pewnością działa wystarczająco dobrze jako przestrzeń wymiany awaryjnej.

Jo Liss
źródło
4
Zamiana na wolumen EBS może powodować dodatkowe koszty, jak wskazują inne odpowiedzi. Nieużywanie zamiany lub przechodzenie do sklepu instancji wydaje się lepszymi rozwiązaniami.
isuldor
7
Korzystanie ze sklepu instancji jest lepszą opcją niż EBS. EBS to sieciowy system plików, więc łączy się z instancją EC2 przez to samo połączenie sieciowe, jak wszystko inne. Magazyn instancji jest dołączony do sprzętu, na którym znajduje się instancja (dlatego nie utrzymuje się po zatrzymaniu i uruchomieniu instancji). Jedynym przypadkiem, gdy EBS jest opcją wymiany, jest użycie typu instancji, który nie jest dostarczany z pamięcią instancji, tj. T1.micro (który, biorąc pod uwagę, że ma tylko około 620 MB pamięci RAM, jest prawdopodobnie tym, który naprawdę potrzebuje nagłego wypadku) zamiana).
ColtonCat
Bs = 1M jest już w zapisie binarnym, więc mnożnik count = 2048 powinien być count = 2000 - jeśli się nie mylę.
ypocat
1
Jeśli wybierasz 2GiB, 1024 * 2048 wydaje się poprawne.
Jo Liss
25

Najlepszą lokalizacją wymiany IMHO jest sklep instancji. Dlaczego? AWS nie pobiera opłat za we / wy w sklepie instancji. Poza tym sklep instancji jest w wielu przypadkach bardziej wydajny niż EBS. Upewnij się tylko, że masz skrypt, który odtwarza plik wymiany na wypadek zatrzymania instancji. Ponowne uruchomienie jest w porządku. Dlaczego och, dlaczego nie ma go tam domyślnie?

Zlokalizujmy magazyn instancji.

root@domU-**-**-**-**-**-**:/var/log# fdisk -l

[...]

Disk /dev/xvda2: 160.1 GB, 160104972288 bytes
255 heads, 63 sectors/track, 19464 cylinders, total 312705024 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/xvda2 doesn't contain a valid partition table

Hurray, 160,1 GB za darmo! Umieść swap tam i zapomnij o 100 $ nadwyżkach na serwer, gdy swap oparty na EBS zostanie zalany przez pomyłkę. Niefortunne doświadczenie mówienia tutaj.

Najwyraźniej w niektórych przypadkach nie widzisz magazynu instancji.

W zależności od typu instancji należy najpierw dołączyć woluminy magazynu instancji do instancji za pomocą opcji mapowania urządzeń blokowych. Jeśli tego nie zrobisz, możesz nawet nie zobaczyć urządzeń w katalogu / dev (jak na temat korzystania z magazynu „Instance Store Volumes” w Amazon EC2? )

sebwinadmin
źródło
1
chcę tylko zaznaczyć, że użytkownicy t1.micro w warstwie wolnej nie mogą korzystać z tej opcji.
Reuben L.
20

Uwaga : Amazon zmienił swoją politykę cenową i nie pobiera opłat za żądania We / Wy od połowy 2016 r. Odpowiedź jest przechowywana tutaj ze względów historycznych, ale nie ma wpływu na koszty korzystania (lub nie używania) wymiany w instancjach wspieranych przez EC2 EBS.


To jest z założenia. Zamiana jest domyślnie wyłączona w instancjach wspieranych przez EC2 EBS, aby uniknąć nieprzewidzianych kosztów.

Jeśli masz aplikację wymagającą dużej ilości pamięci, która jest nieuczciwa (powiedzmy na małej lub małej instancji), może generować dość dużą liczbę żądań We / Wy na woluminie EBS. Amazon pobiera 0,10 USD za 1 milion żądań We / Wy (patrz http://aws.amazon.com/pricing/ebs/ ) .

W normalnych warunkach nie powinieneś się tym martwić; zazwyczaj koszt żądań We / Wy nawet w mniejszych instancjach kilka dolarów, jeśli tak. Jeśli więc wiesz, że masz instancję o odpowiednim rozmiarze, a ta zamiana będzie używana rzadko, włącz ją. Ale bądź ostrożny z drobnymi przypadkami.

Jeśli włączysz zamianę, możesz mieć oko na Raporty użycia. Opcjonalnie możesz również skonfigurować alert rozliczeniowy, przechodząc do panelu sterowania CloudWatch i tworząc nowy alarm dla całkowitej kwoty rozliczenia. W ten sposób zostaniesz natychmiast powiadomiony, że dzieje się coś dziwnego z twoimi instancjami.

Gui Ambros
źródło
Ta odpowiedź jest dla mnie nieco myląca lub myląca, ponieważ najpopularniejsze typy instancji używają woluminów SSD. aws.amazon.com/ec2/instance-types
Taylor Edmiston
2
@tedmiston: rzeczywiście, ta odpowiedź nie ma już zastosowania. Dostosowałem się, aby odzwierciedlić nową rzeczywistość, ale w zasadzie nie ma opłat za żądania We / Wy, więc włączenie wymiany (lub nie) może być teraz dokonywane wyłącznie na podstawie technicznej.
Gui Ambros
1

Sprawdź /etc/fstabplik, prawdopodobnie zostały skonfigurowane bez zamiany na używanym obrazie. Myślę, że niektórzy ludzie uruchamiają serwery bez wymiany, ponieważ oczekują, że nigdy nie będą używać więcej niż całkowitej pamięci - zamiana powoduje, że wszystko jest bardzo wolne.

Jednak zawsze mam paranoję na punkcie procesu tworzenia balonów w pamięci, więc uważam, że rozsądnie byłoby po prostu skonfigurować dysk wymiany i odtworzyć obraz z działającej instancji ec2.

ehsanul
źródło
2
Sporadyczne zamiany nie powodują spowolnienia systemu.
laebshade
0

Prostym rozwiązaniem do prowadzenia swapw EC2obrazach jest eksploatowany swapskompresowane lz4w ramz zram-init.

To rozwiązanie ma nie wziąć ramz dala od host:

wprowadź opis zdjęcia tutaj

Stuart Cardall
źródło
1
Bardzo kreatywny, ale czy użycie pamięci RAM jako rzeczywistej pamięci RAM nie ma większego sensu niż użycie jej jako systemu plików w pamięci do wymiany? (który przyzwyczaja się przede wszystkim, gdy zabraknie pamięci) Zmniejszenie ilości dostępnej pamięci dla aplikacji do tworzenia wymiany wydaje się sprzeczne z intuicją ...
HBruijn 24.08.18
Ciekawa odpowiedź, ale myślę, że korzystanie ze sklepu EBS / instancji jest prawdopodobnie lepszym rozwiązaniem ogólnego zastosowania. Mam t2.nano z 512 MB pamięci RAM i 512 MB wymiany na EBS, który działa dobrze.
Tim
To oczywiście zajmuje pamięć RAM z hosta (instancja EC2) - skąd jeszcze pochodzi pamięć RAM? Jedyną zaletą tego podejścia jest kompresja części całkowitej pamięci RAM, ale nie zapewnia ona możliwości użycia dysku SSD do wymiany. Zamiast tego możesz użyć, zswapktóry zapewnia skompresowaną pamięć podręczną RAM na normalnym pliku wymiany / dysku: wiki.archlinux.org/index.php/zswap . Więcej informacji na temat zram znajduje się na stronie cnx-software.com/2018/05/14/...
RichVel