Haftungsausschluss: Sie wären verrückt, wenn Sie mir zuhören würden, ohne eine Tonne Tests zu machen UND eine zweite Meinung von einer qualifizierten Person einzuholen - ich bin neu in diesem Spiel .
Die in dieser Frage vorgeschlagene Idee zur Effizienzsteigerung funktioniert nicht. Der Hauptfehler, den ich gemacht habe, war zu denken, dass die Reihenfolge, in der die zwischengespeicherten Speicher im Pool definiert sind, eine Art Priorität vorschreibt. Dies ist nicht der Fall . Wenn Sie einen Pool von Memached Daemons definieren (z. B. using session.save_path="tcp://192.168.0.1:11211, tcp://192.168.0.2:11211"
), können Sie nicht wissen, welcher Speicher verwendet wird. Daten werden gleichmäßig verteilt, was bedeutet, dass ein Element möglicherweise im ersten oder im letzten gespeichert wird (oder beides, wenn der Memcache-Client für die Replikation konfiguriert ist). Beachten Sie, dass der Memcache-Server für die Replikation zuständig ist nicht selber machen). In beiden Fällen führt die Verwendung von localhost als erstem im Pool nicht zu einer Leistungsverbesserung. Es besteht eine 50% ige Chance, dass einer der beiden Stores erreicht wird.
Nachdem ich ein bisschen getestet und recherchiert habe, bin ich zu dem Schluss gekommen, dass Sie Sitzungen mithilfe von Memcache KÖNNEN, was Sie aber wahrscheinlich nicht möchten - es scheint nicht beliebt zu sein, da es nicht so gut skaliert wie eine gemeinsam genutzte Sitzung Datenbank daran ist nicht so robust. Ich würde mich über Feedback freuen, damit ich mehr erfahren kann ...
Ignorieren Sie Folgendes, sofern Sie keine PHP-App haben:
Tipp 1: Wenn Sie Sitzungen mit memcache auf zwei Servern teilen möchten:
Stellen Sie sicher, dass Sie bei der Installation des PHP-Memcache-Clients mit Ja geantwortet haben, um die Unterstützung für den Memcache-Sitzungs-Handler zu aktivieren. Fügen Sie Folgendes in Ihre /etc/php.d/memcache.ini
Datei ein:
session.save_handler = memcache
Auf Webserver 1 (IP: 192.168.0.1):
session.save_path="tcp://192.168.0.1:11211"
Auf Webserver 2 (IP: 192.168.0.2):
session.save_path="tcp://192.168.0.1:11211"
Tipp 2: Wenn Sie Sitzungen mithilfe von Memcache auf zwei Servern teilen möchten UND Failover-Unterstützung haben möchten:
Fügen Sie Ihrer /etc/php.d/memcache.ini
Datei Folgendes hinzu :
memcache.hash_strategy = consistent
memcache.allow_failover = 1
Auf Webserver 1 (IP: 192.168.0.1):
session.save_path="tcp://192.168.0.1:11211, tcp://192.168.0.2:11211"
Auf Webserver 2 (IP: 192.168.0.2):
session.save_path="tcp://192.168.0.1:11211, tcp://192.168.0.2:11211"
Anmerkungen:
- Dies hebt einen weiteren Fehler hervor, den ich in der ursprünglichen Frage gemacht habe - ich habe nicht
session.save_path
auf allen Servern einen identischen verwendet .
- In diesem Fall bedeutet "Failover", dass der PHP-Memcache-Client bei einem Ausfall eines Memcache-Daemons den anderen verwendet. dh jeder, dessen Sitzung im Geschäft fehlgeschlagen ist, wird abgemeldet. Es ist kein transparentes Failover.
Tipp 3: Wenn Sie Sitzungen mit Memcache freigeben UND transparentes Failover unterstützen möchten:
Entspricht Tipp 2, mit der Ausnahme, dass Sie Ihrer /etc/php.d/memcache.ini
Datei Folgendes hinzufügen müssen :
memcache.session_redundancy=2
Anmerkungen:
- Dadurch schreibt der PHP-Memcache-Client die Sitzungen auf 2 Server. Sie erhalten Redundanz (wie RAID-1), sodass Schreibvorgänge an n Spiegel gesendet und fehlgeschlagene
get's
Schreibvorgänge auf den Spiegeln wiederholt werden. Dies bedeutet, dass Benutzer ihre Sitzung nicht verlieren, wenn ein Memcache-Dämon ausfällt.
- Gespiegelte Schreibvorgänge werden parallel ausgeführt (unter Verwendung von nicht blockierendem E / A), sodass die Geschwindigkeitsleistung mit zunehmender Anzahl von Spiegeln nicht stark sinken sollte. Der Netzwerkverkehr nimmt jedoch zu, wenn Ihre Memcache-Spiegel auf verschiedenen Computern verteilt sind. Beispielsweise besteht keine 50% ige Chance mehr, localhost zu verwenden und den Netzwerkzugriff zu vermeiden.
- Anscheinend kann die Verzögerung bei der Schreibreplikation dazu führen, dass alte Daten anstelle eines Cache-Fehlschlags abgerufen werden. Die Frage ist, ob dies für Ihre Bewerbung von Bedeutung ist? Wie oft schreibst du Sitzungsdaten?
memcache.session_redundancy
dient der Sitzungsredundanz, es gibt jedoch auch eine memcache.redundancy
ini-Option, die von Ihrem PHP-Anwendungscode verwendet werden kann, wenn Sie eine andere Redundanzstufe wünschen.
- Sie benötigen eine neuere Version des PHP-Memcache-Clients ( derzeit noch in der Beta ) - die Version 3.0.3 von pecl hat für mich funktioniert.