Warum werden EC2-Ubuntu-Bilder nicht ausgetauscht?

82

Ich habe ein paar Server auf EC2 gestartet und sie haben keinen Swap.

Mache ich etwas falsch oder haben die Maschinen einfach keine?

rafamvc
quelle
Ich habe mich auch gefragt, aber ich habe gerade eine EBS-Instanz eingerichtet, sie als Swap formatiert und / dev / sdg ...
Tom O'Connor
Es ist auch typisch, wenn SSD-Laufwerke auf einem Linux-System verwendet werden, um keinen Swap auf dem SSD-Laufwerk einzurichten. Vor allem, weil manche Leute paranoid sind, würde sich dies negativ auf die Haltbarkeit einer SSD auswirken, wenn sie die ganze Zeit über dieselbe Gruppe von Sektoren bohrt.
Djangofan
1
Welches AMI und welche EC2-Instanzgröße. Das AMI muss für die Verwendung einer Swap-Partition konfiguriert werden, und die Instanz muss diese beim Start hinzufügen.
Jeremy Bouse
Wenn möglich, würde ich raten, Swap nicht auf EC2 zu verwenden, es sei denn, Sie sind zu 99% sicher, dass Sie es nicht verwenden müssen (dh es ist nur für den Notfall da). Als wir das Tauschen einiger unserer EC2-Instanzen deaktiviert haben, haben sich unsere monatlichen EBS-IO-Kosten wahrscheinlich halbiert. Nur meine zwei Cent, um dir zwei Cent zu sparen - ja, das war schrecklich, ich entschuldige mich und werde mich in einer Ecke verstecken;)
Smudge
Sie können auch in diesen Schritten suchen docs.aws.amazon.com/AWSEC2/latest/UserGuide/…
Artem.Borysov

Antworten:

74

Sie haben Recht, die Ubuntu EC2 EBS-Images werden ohne konfigurierten Swap-Space ausgeliefert ( mindestens für 11.04 ). Die "normalen" instanzartigen Images haben eine Swap-Partition, obwohl nur 896 MB auf der von mir getesteten Partition vorhanden sind.

Wenn ein Prozess in die Luft geht und Sie keinen Auslagerungsspeicher haben, kann Ihr Server für eine Weile zum Stillstand kommen, bevor der OOM-Killer einsetzt, während es beim Auslagerungsspeicher nur langsam wird. Aus diesem Grund habe ich immer gerne Swap Space, auch mit genügend RAM. Hier sind Ihre Optionen:

  • Erstellen Sie ein EBS-Volume (2-4 mal so groß wie Ihr RAM), hängen Sie es an Ihre Instanz an (ich nenne es gerne / dev / xvdm für "Speicher") sudo mkswap /dev/xvdm, fügen Sie es zu fstab hinzu sudo swapon -aund los geht's . Ich habe das schon einmal gemacht und es funktioniert einwandfrei, aber es ist wahrscheinlich etwas langsamer als der Instanzspeicher, da es über das Netzwerk übertragen wird.

  • Möglicherweise können Sie Ihre Festplatte neu partitionieren, um eine Auslagerungspartition hinzuzufügen. Dies erfordert jedoch möglicherweise die Erstellung eines neuen AMI. In einer laufenden Instanz war dies nicht möglich, da ich das Root-Dateisystem nicht aushängen kann und nicht einmal auf das Plattengerät (/ dev / xvda), sondern nur auf die Partition (xvda1) zugreifen kann.

  • Oder Sie können eine Auslagerungsdatei erstellen. Dies ist momentan meine bevorzugte Lösung.

    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
    

    Getan. :) Ich weiß, dass es vielen Leuten unangenehm ist, Dateien anstelle von Partitionen zu verwenden, aber es funktioniert auf jeden Fall gut genug als Notfall-Auslagerungsspeicher.

Jo Liss
quelle
4
Das Austauschen auf ein EBS-Volume kann zusätzliche Kosten verursachen, wie in den anderen Antworten angegeben. Das Nichtverwenden von Swap oder das Wechseln in einen Instanzspeicher scheinen bessere Lösungen zu sein.
Isuldor
7
Die Verwendung des Instanzspeichers ist eine bessere Option als EBS. EBS ist ein Netzwerkdateisystem und stellt über dieselbe Netzwerkverbindung wie alles andere eine Verbindung zur EC2-Instanz her. Der Instanzspeicher ist an die Hardware angehängt, auf der sich die Instanz befindet (aus diesem Grund bleibt er nicht bestehen, wenn Sie die Instanz stoppen und starten). Das einzige Mal, dass EBS eine Option für den Austausch ist, ist, wenn Sie einen Instanztyp verwenden, der nicht mit dem Instanzspeicher geliefert wird, dh das t1.micro (das nur etwa 620 MB RAM hat, ist wahrscheinlich derjenige, der wirklich einen Notfall benötigt Wechsel).
ColtonCat
Das bs = 1M ist bereits in binärer Notation, also sollte der count = 2048 Multiplikator count = 2000 sein - wenn ich mich nicht irre.
ypocat
1
Wenn Sie sich für 2GiB entscheiden, scheint 1024 * 2048 korrekt zu sein.
Jo Liss
25

Der beste Ort für den Swap IMHO ist der Instance-Store. Warum? AWS berechnet Ihnen keine I / O-Gebühren für den Instance-Store. Außerdem ist der Instanzspeicher in vielen Fällen leistungsfähiger als EBS. Stellen Sie einfach sicher, dass Sie ein Skript haben, das die Auslagerungsdatei neu erstellt, falls Sie die Instanz stoppen. Neustarts sind in Ordnung. Warum oh, warum ist es nicht standardmäßig da?

Lassen Sie uns den Instanzspeicher lokalisieren.

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

Hurra, 160.1GB kostenlos! Legen Sie Ihren Swap dort ein und vergessen Sie 100 $ Überschuss pro Server, wenn Ihr EBS-basierter Swap versehentlich überfüllt ist. Unglückliche Erfahrung hier zu reden.

Anscheinend sehen Sie in einigen Fällen den Instance-Store nicht.

Abhängig vom Instanztyp müssen Sie zuerst die Instanzspeicherdatenträger mit den Optionen für die Blockgerätezuordnung an die Instanz anhängen. Wenn Sie dies nicht tun, werden die Geräte möglicherweise nicht einmal unter / dev angezeigt (gemäß Verwendung des Speichers "Instance Store Volumes" in Amazon EC2? ).

sebwinadmin
quelle
1
Ich möchte nur darauf hinweisen, dass Benutzer von t1.micro auf der kostenlosen Ebene diese Option nicht verwenden können.
Reuben L.
20

Hinweis : Amazon hat seine Preisrichtlinie geändert und erhebt ab Mitte 2016 keine Gebühren für E / A-Anfragen. Die Antwort wird aus historischen Gründen hier aufbewahrt, aber es gibt keine Kostenfolgen bei der Verwendung (oder Nichtverwendung) von Swap auf EC2-EBS-gestützten Instanzen.


Dies ist beabsichtigt. Swap ist bei EC2-EBS-gestützten Instanzen standardmäßig deaktiviert, um unvorhersehbare Kosten zu vermeiden.

Wenn Sie eine speicherhungrige App haben, die nicht mehr funktioniert (z. B. auf einer winzigen oder kleinen Instanz), kann sie eine große Anzahl von E / A-Anforderungen auf Ihrem EBS-Volume generieren. Amazon berechnet 0,10 USD pro 1 Million E / A-Anfragen (siehe http://aws.amazon.com/pricing/ebs/ ) .

Unter normalen Umständen sollten Sie sich darüber keine Sorgen machen. in der Regel betragen die Kosten für I / O-Anfragen auch bei kleineren Instanzen ein paar Dollar, wenn ja. Wenn Sie also wissen, dass Sie eine Instanz mit der richtigen Größe haben und dieser Swap nur selten verwendet wird, aktivieren Sie ihn. Aber sei vorsichtig mit winzigen Instanzen.

Wenn Sie Swap aktivieren, möchten Sie möglicherweise Nutzungsberichte im Auge behalten. Optional können Sie auch einen Abrechnungsalarm einrichten, indem Sie in der CloudWatch-Systemsteuerung einen neuen Alarm für den gesamten Rechnungsbetrag erstellen. Auf diese Weise werden Sie sofort benachrichtigt, was bei Ihren Instanzen seltsam ist.

Gui Ambros
quelle
Diese Antwort ist für mich etwas irreführend oder verwirrend, da die gängigsten Instanztypen SSD-Volumes verwenden. aws.amazon.com/ec2/instance-types
Taylor Edmiston
2
@ Tedmiston: In der Tat ist diese Antwort nicht mehr anwendbar. Ich habe mich angepasst, um die neue Realität widerzuspiegeln, aber im Grunde gibt es keine Gebühren für E / A-Anforderungen, sodass das Aktivieren des Austauschs (oder nicht) jetzt auf rein technischer Basis erfolgen kann.
Gui Ambros
1

Überprüfen Sie die /etc/fstabDatei. Sie wurden wahrscheinlich eingerichtet, ohne das verwendete Image auszutauschen. Ich denke, einige Leute laufen ohne Swap für Server, da sie erwarten, nie mehr als den gesamten Arbeitsspeicher zu verbrauchen - Swap macht alles super langsam.

Ich bin jedoch immer paranoid, wenn es darum geht, einen Prozess im Speicher aufzublähen. Ich halte es daher für ratsam, einfach ein Auslagerungslaufwerk einzurichten und ein Image von der ausgeführten ec2-Instanz neu zu erstellen.

ehsanul
quelle
2
Durch gelegentliches Austauschen wird das System nicht langsam.
Laebshade
0

Eine einfache Lösung zum Einspielen swapvon EC2Bildern besteht darin, swapkomprimiert mit lz4in rammit auszuführen zram-init.

Diese Lösung ist nicht nehmen ramweg von den host:

Bildbeschreibung hier eingeben

Stuart Cardall
quelle
1
Sehr kreativ, aber wäre es nicht sinnvoller, Ihren Arbeitsspeicher als eigentlichen Arbeitsspeicher zu verwenden, als ihn als speicherinternes Dateisystem für den Austausch zu verwenden? (
Dies wird
Interessante Antwort, aber ich denke, die Verwendung von EBS / Instance Store ist wahrscheinlich eine bessere Allzwecklösung. Ich habe eine t2.nano mit 512 MB RAM und 512 MB Swap auf EBS, die gut funktioniert.
Tim
Dies nimmt eindeutig RAM vom Host (EC2-Instanz) - wo kommt der RAM sonst her? Der einzige Vorteil dieses Ansatzes ist die Komprimierung eines Teils des gesamten Arbeitsspeichers. Es ist jedoch nicht möglich, SSD als Swap zu verwenden. Sie können stattdessen Folgendes verwenden zswap, um den komprimierten RAM-Cache über einer normalen Auslagerungsdatei / -platte bereitzustellen : wiki.archlinux.org/index.php/zswap . Weitere Informationen zu zram finden Sie unter cnx-software.com/2018/05/14/….
RichVel