it-swarm.com.de

Können Sie Amazon EBS an mehrere Instanzen anhängen?

Derzeit verwenden wir mehrere Webserver, die auf einen MySQL-Server und einen Dateiserver zugreifen. Kann ich beim Umstieg auf die Cloud dasselbe Setup verwenden und das EBS mit mehreren Maschineninstanzen verknüpfen oder was ist eine andere Lösung? 

127
bonez05

UPDATE (April 2015): Für diesen Anwendungsfall sollten Sie sich das neue Amazon Elastic File System (EFS) anschauen, das so konzipiert ist, dass es in der von Ihnen gewünschten Weise mehrfach angehängt wird. Der Hauptunterschied zwischen EFS und EBS besteht darin, dass sie unterschiedliche Abstraktionen bieten: EFS macht das NFSv4-Protokoll verfügbar, wohingegen EBS rohen Blockzugriff IO bereitstellt. 

Nachfolgend finden Sie meine ursprüngliche Erklärung, warum es nicht möglich ist, ein Rohblockgerät auf mehreren Computern sicher zu installieren.


ORIGINAL POST (2011):

Selbst wenn Sie einen EBS-Datenträger mit mehreren Instanzen verknüpfen können, handelt es sich um einen _REALLY_BAD_IDEA_. Um Kekoa zu zitieren: "Das ist, als würde man auf zwei Computern gleichzeitig eine Festplatte verwenden"

Warum ist das eine schlechte Idee? ... Der Grund, warum Sie ein Volume nicht an mehrere Instanzen anhängen können, ist, dass EBS eine Abstraktion für "Blockspeicher" bereitstellt, auf der Kunden ein Dateisystem wie ext2/ext3/etc ausführen. Die meisten dieser Dateisysteme (z. B. ext2/3, FAT, NTFS usw.) werden geschrieben, sofern sie exklusiven Zugriff auf das Blockgerät haben. Zwei Instanzen, die auf dasselbe Dateisystem zugreifen, enden mit Sicherheit in Tränen und Datenverfälschungen.

Mit anderen Worten, ein doppeltes Einhängen eines EBS-Volumes würde nur funktionieren, wenn Sie ein Cluster-Dateisystem ausführen, das ein Blockgerät für mehrere Computer gemeinsam nutzen soll. Darüber hinaus würde auch dies nicht ausreichen. EBS muss für dieses Szenario getestet werden, um sicherzustellen, dass es die gleiche Konsistenzgarantie bietet wie andere Lösungen für gemeinsam genutzte Blockgeräte. Das heißt, dass Blöcke nicht auf nicht gemeinsam genutzten Zwischenebenen zwischengespeichert werden, z. und DomU-Kernel. Hinzu kommen die Leistungsaspekte beim Synchronisieren von Blöcken zwischen mehreren Clients. Die meisten der gruppierten Dateisysteme sind für dedizierte Hochgeschwindigkeits-SANs konzipiert, nicht für ein Standard-Ethernet. Es hört sich so einfach an, aber was Sie verlangen, ist etwas sehr Unauffälliges.

Überprüfen Sie alternativ, ob es sich bei Ihrem Datenfreigabeszenario um NFS, SMB/CIFS, SimpleDB oder S3 handeln kann. Diese Lösungen verwenden alle Protokolle höherer Schichten, die Dateien gemeinsam nutzen sollen, ohne ein gemeinsam genutztes Blockgerät-Subsystem zu haben. Oft ist eine solche Lösung tatsächlich effizienter.

In Ihrem Fall können Sie immer noch eine einzige MySql-Instanz/einen einzigen Dateiserver haben, auf die mehrere Web-Frontends zugreifen. Dieser Fileserver könnte dann seine Daten auf einem EBS-Volume speichern, sodass Sie nächtliche Snapshot-Backups erstellen können. Wenn die Instanz, auf der der Dateiserver ausgeführt wird, verloren geht, können Sie den EBS-Datenträger trennen und erneut mit einer neuen Dateiserverinstanz verbinden. Nach wenigen Minuten ist er wieder betriebsbereit.

"Gibt es so etwas wie S3 als Dateisystem?" - Ja und nein. Ja, es gibt Lösungen von Drittanbietern wie s3fs , die "ok" funktionieren, aber unter der Haube müssen sie immer noch relativ teure Web-Service-Aufrufe für jedes Lesen/Schreiben machen. Für ein gemeinsames Werkzeugverzeichnis funktioniert es hervorragend. Für die Art der gruppierten FS -Verwendung, die Sie in der HPC-Welt sehen, keine Chance. Um dies zu verbessern, benötigen Sie einen neuen Dienst, der ein binäres verbindungsorientiertes Protokoll wie NFS bietet. Das Angebot eines solchen mehrfach eingebundenen Dateisystems mit angemessener Leistung und Verhalten wäre ein großartiges Zusatzmodul für EC2. Ich bin schon lange ein Befürworter von Amazon, um so etwas zu bauen. 

125
Dave Dopson

Nein, das ist wie bei zwei Computern eine Festplatte. 

Wenn Sie gemeinsam genutzte Daten wünschen, können Sie einen Server einrichten, auf den alle Ihre Instanzen zugreifen können. Wenn Sie einen einfachen Speicherbereich für alle Ihre Instanzen wünschen, können Sie den S3-Speicherdienst von Amazon zum Speichern von Daten verwenden, die verteilt und skalierbar sind.

Wenn Sie in die Cloud wechseln, können Sie dasselbe Setup verwenden, Sie können jedoch den Dateiserver durch S3 ersetzen oder alle Ihre Instanzen mit Ihrem Dateiserver verbinden.

Sie haben viele Optionen, aber die gemeinsame Nutzung einer Festplatte zwischen Instanzen ist wahrscheinlich nicht die beste Option.

74
Kekoa

Nein, laut den EBS-Dokumenten: "Ein Volume kann nur jeweils einer Instanz zugeordnet werden". 

Wie verwenden Sie derzeit den gemeinsam genutzten Speicher? Wenn Sie nur Dateien vom Dateiserver aus bereitstellen möchten, haben Sie in Betracht gezogen, ein System einzurichten, damit Sie bestimmte Anforderungen an einen Prozess auf dem Dateiserver weiterleiten können, anstatt die Webserver diese Dateien bedienen zu lassen.

14
Austin Mills

Ich bin mir ziemlich sicher, dass Sie das nicht können, aber Sie können ein EBS klonen und es an eine andere Instanz anhängen.

Dies ist nützlich für feste Datensätze oder zum Testen von 'echten' Daten, erlaubt jedoch nicht mehr als einer Instanz, einen einzelnen Blockspeicher auszuführen

4

Mehrere Webserver, die auf MySQL Server & File Server zugreifen, sind in AWS normal. Einige der Best Practices für die oben genannte Architektur sind:

Punkt 1) MySQL auf EC2 kann in AWS im asynchronen/semi-synchronen Modus als Master-Slave eingerichtet werden. EBS-OPT + PIOPS in RAID 0 wird für Hochleistungsdatenbanken empfohlen

Punkt 2) Alternativ können Sie den Amazon RDS + Multi-AZ-Modus verwenden. Für die Leseskalierung können mehrere RDS-Read-Replikate an MySQL-RDS angehängt werden.

Punkt 3) Das EBS-Volume kann nicht gleichzeitig an mehrere EC2 angeschlossen werden. Sie können mit EBS einen Dateiserver auf Basis von GlusterFS auf Amazon EC2 erstellen. Mehrere Webserver können gleichzeitig mit AWS infra mit einem einzelnen GlusterFS kommunizieren.

Punkt 4) Wenn Ihre Anwendung als Dateispeicher in S3 integriert werden kann, wird dies wegen der Stabilität der Architektur bevorzugt. Sie können auch mit Tools wie S3Fuse von Ihrer Anwendung aus auf S3 zugreifen. 

4
Harish Ganesan

Warum erstellen Sie in anderen Instanzen keine Instanz mit Volume und sshfs für dieses Volume?

1
Krish

In der IT-Welt gibt es etwas, das als Clustered File System, Redhat GFS, Oracle OCFS2, Veritas CFS ...

1
DKSG

Die kurze Antwort lautet kategorisch "Nein". Andere haben es oben gesagt. 

Diejenigen, die "Ja" sagten, beantworteten die Frage nicht, sondern eine andere Frage. Wenn es sich bei EFS nur um einen NFS-Dienst handelt, ist dies nicht die Antwort auf die Frage, wie ursprünglich angegeben. Dabei spielt es keine Rolle, ob EFS in allen Zonen "ausgerollt" wird oder nicht, weil Sie Ihre eigene NFS-Instanz durchaus ausführen können und NFS auf mehreren Servern hängt. Das ist nichts Neues, das haben wir schon 1992 gemacht. Mit SMB und sshfs können Laufwerke nur als Remote-Dateisystem bereitgestellt werden.

Diejenigen, die sagten, "warum sollten Sie das tun" oder "es wird alles in Tränen enden", sind falsch. Wir haben seit Jahrzehnten mehrere Festplatten auf mehreren Servern installiert. Wenn Sie jemals mit einem SAN (Storage Area Network) gearbeitet haben, ist die Möglichkeit, dasselbe Gerät an mehrere Knoten anzuschließen, normalerweise über FibreChannel SAN, völlig normal. Jeder, der vor einem Jahrzehnt Server betrieben hat, bevor die Virtualisierungs-/Cloud-Server allgegenwärtig wurden, hat etwas damit zu tun. 

Bald gab es gruppierte Dateisysteme, in denen zwei Systeme auf genau demselben Datenträger lesen und schreiben konnten. Ich glaube, das hat schon mit der VAX- und Alpha-VMS-Zeit in der Geschichte angefangen. Gruppierte Dateisysteme verwenden ein verteiltes Prinzip des gegenseitigen Ausschlusses, um Blöcke direkt bearbeiten zu können. 

Der Vorteil des Einbaus derselben Festplatte auf mehreren Knoten ist die Geschwindigkeit und die Verringerung einzelner Fehlerpunkte. 

Nun, Cluster-Dateisysteme sind im "Consumer" -Hosting-Geschäft nicht sehr beliebt, das stimmt. Und sie sind kompliziert und haben einige Fallstricke. Sie benötigen jedoch nicht einmal ein gruppiertes Dateisystem, um eine an mehrere Rechenknoten angeschlossene Platte zu verwenden. Was ist, wenn Sie ein schreibgeschütztes Laufwerk benötigen? Sie brauchen nicht einmal ein gruppiertes Dateisystem! Sie fügen einfach in Ihr/etc/fstab dasselbe physische Gerät ein, das schreibgeschützt ist (ro). Dann mounten Sie auf 2 oder 10 EC2-Server und alle können direkt von diesem Gerät lesen! 

In der Welt der Cloud-Server gibt es einen offensichtlichen Anwendungsfall, wenn Farmen schnell skaliert werden. Sie können Ihre Hauptsystemdiskette vorbereiten und nur einen sehr kleinen Boot- und Konfigurationsdatenträger für jeden Server verwenden. Sie können sogar alle von derselben Startdiskette booten und direkt vor dem Remount von/im Read-Write-Modus können Sie einen Union-FS mit 3 Ebenen einfügen:

  1. Die hauptsächliche schreibgeschützte Systemfestplatte mit Boot, Kernel und Userland Installation 
  2. Ein Konfigurationsdateisystem mit nur den wenigen Dateien .__ (meistens in/etc), die für den einzelnen Server spezifisch sind. Diese -Diskette kann von einem anderen Server ausgeschrieben werden, um das Booten einernew-Instanz vorzubereiten. Beispieldateien wären hier/etc/hostname und nur Sehr wenige Konfigurationsdateien, die pro Knoten unterschiedlich bleiben müssen.
  3. Die beschreibbare Festplatte, die Sie möglicherweise gar nicht benötigen, kann nur /Tmp als Speicherdateisystem sein. 

Also, ja, die Frage hat sehr viel Sinn gemacht, und leider lautet die Antwort (noch) "Nein". Kein NFS ist kein guter Ersatz für diesen Anwendungsfall, da alle Leseaktivitäten von der Systemfestplatte bestraft werden. Der Netzwerkstart von einer NFS-Systemfestplatte ist jedoch die einzige Alternative zur Implementierung des oben beschriebenen Anwendungsfalls. Leider ist das Einrichten eines Netzwerk-Boot-Agenten und NFS viel schwieriger als der Zugriff auf das gleiche physische Blockgerät.

PS: Ich hätte gerne eine kürzere Version davon als Kommentar eingereicht, aber ich kann es nicht wegen der dummen 51 Kreditpunkte-Schwelle machen, deshalb muss ich eine Antwort mit dem gleichen "Nein" schreiben, aber ich möchte meinen Punkt angeben, warum dies so ist eine relevante Frage, die keine verdiente Antwort erhalten hat.

PPS: Ich habe gerade bei StackExchange jemanden gefunden, der iSCSI erwähnt. iSCSI ist ein bisschen wie NFS, aber logisch wie ein FibreChannel-SAN. Sie können auf physische Blockgeräte zugreifen (und diese gemeinsam nutzen). Dies würde die Freigabe von Startdatenträgern vereinfachen, so dass Sie das Bootd-Netzwerk-Booten nicht einrichten müssen. Bei AWS steht jedoch auch kein Netzwerkstart zur Verfügung. 

0
Gunther Schadow