Wir verwenden derzeit mehrere Webserver, die auf einen MySQL-Server und einen Dateiserver zugreifen. Kann ich beim Wechsel in die Cloud dasselbe Setup verwenden und das EBS an mehrere Computerinstanzen anhängen, oder was ist eine andere Lösung?
Wir verwenden derzeit mehrere Webserver, die auf einen MySQL-Server und einen Dateiserver zugreifen. Kann ich beim Wechsel in die Cloud dasselbe Setup verwenden und das EBS an mehrere Computerinstanzen anhängen, oder was ist eine andere Lösung?
Antworten:
UPDATE (April 2015) : Für diesen Anwendungsfall sollten Sie sich das neue Amazon Elastic File System (EFS) ansehen , das so konzipiert ist, dass es genau nach Ihren Wünschen multipliziert wird. Der Hauptunterschied zwischen EFS und EBS besteht darin, dass sie unterschiedliche Abstraktionen bereitstellen: EFS stellt das NFSv4-Protokoll bereit, während EBS den Raw-Block-E / A-Zugriff bereitstellt.
Im Folgenden finden Sie meine ursprüngliche Erklärung, warum es nicht möglich ist, ein Raw-Block-Gerät sicher auf mehreren Computern zu installieren.
ORIGINAL POST (2011):
Selbst wenn Sie ein EBS-Volume an mehr als eine Instanz anhängen könnten, wäre es ein _REALLY_BAD_IDEA_. Um Kekoa zu zitieren: "Dies ist wie die gleichzeitige Verwendung einer Festplatte in zwei Computern."
Warum ist das eine schlechte Idee? ... Der Grund, warum Sie ein Volume nicht an mehr als eine Instanz anhängen können, besteht darin, dass EBS eine "Blockspeicher" -Abstraktion bereitstellt, auf der Kunden ein Dateisystem wie ext2 / ext3 / etc. Ausführen. Die meisten dieser Dateisysteme (z. B. ext2 / 3, FAT, NTFS usw.) werden unter der Annahme geschrieben, dass sie exklusiven Zugriff auf das Blockgerät haben. Zwei Instanzen, die auf dasselbe Dateisystem zugreifen, würden mit ziemlicher Sicherheit zu Tränen und Datenkorruption führen.
Mit anderen Worten, das doppelte Mounten eines EBS-Volumes funktioniert nur, wenn Sie ein Cluster-Dateisystem ausführen, das ein Blockgerät für mehrere Computer freigeben soll. Darüber hinaus würde auch dies nicht ausreichen. EBS müsste für dieses Szenario getestet werden und sicherstellen, dass es die gleichen Konsistenzgarantien bietet wie andere gemeinsam genutzte Blockgerätelösungen ... dh, dass Blöcke nicht auf nicht gemeinsam genutzten Zwischenebenen wie dem Dom0-Kernel, der Xen-Schicht, zwischengespeichert werden. und DomU-Kernel. Und dann gibt es noch die Leistungsaspekte beim Synchronisieren von Blöcken zwischen mehreren Clients: Die meisten Cluster-Dateisysteme sind für dedizierte Hochgeschwindigkeits-SANs ausgelegt, nicht für ein Standard-Commodity-Ethernet. Es klingt so einfach, aber was Sie verlangen, ist eine sehr triviale Sache.
Überprüfen Sie alternativ, ob Ihr Datenfreigabeszenario NFS, SMB / CIFS, SimpleDB oder S3 sein kann. Diese Lösungen verwenden alle Protokolle höherer Ebenen, die Dateien gemeinsam nutzen sollen, ohne über ein gemeinsam genutztes Blockgerätesubsystem zu verfügen. Oft ist eine solche Lösung tatsächlich effizienter.
In Ihrem Fall können Sie immer noch eine einzelne MySQL-Instanz / einen Dateiserver haben, auf die / den mehrere Web-Frontends zugreifen. Dieser Dateiserver 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 das EBS-Volume trennen und erneut an eine neue Dateiserverinstanz anschließen und in wenigen Minuten wieder einsatzbereit sein.
"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 Webdienstaufrufe für jedes Lesen / Schreiben tätigen. Funktioniert für ein freigegebenes Tool-Verzeichnis hervorragend. Für die Art der Cluster-FS-Nutzung, die Sie in der HPC-Welt sehen, keine Chance. Um dies besser zu machen, benötigen Sie einen neuen Dienst, der ein binäres verbindungsorientiertes Protokoll wie NFS bereitstellt. Das Anbieten eines solchen mehrfach gemounteten Dateisystems mit angemessener Leistung und angemessenem Verhalten wäre ein großartiges Feature-Add-On für EC2. Ich bin seit langem ein Befürworter von Amazon, so etwas zu bauen.
Dies ist jetzt mit den neuesten Instanztypen möglich, die in AWS Nitro innerhalb derselben Verfügbarkeitszone ausgeführt werden. Es gibt einige Einschränkungen, aber dies ist ideal für bestimmte Anwendungsfälle, die die Geschwindigkeit von EBS erfordern und bei denen EFS nicht möglich ist.
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-volumes-multi.html
Nein, dies entspricht der Verwendung einer Festplatte in zwei Computern.
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 verwenden, um verteilte und skalierbare Daten zu speichern.
Wenn Sie in die Cloud wechseln, können Sie genau das gleiche Setup haben, aber Sie können möglicherweise 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.
Nein, laut EBS-Dokumentation: "Ein Volume kann jeweils nur an eine Instanz angehängt werden".
Wie verwenden Sie derzeit den gemeinsam genutzten Speicher? Wenn es nur um das Bereitstellen von Dateien vom Dateiserver geht, haben Sie darüber nachgedacht, ein System so einzurichten, dass Sie bestimmte Anforderungen an einen Prozess auf dem Dateiserver weiterleiten können, anstatt dass die Webserver diese Dateien bereitstellen?
aws ec2 describe-volumes
eine Reihe von Anhängen zurückgegeben wird.
Ich bin mir ziemlich sicher, dass Sie das nicht können, aber Sie können ein EBS klonen und an eine andere Instanz anhängen.
Dies ist nützlich für feste Datensätze oder zum Testen von "echten" Daten, erlaubt jedoch nicht, dass mehr als eine Instanz in einem einzelnen Blockspeicher ausgeführt wird
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 unter EC2 kann in AWS als Master-Slave im asynchronen / halbsynchronen Modus 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-Lesereplikate 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 basierend auf GlusterFS auf Amazon EC2 erstellen. Mehrere Webserver können in AWS Infra gleichzeitig mit einem einzelnen GlusterFS kommunizieren.
Punkt 4) Wenn Ihre Anwendung als Dateispeicher in S3 integriert werden kann, wird sie aufgrund der Stabilität der Architektur bevorzugt. Sie können auch mit Tools wie S3fuse aus Ihrer Anwendung heraus auf S3 zugreifen.
EBS hat gerade angekündigt, dass dies möglich ist: https://aws.amazon.com/about-aws/whats-new/2020/02/ebs-multi-attach-available-provisioned-iops-ssd-volumes/
In der IT-Welt gibt es etwas, das als Clustered Filesystem, Redhat GFS, Oracle OCFS2, Veritas CFS ... bekannt ist.
Die kurze Antwort ist ein kategorisches "Nein". Andere haben es oben gesagt.
Diejenigen, die "Ja" sagten, beantworteten die Frage nicht, sondern eine andere Frage. Wenn EFS nur ein NFS-Dienst ist, ist es nicht die Antwort auf die ursprünglich angegebene Frage. Und es spielt keine Rolle, ob EFS "in allen Zonen eingeführt" wird oder nicht, da Sie Ihre eigene NFS-Instanz ganz ausführen können und mehrere Server NFS bereitstellen. Das ist nichts Neues, das haben wir schon 1992 gemacht. SMB und sshfs - all dies sind nur Möglichkeiten, Laufwerke als Remote-Dateisystem bereitzustellen.
Diejenigen, die sagten "warum willst du das tun" oder "alles wird in Tränen enden", sind falsch. Wir haben seit Jahrzehnten mehrere Festplatten auf mehreren Servern bereitgestellt. Wenn Sie jemals mit einem SAN (Storage Area Network) gearbeitet haben, ist die Möglichkeit, dasselbe Gerät in der Regel über FibreChannel SAN an mehrere Knoten anzuschließen, völlig normal. Jeder, der vor einem Jahrzehnt Server ausgeführt hat, bevor die Virtualisierungs- / Cloud-Server allgegenwärtig wurden, ist davon betroffen.
Bald gab es Cluster-Dateisysteme, in denen zwei Systeme auf genau demselben Volume lesen und schreiben konnten. Ich glaube, dies begann bereits mit der Zeit von VAX und Alpha VMS in der Geschichte. Clustered-Dateisysteme verwenden ein verteiltes gegenseitiges Ausschlussschema, um Blöcke direkt bearbeiten zu können.
Der Vorteil der Bereitstellung derselben Festplatte auf mehreren Knoten besteht in der Geschwindigkeit und der Reduzierung einzelner Fehlerquellen.
Nun, Cluster-Dateisysteme sind im Hosting-Geschäft "Consumer" nicht besonders beliebt geworden. Und sie sind kompliziert und haben einige Fallstricke. Sie benötigen jedoch nicht einmal ein Cluster-Dateisystem, um eine Festplatte zu verwenden, die an mehrere Rechenknoten angeschlossen ist. Was ist, wenn Sie ein schreibgeschütztes Laufwerk möchten? Sie benötigen nicht einmal ein Cluster-Dateisystem! Sie haben einfach dasselbe physische Gerät wie read only (ro) in Ihre / etc / fstab eingefügt. Dann mounten Sie 2 oder 10 EC2-Server und alle können direkt von diesem Gerät lesen!
In der Welt der Cloud-Server gibt es dafür einen offensichtlichen Anwendungsfall, wenn schnell skalierende Farmen erstellt werden. Sie können Ihre Hauptsystemdiskette vorbereiten lassen und für jeden Server nur eine sehr kleine Start- und Konfigurationsdiskette verwenden. Sie können sogar alle von derselben Startdiskette booten lassen, und kurz vor dem erneuten Bereitstellen von / im Lese- / Schreibmodus können Sie einen Union-FS mit drei Ebenen einfügen:
Ja, die Frage hat sehr viel Sinn gemacht und leider lautet die Antwort (immer noch) "Nein". Und kein NFS ist kein großartiger Ersatz für diesen Anwendungsfall, da es alle Leseaktivitäten von der Systemfestplatte beeinträchtigt. Der Netzwerkstart von einer NFS-Systemfestplatte ist jedoch die einzige Alternative zur Implementierung des oben beschriebenen Anwendungsfalls. Leider ist das Einrichten von Network Boot Agent und NFS viel schwieriger als der Zugriff auf dasselbe physische Blockgerät.
PS: Ich hätte gerne eine kürzere Version davon als Kommentar eingereicht, kann dies aber aufgrund der dummen Schwelle von 51 Kreditpunkten nicht. Daher muss ich eine Antwort mit dem gleichen wesentlichen "Nein" schreiben, aber meinen Punkt angeben, warum dies so ist eine relevante Frage, die keine verdiente Antwort erhalten hat.
PPS: Ich habe gerade jemanden bei StackExchange gefunden, der iSCSI erwähnt. iSCSI ähnelt etwas NFS, ist jedoch logisch einem FibreChannel-SAN ähnlich. Sie können auf physische Blockgeräte zugreifen (und diese freigeben). Dies würde die Freigabe der Startdiskette vereinfachen, sodass Sie den Start des Bootd-Netzwerks nicht einrichten müssen, was schwierig sein kann. Unter AWS ist jedoch auch kein Netzwerkstart verfügbar.
Obwohl EBS bisher nur das Anhängen einer einzelnen EC2-Instanz an ein bestimmtes Volume zugelassen hat, ist jetzt zumindest für io1-Volumes ein Multi-Attach möglich. Weitere Informationen finden Sie in diesem AWS-Blogbeitrag .
Sie können ein Laufwerk in AWS vollständig auf mehreren Servern verwenden. Ich verwende sshfs, um ein externes Laufwerk bereitzustellen und es für mehrere Server in EC2 freizugeben.
Der Grund, warum ich ein einzelnes Laufwerk mit mehreren Servern verbinden musste, war, dass ich alle meine Backups an einem einzigen Ort ablegen konnte, bevor ich sie lokal herunterfuhr.