Ich muss ein Setup für Magento machen. Meine Einschränkung ist in erster Linie die einfache Einrichtung und Fehlertoleranz / Failover. Darüber hinaus sind Kosten ein Thema. Ich habe drei identische physische Server, um die Arbeit zu erledigen. Jeder Serverknoten verfügt über einen i7 Quad Core, 16 GB RAM und 2 x 3 TB HD in einer Software-RAID 1-Konfiguration. Auf jedem Knoten wird Ubuntu 12.04 ausgeführt. jetzt sofort. Ich habe eine zusätzliche IP-Adresse, die an jeden dieser Knoten weitergeleitet werden kann.
Der Magento Shop hat max. 1000 Produkte, 50% davon sind Bündelprodukte. Ich würde schätzen, dass max. 10 Benutzer sind gleichzeitig aktiv. Dies führt mich zu dem Schluss, dass Leistung hier nicht oberste Priorität hat.
Meine erste Setup-Idee
Ein Knoten (lb) führt nginx als Load Balancer aus. Die zusätzliche IP wird mit dem Domänennamen verwendet und standardmäßig an diesen Knoten weitergeleitet. Nginx verteilt die Last gleichmäßig auf die beiden anderen Knoten (shop1, shop2). Shop1 und shop2 sind gleichermaßen konfiguriert: Auf jedem Server werden Apache2 und MySQL ausgeführt. Die MySQLs sind mit Master / Slave-Replikation konfiguriert.
Meine Failover-Strategie:
- Lb schlägt fehl => IP an shop1 (MySQL-Master) weiterleiten, weiter.
- Shop1 schlägt fehl => Lb wird das automatisch erledigen, MySQL-Slave auf shop2 zum Master hochstufen, Magento neu konfigurieren, um shop2 für Schreibvorgänge zu verwenden, fortfahren.
- Shop2 schlägt fehl => Lb erledigt das automatisch, fahren Sie fort.
Ist das eine vernünftige Strategie? Hat jemand ein ähnliches Setup mit Magento durchgeführt?
Meine zweite Setup-Idee
Eine andere Möglichkeit wäre die Verwendung von drbd zum Speichern der MySQL-Datendateien auf shop1 und shop2. Ich verstehe, dass in diesem Szenario nur ein Knoten / eine MySQL-Instanz aktiv sein kann und der andere als Hot Standby verwendet wird. Für den Fall, dass shop1 fehlschlägt, würde ich MySQL auf shop2 starten, die IP an shop2 weiterleiten und fortfahren. Ich mag das, da das MySQL-Setup einfacher ist und die Knoten zu 99% identisch konfiguriert werden können. In diesem Fall wird der Load Balancer unbrauchbar und ich habe einen Ersatzserver.
Meine dritte Setup-Idee
Der dritte Weg könnte die Master-Master-Replikation von MySQL-Datenbanken sein. Meiner Meinung nach kann dies jedoch schwierig sein, da Magento nicht für dieses Szenario erstellt wurde (z. B. widersprüchliche IDs für neue Zeilen). Ich würde das nicht tun, bis ich von einem funktionierenden Beispiel gehört habe.
Können Sie mir einen Rat geben, welchen Weg ich einschlagen soll? Es scheint keinen "guten" Weg zu geben, dies zu tun. ZB lese ich Blog-Beiträge, die ein MySQL-Master / Slave-Setup für Magento beschreiben, aber an anderer Stelle lese ich, dass Daten möglicherweise dupliziert werden, wenn der Slave hinter dem Master zurückbleibt (z. B. wenn eine Bestellung aufgegeben wird, wird ein Kunde möglicherweise zweimal erstellt). Ich bin hier irgendwie verloren.