Wie automatisiert man Failover auf EC2?


13

Wie verwalten Sie Ihre Instanzen in EC2 und behandeln (z. B.) Failover, wenn Sie ihre eigenen Cluster verwalten (z. B. Amazon Autoscale, Rightscale, Scalr nicht verwenden oder nicht dafür bezahlen)? Ich frage mich, ob die meisten Leute, wie ich vermute, am Ende nur ihre eigenen Skripte gegen die EC2-API schreiben.

Das ist zweifellos unser Ansatz: Entwickeln Sie unseren eigenen Python Boto-basierten Monitoring- / Neustart-Daemon, der außerhalb des Standorts ausgeführt wird, und warten Sie auf UDP-Keep-Alives von unseren Instanzen. Bei einem Fehler erstellen wir eine Momentaufnahme der Volumes, registrieren Images, starten neue Instanzen, löschen alte Volumes und so weiter.

Ab und zu denke ich, dass es beim Hacken unserer Skripte einige Open-Source-Tools geben muss, die sich bereits mit diesen Problemen befassen und die nicht den Einschränkungen von (etwa) Scalr unterliegen, aber ich komme immer von Google zurück mit leeren Händen. (Dinge wie Scalr sind in den unterstützten Sätzen / Versionen / Konfigurationen von Software ziemlich begrenzt und haben spezielle und umständliche Möglichkeiten, diese Setups zu manipulieren.)

Auch das Linux-HA / Pacemaker-Ökosystem (Heartbeat, ldirectord usw.) scheint für EC2 nicht wirklich geeignet zu sein . (Aber dann fand ich das - obwohl ich nicht sicher bin, ob dies wirklich eine qualitativ hochwertige Lösung ist).

Antworten:


5

Nun, ich möchte nicht nur das Offensichtliche erklären, sondern die allgemeine Idee ist, diese Komplexität auf die von Amazon verwalteten Dienste zu übertragen.

Im Frontend würden Sie also Amazon Elastic Load Balancing (ELB) verwenden, um einen hochverfügbaren Lastenausgleich bereitzustellen. Auf der Rückseite verwenden Sie Amazon Relational Database Service (gehostet von MySQL), SimpleDB und S3 als Speicher. Alle diese Funktionen werden von Amazon verwaltet und enthalten eine Art Hochverfügbarkeits- / Failover-Behandlung.

Dadurch bleiben in der Regel Ihre Webanwendungsserver und möglicherweise weniger häufig verwendete Servertypen (Rendering-Server, selbst installierte NoSQL-Datenspeicher usw.) erhalten.

Webapp-Server werden normalerweise mit den in ELB integrierten Integritätsprüfungen gut genug gehandhabt. Sie können einen geringen Leistungsabfall hinnehmen, wenn ein Webanwendungsserver ausfällt, oder konsistent +1 Server mehr als erforderlich bereitstellen. Wenn Ihre Konfiguration einfach ist und ein Webapp-Server ausfällt, kann ELB zusammen mit Cloudwatch automatisch einen neuen Webapp-Server für Sie erstellen.

Ihre eigenen benutzerdefinierten Server sind eine andere Sache. Für diese ist es wahr, Sie sind auf sich allein gestellt und müssen mit in der Anwendung integrierten Methoden auskommen oder etwas mit benutzerdefinierten Skripten / Open-Source-HA-Tools zusammenkleben.

Der Kauf der Rightscale-Lösung ist möglicherweise zu teuer. Weniger teure Amazon-Tools wie ELB, grundlegende CloudWatch-Warnmeldungen (jetzt kostenlos für eine Auflösung von 5 Minuten) oder AutoScale sind es jedoch wert, wenn Sie eine hohe Verfügbarkeit benötigen.


3
Wir kennen die AWS-Funktionen sowie deren Einschränkungen. In Ihrem ersten Beispiel wird auf ELB über CNAME-RRs zugegriffen, die nicht mit SOA-RRs koexistieren und daher keine TLDs bedienen können. Außerdem kann nicht über statische IPs auf ELB zugegriffen werden - Frustrationen, die in den Foren weit verbreitet sind. Um Ihr zweites Beispiel zu nehmen, yep, RDS ist MySQL, was die Riesenbeschränkung ist. Ja, wir möchten das Failover unserer eigenen Maschinentypen automatisieren. Ja, die Bereitstellung einer privaten Cloud ist für uns relevant. Ja, ich bin nur neugierig. Etc.
Yang

2
@ Yang: Du hättest deine Frage genauer formulieren sollen und mir die Mühe ersparen müssen, meine Antwort zu tippen. Es gibt keine einheitliche Lösung für HA. Dies hängt vom jeweiligen Dienst ab, davon, wie der Status beibehalten wird, von den Failover-Eigenschaften des Protokolls usw. Sie haben Recht mit den Einschränkungen / Schwierigkeiten bei der Verwendung typischer HA-Tools auf IP-Ebene in EC2. Es gibt jedoch keine einheitliche Antwort für "HA on AWS".
Jesper M

0

RightScale bietet einige großartige Artikel zur Automatisierung des Failovers in EC2. Während die meisten von ihnen Ihnen zeigen, wie Sie mit RightScale selbst vorgehen, sind die Prinzipien allgemein und wahrscheinlich hilfreich für alle, die darüber nachdenken, wie Sie eine Failover-Architektur auf EC2 einrichten.


0

Die von Ihnen beschriebenen Probleme (HA, Überwachung von benutzerdefinierten Servern, Dienste für das Abhören von Leitungen) werden im Allgemeinen von einem PaaS-Anbieter behandelt. Rightscale und Scalr wurden bereits in einer früheren Antwort erwähnt und es gibt zusätzliche gute Optionen (siehe hier für einige PaaS-Optionen:

/programming/9542784/looking-for-paas-providers-recommendations )

Sie sollten überlegen, welcher der Anbieter am besten zu Ihren Anforderungen passt.

Hinweis: Ich arbeite für cloudify, einen Open-Source-PaaS-Anbieter.


0

Ich habe kürzlich in unserem Engineering-Blog einen Beitrag darüber verfasst, wie ELB in Verbindung mit Auto Scaling verwendet werden kann, um für jede Art von App ein automatisches Failover zu erzielen. Es wird erläutert, wie mithilfe von ELB-Integritätsprüfungen der Status Ihrer App gepingt und Aktionen zur automatischen Skalierung ausgelöst werden können.


0

Sie installieren Heartbeat auf beiden Servern. Sie hängen eine elastische IP an den aktiven Server an. Sie konfigurieren ein Skript für das Failover, indem Sie eine API-Anforderung zum Abrufen der elastischen IP initiieren. Sobald der Standby-Server die elastische IP erhalten hat. dauert ca. 30-60 Sekunden) es kann der Master / Aktiv sein.

Ich habe hier nicht die Einzelheiten zu liefern.


-1

Amazon bietet bereits Elastic Load Balancing an ... Warum das Rad neu erfinden?


3
Wegen der verschiedenen Einschränkungen von ELB? Weil es CNAME erfordert und nicht sowohl foo.com als auch www.foo.com bedienen kann? Weil ich eine benutzerdefinierte Planungslogik implementieren möchte? Weil ich nur neugierig bin, wie Sie ELB selbst in einem Cluster unzuverlässiger VMs implementieren würden? Treffen Sie Ihre Wahl.
Yang

@ Yang, Sie tun es genauso, als wären sie Server in Ihrem Rechenzentrum. Es gibt keinen grundlegenden Unterschied, keine magische Sauce, die es zu einer Cloud-Umgebung macht.
Chris S
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.