Während des Crawler-Entwicklungsprozesses sind Sie sicherlich schon einmal in die Situation gekommen, den Crawler auf mehreren Servern bereitstellen zu müssen. Wie gehen Sie derzeit vor? Nacheinander per SSH auf jeden Server zugreifen, den Code mit Git herunterladen und dann ausführen? Der Code wurde geändert. Müssen wir uns also nacheinander bei jedem Server anmelden und ihn nacheinander aktualisieren? Manchmal muss der Crawler nur auf einem Server laufen, manchmal muss er auf 200 Servern laufen. Wie wechselt man schnell? Melden Sie sich nacheinander bei jedem Server an, um ihn ein- und auszuschalten? Oder sei schlau und setze ein veränderbares Flag in Redis, sodass nur der Crawler auf dem Server läuft, der dem Flag entspricht? Crawler A wurde auf allen Servern bereitgestellt. Jetzt haben Sie einen Crawler B erstellt. Müssen Sie sich bei jedem Server einzeln anmelden und ihn erneut bereitstellen? Wenn ja, sollten Sie es bereuen, diesen Artikel nicht früher gelesen zu haben. Nach dem Lesen dieses Artikels können Sie: Stellen Sie in 2 Minuten einen neuen Crawler auf 50 Servern bereit: Docker-Build -t localhost:8003/spider:0.01. Docker Push Localhost:8002/Spider:0.01 Docker-Dienst erstellen --Name Spider --Replicas 50 --Network-Host 45.77.138.242:8003/Spider:0.01 Skalierung von Crawlern von 50 auf 500 Server in 30 Sekunden: Docker-Dienst-Skalierungsspinne = 500 Batch-Herunterfahren von Crawlern auf allen Servern innerhalb von 30 Sekunden: Docker-Dienst-Skalierungsspinne = 0 Batch-Update-Crawler auf allen Maschinen innerhalb von 1 Minute: Docker-Build -t localhost:8003/spider:0.02. Docker Push Localhost:8003/Spider:0.02 Docker-Dienstaktualisierung – Bild 45.77.138.242:8003/Spider:0.02 Spider In diesem Artikel erfahren Sie nicht, wie Sie Docker verwenden. Stellen Sie daher sicher, dass Sie über einige Docker-Grundkenntnisse verfügen, bevor Sie diesen Artikel lesen. Was ist Docker Swarm? Docker Swarm ist ein Clusterverwaltungsmodul, das mit Docker geliefert wird. Es kann Docker-Cluster erstellen und verwalten. Umweltkonstruktion In diesem Artikel werden zur Demonstration drei Ubuntu 18.04-Server verwendet. Die drei Server sind wie folgt angeordnet: Meister: 45.77.138.242 Sklave-1: 199.247.30.74 Sklave-2: 95.179.143.21 Docker Swarm ist ein auf Docker basierendes Modul, daher müssen Sie Docker zunächst auf drei Servern installieren. Nach der Installation von Docker werden alle Vorgänge in Docker abgeschlossen. Installieren Sie Docker auf dem Master Installieren Sie Docker auf dem Masterserver, indem Sie die folgenden Befehle nacheinander ausführen: apt-get-Aktualisierung apt-get install -y apt-transport-https ca-certificates curl software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable" apt-get-Aktualisierung apt-get install -y docker-ce Erstellen eines Managerknotens Ein Docker-Swarm-Cluster erfordert einen Manager-Knoten. Initialisieren Sie nun den Masterserver als Managerknoten des Clusters. Führen Sie den folgenden Befehl aus. Docker-Schwarm-Init Nachdem der Lauf abgeschlossen ist, können Sie die zurückgegebenen Ergebnisse wie in der folgenden Abbildung sehen. In diesem Rückgabeergebnis wird ein Befehl gegeben: Kopieren Sie den Code wie folgt: Docker Swarm beitreten --Token SWMTKN-1-0hqsajb64iynkg8ocp8uruktii5esuo4qiaxmqw2pddnkls9av-dfj7nf1x3vr5qcj4cqiusu4pv 45.77.138.242:2377 Dieser Befehl muss in jedem Slave-Knoten ausgeführt werden. Notieren Sie nun diesen Befehl. Nach Abschluss der Initialisierung erhalten Sie einen Docker-Cluster mit nur einem Server. Führen Sie den folgenden Befehl aus: Docker-Knoten ls Sie können den aktuellen Status des Clusters sehen, wie in der folgenden Abbildung dargestellt. Einen privaten Ursprung erstellen (optional) Das Erstellen eines privaten Ursprungs ist nicht erforderlich. Der Grund, warum eine private Quelle erforderlich ist, besteht darin, dass das Docker-Image des Projekts Firmengeheimnisse enthalten kann und nicht auf eine öffentliche Plattform wie DockerHub hochgeladen werden kann. Wenn Ihr Image öffentlich auf DockerHub hochgeladen werden kann oder Sie bereits über ein privates Image-Repository verfügen, können Sie dieses direkt verwenden und diesen und den nächsten Abschnitt überspringen. Die private Quelle selbst ist ebenfalls ein Docker-Image. Laden Sie es zunächst herunter: Docker-Pull-Registrierung: neueste Wie in der Abbildung unten gezeigt. Starten Sie nun die private Quelle: Kopieren Sie den Code wie folgt: docker run -d -p 8003:5000 --name registry -v /tmp/registry:/tmp/registry docker.io/registry:latest Wie in der Abbildung unten gezeigt. Im Startbefehl wird der offene Port auf Port 8003 eingestellt, daher lautet die Adresse der privaten Quelle: 45.77.138.242:8003 Hinweis: Die auf diese Weise erstellte private Quelle verwendet HTTP und verfügt über keinen Mechanismus zur Berechtigungsüberprüfung. Wenn sie also für das öffentliche Netzwerk geöffnet ist, müssen Sie eine Firewall verwenden, um eine IP-Whitelist zu erstellen und so die Datensicherheit zu gewährleisten. Erlauben Sie Docker, vertrauenswürdige private HTTP-Ursprünge zu verwenden (optional) Wenn Sie den Befehl im vorherigen Abschnitt verwenden, um Ihre eigene private Quelle zu erstellen, müssen Sie Docker so konfigurieren, dass es ihm vertraut, da Docker die Verwendung privater HTTP-Quellen standardmäßig nicht zulässt. Konfigurieren Sie Docker mit dem folgenden Befehl: echo '{ "insecure-registries":["45.77.138.242:8003"] }' >> /etc/docker/daemon.json Starten Sie dann Docker mit dem folgenden Befehl neu. systemctl Neustart Docker Wie in der Abbildung unten gezeigt. Nach Abschluss des Neustarts ist der Manager-Knoten konfiguriert. Erstellen eines Initialisierungsskripts für untergeordnete Knoten Für den Slave-Server müssen nur drei Dinge erledigt werden:
Ab sofort werden alle weiteren Aufgaben von Docker Swarm selbst übernommen und Sie müssen sich nicht mehr per SSH beim Server anmelden. Um den Vorgang zu vereinfachen, können Sie ein Shell-Skript schreiben, um ihn stapelweise auszuführen. Erstellen Sie auf den Servern Slave-1 und Slave-2 eine apt-get-Aktualisierung apt-get install -y apt-transport-https ca-certificates curl software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable" apt-get-Aktualisierung apt-get install -y docker-ce echo '{ "insecure-registries":["45.77.138.242:8003"] }' >> /etc/docker/daemon.json systemctl Neustart Docker Docker Swarm beitreten --Token SWMTKN-1-0hqsajb64iynkg8ocp8uruktii5esuo4qiaxmqw2pddnkls9av-dfj7nf1x3vr5qcj4cqiusu4pv 45.77.138.242:2377 Machen Sie diese Datei verfügbar und führen Sie aus: chmod +x init.sh ./init.sh Wie in der Abbildung unten gezeigt. Nachdem das Skript fertig ist, können Sie sich von SSH auf Slave-1 und Slave-2 abmelden. Ein erneutes Kommen ist in Zukunft nicht mehr erforderlich. Gehen Sie zurück zum Masterserver und führen Sie den folgenden Befehl aus, um zu bestätigen, dass der Cluster jetzt über 3 Knoten verfügt: Docker-Knoten ls Sie können sehen, dass sich jetzt 3 Knoten im Cluster befinden. Wie in der Abbildung unten gezeigt. Der komplizierteste und mühsamste Prozess ist bislang abgeschlossen. Jetzt müssen Sie nur noch den Komfort erleben, den Docker Swarm bietet. Erstellen eines Testprogramms Erstellen und Testen von Redis Da wir den Laufeffekt eines verteilten Crawlers simulieren müssen, verwenden wir zunächst Docker, um einen temporären Redis-Dienst zu erstellen: Führen Sie den folgenden Befehl auf dem Masterserver aus: Kopieren Sie den Code wie folgt: docker run -d --name redis -p 7891:6379 redis --requirepass "KönigsnameISHandSome8877" Dieses Redis verwendet Port Schreiben eines Testprogramms Schreiben Sie ein einfaches Python-Programm: Importzeit Redis importieren Client = redis.Redis(Host='45.77.138.242', Port='7891', Passwort='KingnameISHandSome8877') während True: Daten = Client.lpop('Beispiel:Schwarm:Spinne') wenn keine Daten: brechen print(f'Die Daten, die ich jetzt bekomme, sind: {data.decode()}') Zeit.Schlaf(10) Dieses Python-Programm liest alle 10 Sekunden eine Zahl aus Redis und druckt sie aus. Schreiben einer Docker-Datei Schreiben Sie eine Docker-Datei, um unser eigenes Image basierend auf dem Python 3.6-Image zu erstellen: von python:3.6 Label-Betreuer='[email protected]' Benutzer root ENV PYTHONUNBUFFERED=0 ENV PYTHONIOENCODING=utf-8 Führen Sie „python3 -m pip install redis“ aus. kopiere spider.py spider.py cmd python3 spider.py Erstellen des Images Führen Sie nach dem Schreiben der Docker-Datei den folgenden Befehl aus, um mit dem Erstellen unseres eigenen Images zu beginnen: Docker-Build -t localhost:8003/spider:0.01. Es ist wichtig zu beachten, dass die Bildbenennungsmethode dem Format „ Der gesamte Vorgang ist in der folgenden Abbildung dargestellt. Laden Sie das Bild in ein privates Repository hoch Nachdem das Image erstellt wurde, muss es in eine private Quelle hochgeladen werden. Jetzt müssen Sie den folgenden Befehl ausführen: Docker Push Localhost:8003/Spider:0.01 Wie in der Abbildung unten gezeigt. Jeder sollte sich die Build- und Upload-Befehle merken. Sie müssen diese beiden Befehle künftig jedes Mal verwenden, wenn Sie den Code aktualisieren. Erstellen eines Dienstes Docker Swarm führt die Dienste nacheinander aus. Daher müssen Sie zum Erstellen von Diensten den Befehl „Docker Service“ verwenden. Kopieren Sie den Code wie folgt: Docker-Dienst erstellen --Name Spider --Netzwerkhost 45.77.138.242:8003/Spider:0.01 Dieser Befehl erstellt einen Dienst namens Natürlich können Sie auch mehrere Container gleichzeitig ausführen, indem Sie einen Parameter Kopieren Sie den Code wie folgt: Docker-Dienst erstellen --Name Spider --Replicas 50 --Network-Host 45.77.138.242:8003/Spider:0.01 Der ursprüngliche Code kann jedoch zahlreiche Fehler enthalten. Daher wird empfohlen, ihn zunächst in einem Container auszuführen, die Protokolle zu beobachten und ihn dann zu erweitern, wenn keine Probleme festgestellt werden. Zurück zum Standardfall eines Containers: Dieser Container kann sich derzeit auf jeder der drei Maschinen befinden. Führen Sie den folgenden Befehl aus, um die Funktionsweise dieses Standardcontainers zu beobachten: Docker-Dienst PS Spider Wie in der Abbildung unten gezeigt. Knotenprotokoll anzeigen Anhand der Ausführungsergebnisse in der obigen Abbildung können Sie erkennen, dass die ID des ausgeführten Containers Docker-Dienstprotokolle -f Container-ID Zu diesem Zeitpunkt wird das Protokoll dieses Containers weiterhin verfolgt. Wie in der Abbildung unten gezeigt. Horizontale Skalierung Derzeit gibt es nur einen Server, auf dem ein Container ausgeführt wird. Ich möchte drei Server verwenden, um diesen Crawler auszuführen, daher muss ich nur einen Befehl ausführen: Docker-Dienst-Skalierungsspinne = 3 Der Laufeffekt ist in der folgenden Abbildung dargestellt. Überprüfen Sie an dieser Stelle noch einmal den Laufstatus des Crawlers. Sie können feststellen, dass auf jeder der drei Maschinen ein Container ausgeführt wird. Wie in der Abbildung unten gezeigt. Jetzt melden wir uns bei der Slave-1-Maschine an, um zu sehen, ob dort tatsächlich eine Aufgabe ausgeführt wird. Wie in der Abbildung unten gezeigt. Sie können sehen, dass darauf tatsächlich ein Container läuft. Dies wird automatisch von Docker Swarm zugewiesen. Jetzt verwenden wir den folgenden Befehl, um Docker auf Slave-1 zwangsweise herunterzufahren und sehen uns die Wirkung an. systemctl stoppt Docker Gehen Sie zurück zum Masterserver und überprüfen Sie erneut die Laufwirkung des Crawlers, wie in der folgenden Abbildung gezeigt. Wie Sie sehen, sucht Docker Swarm, nachdem es erkannt hat, dass Slave-1 offline ist, automatisch eine neue Maschine zum Starten der Aufgabe. So wird sichergestellt, dass immer drei Aufgaben ausgeführt werden. In diesem Beispiel startet Docker Swarm automatisch zwei Spider-Container auf der Master-Maschine. Bei ausreichender Maschinenleistung können Sie auf den einzelnen Maschinen sogar noch mehr Container ausführen: Docker-Dienst-Skala Spider = 10 An diesem Punkt werden 10 Container gestartet, um diese Crawler auszuführen. Diese 10 Crawler sind voneinander isoliert. Was ist, wenn Sie alle Crawler stoppen möchten? Ganz einfach, ein Befehl: Docker-Dienst-Skalierungsspinne = 0 Dadurch werden alle Crawler gestoppt. Gleichzeitiges Anzeigen von Protokollen mehrerer Container Was ist, wenn Sie alle Container gleichzeitig sehen möchten? Mit dem folgenden Befehl können Sie die letzten 20 Protokollzeilen für alle Container anzeigen: Kopieren Sie den Code wie folgt: Docker-Dienst-PS-Roboter | grep wird ausgeführt | awk '{print $1}' | xargs -i Docker-Dienstprotokolle --tail 20 {} Auf diese Weise werden die Protokolle der Reihe nach angezeigt. Wie in der Abbildung unten gezeigt. Crawler aktualisieren Wenn Sie Änderungen an Ihrem Code vornehmen. Dann müssen Sie Ihren Crawler aktualisieren. Ändern Sie zuerst den Code, erstellen Sie ihn neu und senden Sie das neue Image erneut an die private Quelle. Wie in der Abbildung unten gezeigt. Als nächstes müssen Sie das Bild im Dienst aktualisieren. Es gibt zwei Möglichkeiten, das Bild zu aktualisieren. Eine Möglichkeit besteht darin, zuerst alle Crawler zu schließen und dann zu aktualisieren. Docker-Dienst-Skalierungsspinne = 0 Docker-Dienstaktualisierung – Bild 45.77.138.242:8003/Spider:0.02 Spider Docker-Dienst-Skalierungsspinne = 3 Die zweite Möglichkeit besteht darin, den Aktualisierungsbefehl direkt auszuführen. Docker-Dienstaktualisierung – Bild 45.77.138.242:8003/Spider:0.02 Spider Der Unterschied zwischen ihnen besteht darin, dass bei der direkten Ausführung des Aktualisierungsbefehls die laufenden Container nacheinander aktualisiert werden. Der Laufeffekt ist in der folgenden Abbildung dargestellt. Mit Docker Swarm können Sie mehr erreichen In diesem Artikel wird ein Beispiel für einen simulierten Crawler verwendet. Natürlich kann jedes Programm, das in Stapeln ausgeführt werden kann, auch mit Docker Swarm ausgeführt werden. Unabhängig davon, ob Sie zur Kommunikation Redis oder Celery verwenden und ob Sie Kommunikation benötigen oder nicht, können Sie Docker Swarm verwenden, solange es in Stapeln ausgeführt werden kann. Im selben Swarm-Cluster können Sie mehrere verschiedene Dienste ausführen, ohne dass sich diese gegenseitig beeinträchtigen. Sie können wirklich einmal einen Docker Swarm-Cluster erstellen und müssen sich dann nie wieder darum kümmern. Alle zukünftigen Vorgänge müssen nur auf dem Server ausgeführt werden, auf dem sich der Manager-Knoten befindet. Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird. Das könnte Sie auch interessieren:
|
<<: Zusammenfassung des JS-Ausführungskontexts und -umfangs
>>: Detaillierte Schritte zur Installation und Konfiguration von MySQL 5.6.21
In diesem Artikel wird der spezifische Code des d...
Nginx verbirgt die Versionsnummer In einer Produk...
Die Wiederverwendung von Code in Vue liefert uns ...
Update: Vor Kurzem wurde festgestellt, dass der S...
Inhaltsverzeichnis js tiefe Kopie Methode der Dat...
MYSQL bietet offiziell eine Installer-Methode zum...
Inhaltsverzeichnis Vue2.x-Nutzung Globale Registr...
Like bedeutet auf Chinesisch „wie“, aber wenn es ...
1. Grundkenntnisse (Methoden von Datumsobjekten) ...
Selektorgruppierung Angenommen, Sie möchten, dass...
Aufgrund der zunehmenden Anzahl von Schaltflächen...
In diesem Artikelbeispiel wird der spezifische Co...
Häufig fehlt das Verständnis für mehrspaltige Ind...
Angesichts der Tatsache, dass mittlerweile viele M...
Vorwort: Nach dem Studium des vorherigen Artikels...