


Lösen Sie das Sitzungsfreigabeproblem des Nginx-Lastausgleichs
Ich habe einige Informationen überprüft und einige von anderen geschriebene Dokumente gelesen. Die Zusammenfassung lautet wie folgt, um die gemeinsame Nutzung von Nginx-Sitzungen zu realisieren.
Es gibt mehrere PHP-Server und Nginx wird für den Lastausgleich verwendet Dieselbe IP kann auf dieselbe Seite zugreifen. Wenn die Sitzung nicht synchronisiert ist, treten viele Probleme auf, z. B. der häufigste Anmeldestatus. Hier gibt es mehrere Möglichkeiten, das Problem der Sitzungsfreigabe zu lösen >
1. Verwenden Sie anstelle der Sitzung ein Cookie Die Sitzung wird auf der Serverseite gespeichert, und das Cookie wird auf der Clientseite gespeichert. Wir können die durch den Zugriff des Benutzers auf die Seite generierte Sitzung ablegen das Cookie, welches das Cookie als Übergabestation nutzen soll. Sie besuchen Webserver A, generieren eine Sitzung und legen sie in einem Cookie ab. Wenn Ihre Anfrage Server B zugewiesen wird, stellt Server B zunächst fest, ob der Server über die Sitzung verfügt. Wenn nicht, überprüft er das Cookie des Clients Eine solche Sitzung bedeutet, dass die Sitzung tatsächlich nicht vorhanden ist. Wenn eine Sitzung im Cookie vorhanden ist, synchronisieren Sie die Sitzung im Cookie mit Server B, damit die Sitzung synchronisiert werden kann. Hinweis: Diese Methode ist einfach und bequem zu implementieren und erhöht die Belastung der Datenbank nicht. Wenn der Client jedoch Cookies deaktiviert, wird die Sitzung nicht synchronisiert, was zu Problemen auf der Website führt. Verlust; die Sicherheit von Cookies ist nicht hoch, obwohl sie verschlüsselt wurden, können sie dennoch gefälscht werden. 2. Die Sitzung wird in der Datenbank gespeichert (MySQL usw.) PHP kann so konfiguriert werden, dass die Sitzung in der Datenbank gespeichert wird mit anderen Datenbanktabellen Wenn MySQL ebenfalls geclustert ist, muss jeder MySQL-Knoten über diese Tabelle verfügen und die Datentabelle dieser Sitzungstabelle muss in Echtzeit synchronisiert werden. Hinweis: Die Verwendung einer Datenbank zum Synchronisieren von Sitzungen erhöht die E/A der Datenbank und erhöht die Belastung der Datenbank. Darüber hinaus ist die Lese- und Schreibgeschwindigkeit der Datenbank langsam, was einer zeitnahen Synchronisierung von Sitzungen nicht förderlich ist. 3. Die Sitzung wird in Memcache oder Redis gespeichert. Die Speichermethode ist in der PHP-Konfigurationsdatei auf Memcache eingestellt, sodass PHP selbst einen Sitzungscluster erstellt Speichern Sie die Sitzungsdaten im Memcache. Hinweis: Die Synchronisierung der Sitzung auf diese Weise erhöht die Belastung der Datenbank nicht und die Sicherheit wird im Vergleich zur Verwendung von Cookies erheblich verbessert. Das Speichern der Sitzung im Speicher erfolgt viel schneller als das Lesen aus der Datei. Allerdings unterteilt Memcache den Speicher in Speicherblöcke mit vielen Spezifikationen, und jeder Block hat seine eigene Größe. Diese Methode bestimmt auch, dass Memcache den Speicher nicht vollständig nutzen kann und zu einer Speicherfragmentierung führt . 4. Die ip_hash-Technologie in nginx kann die Anforderung einer bestimmten IP an dasselbe Backend weiterleiten, sodass ein bestimmter Client und ein bestimmtes Backend unter dieser IP eine stabile Sitzung aufbauen können. ip_hash wird im Upstream definiert Konfiguration:- stream nginx.example.com
- { server 192.168.74.235:80;
- server 192.168.74.236:80;
- ip_hash;
- }
- Server
- {
- listen 8 0;
- Standort /
- {
- Proxy _pass
- http ://nginx.example.com
- }
- }
- ip_hash ist einfach Verständlich, aber weil nur der IP-Faktor zur Zuweisung von Backends verwendet werden kann, ip_hash ist defekt und kann in manchen Situationen nicht verwendet werden: 1.nginx ist nicht der Front-End-Server.
2. Das Backend von Nginx verfügt auch über andere Methoden zum Lastausgleich.
Wenn im Nginx-Backend ein anderer Lastausgleich stattfindet und die Anfragen auf andere Weise umgeleitet werden, dann wird eine Anfrage eines bestimmten Clients definitiv nicht auf demselben Sitzungsanwendungsserver liegen. Bei dieser Berechnung kann das Nginx-Backend nur direkt auf den Anwendungsserver verweisen oder einen Squid erstellen und dann auf den Anwendungsserver verweisen. Der beste Weg besteht darin, den Standort als Umleitung zu nutzen, einige Anfragen, die eine Sitzung erfordern, über ip_hash umzuleiten und für den Rest zu anderen Backends zu gehen.
5. upstream_hash
Um einige Probleme von ip_hash zu lösen, können Sie das Modul upstream_hash eines Drittanbieters verwenden. Dieses Modul wird in den meisten Fällen als url_hash verwendet, verhindert jedoch nicht die Verwendung für die Sitzungsfreigabe. Ich habe es nicht ausprobiert und verstehe es wirklich nicht
Ergänzung: Eine kurze Einführung in Memcached
1. Konzept
Memcached ist ein von Danga entwickeltes Set. com (das technische Team, das LiveJournal betreibt) Verteiltes Speicherobjekt-Caching-System, das zur Reduzierung der Datenbanklast und zur Verbesserung der Leistung in dynamischen Systemen verwendet wird.
2. Anwendbare Anlässe
1. Da Memcached selbst auf einem verteilten System basiert, eignet es sich besonders für große verteilte Systeme.
2. Datenbank-Frontend-Cache. Datenbanken sind oft der Flaschenhals von Website-Systemen. Große gleichzeitige Zugriffe auf die Datenbank führen häufig zu einem Überlauf des Website-Speichers. Natürlich können wir auch den Caching-Mechanismus von Hibernate nutzen. Memcached basiert jedoch auf der Verteilung und kann unabhängig von der Website-Anwendung selbst sein, sodass es für große Websites besser geeignet ist, Anwendungen aufzuteilen.
3. Datenaustausch zwischen Servern. Beispielsweise teilen wir das Anmeldesystem und das Abfragesystem der Website in zwei Anwendungen auf, platzieren sie auf verschiedenen Servern und gruppieren sie. Wie werden dann die Anmeldeinformationen vom Anmeldesystemserver mit dem Abfragesystem synchronisiert, nachdem sich der Benutzer angemeldet hat? Server? Wolltuch? Zu diesem Zeitpunkt können wir memcached verwenden. Das Anmeldesystem speichert die Anmeldeinformationen zwischen, und das Abfragesystem kann die Anmeldeinformationen abrufen, genau wie beim Abrufen lokaler Informationen.
3. Unzutreffende Anlässe
Für Anwendungen, die keine „Verteilung“ erfordern, keine gemeinsame Nutzung erfordern oder einfach klein genug sind, um nur einen Server zu haben, bringt Memcached keine Vorteile im Gegenteil, es wird die Systemeffizienz verlangsamen, da die Netzwerkverbindung auch Ressourcen erfordert
Lösung: Verwenden Sie Memcached als Sitzungsspeicher und der Memcached-Server ist auf demselben Linux-Host wie Nginx eingestellt.
Lösungsprozess,
Die Host-IPs der beiden Apache sind 192.168.74.235192.168.74.236
Die Nginx-Host-IP ist 192.168.74.131
Memcached Die IP des Hosts lautet 192.168.74.131
Installieren Sie Memcached unter 192.168.74.131 und starten Sie
Nehmen Sie als Beispiel 192.168.74.236, installieren Sie PHP und die PHP-Abhängigkeitsbibliothek auf Memcached yuminstall memcached -devel .i686 libmemcached-devel.i686 php-pecl-memcache.i686
php.ini konfigurieren
session.save_handler= memcache
session.save_path= "tcp: // 192.168.74.131:11211"
Oder (die folgenden beiden wurden nicht ausprobiert)
1. .htaccess in einem bestimmten Verzeichnis:
php_value session.save_handler " memcache“
php_value session.save_path „tcp://IP:11211“
2. In einer bestimmten Anwendung:
ini_set("session.save_handler", "memcache");
ini_set("session.save_path", "tcp://IP:11211");
Kommentieren Sie gleichzeitig Folgendes aus:session.save_path= "/var/lib /php/session“
Gleichzeitig öffnen Sie extension=memcache.so
Starten Sie Apache neu und überprüfen Sie die „Registrierten Speicherhandler“ in phpinfo. Diese drei werden „files usermemcache“ sein Wenn dies der Fall ist, beweisen Sie, dass sie installiert sind > # Item_Size Max_age Pages Count Full? Evicted Evict_Time OOM
Fügen Sie die folgende PHP-Datei auf dem 236-Computer hinzu
session_start();
if (!isset($_SESSION['TEST'])) {
$_SESSION['TEST'] = time();
}
$_SESSION ['TEST3'] = time();
print $_SESSION['TEST'];
print "
";
print $_SESSION['TEST3'];
print "
";
print session_id();
?>
Gehen Sie dann zum Memcached-Server und führen Sie
[root@Git ~]# memcached-tool127.0.0.1:11211
# Item_Size Max_age Pages Count Full? Evicted Evict_Time OOM
1 80B 0s 1 0 Dies sollte es Ihnen ermöglichen, die Sitzung auf den zwischengespeicherten Server zu schreiben. Zusammenfassend:1. Firewall-Probleme, viele Fehler beim Herstellen einer Verbindung zu LAN-Servern werden durch Firewalls verursacht.
2. Die Abhängigkeiten sind nicht installiert und Memcached schlägt immer zu Beginn fehl, weil ich keine Erweiterungsbibliothek wie PHP installiert habe -memcached
Das Obige stellt vor, wie das Sitzungsfreigabeproblem des Nginx-Lastausgleichs gelöst werden kann, einschließlich des Inhalts. Ich hoffe, dass es für Freunde hilfreich ist, die sich für PHP-Tutorials interessieren.

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



MySQL ist für Anfänger geeignet, da es einfach zu installieren, leistungsfähig und einfach zu verwalten ist. 1. Einfache Installation und Konfiguration, geeignet für eine Vielzahl von Betriebssystemen. 2. Unterstützung grundlegender Vorgänge wie Erstellen von Datenbanken und Tabellen, Einfügen, Abfragen, Aktualisieren und Löschen von Daten. 3. Bereitstellung fortgeschrittener Funktionen wie Join Operations und Unterabfragen. 4. Die Leistung kann durch Indexierung, Abfrageoptimierung und Tabellenpartitionierung verbessert werden. 5. Backup-, Wiederherstellungs- und Sicherheitsmaßnahmen unterstützen, um die Datensicherheit und -konsistenz zu gewährleisten.

Navicat selbst speichert das Datenbankkennwort nicht und kann das verschlüsselte Passwort nur abrufen. Lösung: 1. Überprüfen Sie den Passwort -Manager. 2. Überprüfen Sie Navicats "Messnot Password" -Funktion; 3.. Setzen Sie das Datenbankkennwort zurück; 4. Kontaktieren Sie den Datenbankadministrator.

Erstellen Sie eine Datenbank mit Navicat Premium: Stellen Sie eine Verbindung zum Datenbankserver her und geben Sie die Verbindungsparameter ein. Klicken Sie mit der rechten Maustaste auf den Server und wählen Sie Datenbank erstellen. Geben Sie den Namen der neuen Datenbank und den angegebenen Zeichensatz und die angegebene Kollektion ein. Stellen Sie eine Verbindung zur neuen Datenbank her und erstellen Sie die Tabelle im Objektbrowser. Klicken Sie mit der rechten Maustaste auf die Tabelle und wählen Sie Daten einfügen, um die Daten einzufügen.

MySQL ist ein Open Source Relational Database Management System. 1) Datenbank und Tabellen erstellen: Verwenden Sie die Befehle erstellte und creatEtable. 2) Grundlegende Vorgänge: Einfügen, aktualisieren, löschen und auswählen. 3) Fortgeschrittene Operationen: Join-, Unterabfrage- und Transaktionsverarbeitung. 4) Debugging -Fähigkeiten: Syntax, Datentyp und Berechtigungen überprüfen. 5) Optimierungsvorschläge: Verwenden Sie Indizes, vermeiden Sie ausgewählt* und verwenden Sie Transaktionen.

Häufige Gründe, warum Navicat keine Verbindung zur Datenbank und ihren Lösungen herstellen kann: 1. Überprüfen Sie den laufenden Status des Servers. 2. Überprüfen Sie die Verbindungsinformationen; 3. Passen Sie die Firewall -Einstellungen ein; 4. Konfigurieren Sie den Remote -Zugriff; 5. Fehlerbehebung mit Netzwerkproblemen; 6. Berechtigungen überprüfen; 7. Sicherheitskompatibilität sicherstellen; 8. Fehlerbehebung bei anderen Möglichkeiten.

Schritte zur Durchführung von SQL in Navicat: Verbindung zur Datenbank herstellen. Erstellen Sie ein SQL -Editorfenster. Schreiben Sie SQL -Abfragen oder Skripte. Klicken Sie auf die Schaltfläche Ausführen, um eine Abfrage oder ein Skript auszuführen. Zeigen Sie die Ergebnisse an (wenn die Abfrage ausgeführt wird).

Sie können eine neue MySQL -Verbindung in Navicat erstellen, indem Sie den Schritten folgen: Öffnen Sie die Anwendung und wählen Sie eine neue Verbindung (Strg N). Wählen Sie "MySQL" als Verbindungstyp. Geben Sie die Hostname/IP -Adresse, den Port, den Benutzernamen und das Passwort ein. (Optional) Konfigurieren Sie erweiterte Optionen. Speichern Sie die Verbindung und geben Sie den Verbindungsnamen ein.

不同数据库系统添加列的语法为 : MySQL : Alter table table_name add column_name data_type; postgresql : Alter table table_name add column_name data_type; oracle : Alter table table table table_name add add (column_name data_type);
