Tutorial zum schnellen Bereitstellen eines Nebula Graph-Clusters mit Docker Swarm

Tutorial zum schnellen Bereitstellen eines Nebula Graph-Clusters mit Docker Swarm

1. Einleitung

In diesem Artikel wird beschrieben, wie Sie mit Docker Swarm einen Nebula Graph-Cluster bereitstellen.

2. Aufbau von Nebelhaufen

2.1 Umweltvorbereitung

Maschinenvorbereitung

IP-Adresse

Speicher (GB)

CPU (Kerne)

192.168.1.166

16

4

192.168.1.167

16

4

192.168.1.168

16

4

Stellen Sie vor der Installation sicher, dass Docker auf allen Computern installiert ist.

2.2 Swarm-Cluster initialisieren

Auf dem Rechner 192.168.1.166 ausführen

$ Docker Swarm init --advertise-addr 192.168.1.166
Swarm initialisiert: Der aktuelle Knoten (dxn1zf6l61qsb1josjja83ngz) ist jetzt ein Manager.
Um diesem Schwarm einen Arbeiter hinzuzufügen, führen Sie den folgenden Befehl aus:
 Docker-Schwarm beitreten \
 --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \
 192.168.1.166:2377
 
Um diesem Swarm einen Manager hinzuzufügen, führen Sie „Docker Swarm Join-Token Manager“ aus und folgen Sie den Anweisungen.

2.3 Einem Worker-Knoten beitreten

Treten Sie gemäß der Init-Eingabeaufforderung dem Swarm-Worker-Knoten bei und führen Sie ihn unter 192.168.1.167 bzw. 192.168.1.168 aus.

Docker-Schwarm beitreten \
 --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \
 192.168.1.166:2377

2.4 Überprüfen des Clusters

Docker-Knoten ls
 
ID HOSTNAME STATUS VERFÜGBARKEIT MANAGER STATUS ENGINE VERSION
h0az2wzqetpwhl9ybu76yxaen * KF2-DATA-166 Bereit Aktiv Erreichbar 18.06.1-ce
q6jripaolxsl7xqv3cmv5pxji KF2-DATA-167 Bereit Aktiver Leiter 18.06.1-ce
h1iql1uvm7123h3gon9so69dy KF2-DATA-168 Bereit Aktiv 18.06.1-ce

2.5 Docker-Stack konfigurieren

vi docker-stack.yml

Konfigurieren Sie Folgendes

 Version: '3.6'
 Leistungen:
  metad0:
  Bild: vesoft/nebula-metad:nightly
  Umgebungsdatei:
   - ./nebula.env
  Befehl:
   – –meta_server_addrs=192.168.1.166:45500,192.168.1.167:45500,192.168.1.168:45500
   – –local_ip=192.168.1.166
  – –ws_ip=192.168.1.166
  – --port=45500
  – –data_path=/Daten/Meta
  – –log_dir=/Protokolle
  - --v=0
  – --minloglevel=2
  einsetzen:
  Replikate: 1
  Neustartrichtlinie:
   Bedingung: bei Fehler
  Platzierung:
  Einschränkungen:
   - node.hostname == KF2-DATA-166
 Gesundheitscheck:
  Test: ["CMD", "curl", "-f", "http://192.168.1.166:11000/status"]
  Intervall: 30s
  Zeitüberschreitung: 10 s
  Wiederholungsversuche: 3
  Startzeitraum: 20 s
 Häfen:
  - Ziel: 11000
   veröffentlicht: 11000
   Protokoll: TCP
  Modus: Host
  - Ziel: 11002
   veröffentlicht: 11002
   Protokoll: TCP
  Modus: Host
  - Ziel: 45500
   veröffentlicht: 45500
  Protokoll: TCP
   Modus: Host
 Bände:
  – data-metad0:/data/meta
  – logs-metad0:/logs
 Netzwerke:
  - Nebel-Netz
 
 metad1:
 Bild: vesoft/nebula-metad:nightly
  Umgebungsdatei:
  - ./nebula.env
 Befehl:
  – –meta_server_addrs=192.168.1.166:45500,192.168.1.167:45500,192.168.1.168:45500
  – –local_ip=192.168.1.167
  – –ws_ip=192.168.1.167
  – --port=45500
  – –data_path=/Daten/Meta
  – –log_dir=/Protokolle
  - --v=0
  – --minloglevel=2
 einsetzen:
  Replikate: 1
  Neustartrichtlinie:
   Bedingung: bei Fehler
  Platzierung:
   Einschränkungen:
   - node.hostname == KF2-DATA-167
  Gesundheitscheck:
  Test: ["CMD", "curl", "-f", "http://192.168.1.167:11000/status"]
  Intervall: 30s
  Zeitüberschreitung: 10 s
  Wiederholungsversuche: 3
 Startzeitraum: 20 s
  Häfen:
  - Ziel: 11000
   veröffentlicht: 11000
  Protokoll: TCP
   Modus: Host
  - Ziel: 11002
   veröffentlicht: 11002
  Protokoll: TCP
   Modus: Host
  - Ziel: 45500
   veröffentlicht: 45500
   Protokoll: TCP
   Modus: Host
 Bände:
  – data-metad1:/Daten/Meta
  – logs-metad1:/logs
 Netzwerke:
  - Nebel-Netz

 metad2:
  Bild: vesoft/nebula-metad:nightly
 Umgebungsdatei:
  - ./nebula.env
 Befehl:
  – –meta_server_addrs=192.168.1.166:45500,192.168.1.167:45500,192.168.1.168:45500
  – –local_ip=192.168.1.168
  – –ws_ip=192.168.1.168
  – --port=45500
  – –data_path=/Daten/Meta
  – –log_dir=/Protokolle
  - --v=0
  – --minloglevel=2
  einsetzen:
  Replikate: 1
  Neustartrichtlinie:
   Bedingung: bei Fehler
  Platzierung:
   Einschränkungen:
   - node.hostname == KF2-DATA-168
  Gesundheitscheck:
  Test: ["CMD", "curl", "-f", "http://192.168.1.168:11000/status"]
  Intervall: 30s
  Zeitüberschreitung: 10 s
  Wiederholungsversuche: 3
  Startzeitraum: 20 s
  Häfen:
  - Ziel: 11000
   veröffentlicht: 11000
   Protokoll: TCP
   Modus: Host
  - Ziel: 11002
   veröffentlicht: 11002
   Protokoll: TCP
   Modus: Host
  - Ziel: 45500
   veröffentlicht: 45500
   Protokoll: TCP
   Modus: Host
  Bände:
  – data-metad2:/Daten/Meta
  – logs-metad2:/logs
  Netzwerke:
  - Nebel-Netz
 
 Speicherd0:
  Bild: vesoft/nebula-storaged:nightly
  Umgebungsdatei:
  - ./nebula.env
  Befehl:
  – –meta_server_addrs=192.168.1.166:45500,192.168.1.167:45500,192.168.1.168:45500
  – –local_ip=192.168.1.166
  – –ws_ip=192.168.1.166
  – --port=44500
  - --data_path=/Daten/Speicher
  – –log_dir=/Protokolle
  - --v=0
  – --minloglevel=2
  einsetzen:
  Replikate: 1
  Neustartrichtlinie:
   Bedingung: bei Fehler
  Platzierung:
   Einschränkungen:
   - node.hostname == KF2-DATA-166
  hängt ab von:
  -metad0
  -metad1
  -metad2
  Gesundheitscheck:
  Test: ["CMD", "curl", "-f", "http://192.168.1.166:12000/status"]
  Intervall: 30s
  Zeitüberschreitung: 10 s
  Wiederholungsversuche: 3
  Startzeitraum: 20 s
  Häfen:
  - Ziel: 12000
   veröffentlicht: 12000
   Protokoll: TCP
   Modus: Host
  - Ziel: 12002
   veröffentlicht: 12002
   Protokoll: TCP
   Modus: Host
  Bände:
  – data-storaged0:/Daten/Speicher
  – logs-storaged0:/logs
  Netzwerke:
  - Nebel-Netz
 Speicherd1:
  Bild: vesoft/nebula-storaged:nightly
  Umgebungsdatei:
  - ./nebula.env
  Befehl:
  – –meta_server_addrs=192.168.1.166:45500,192.168.1.167:45500,192.168.1.168:45500
  – –local_ip=192.168.1.167
  – –ws_ip=192.168.1.167
  – --port=44500
  - --data_path=/Daten/Speicher
  – –log_dir=/Protokolle
  - --v=0
  – --minloglevel=2
  einsetzen:
  Replikate: 1
  Neustartrichtlinie:
   Bedingung: bei Fehler
  Platzierung:
   Einschränkungen:
   - node.hostname == KF2-DATA-167
  hängt ab von:
  -metad0
  -metad1
  -metad2
  Gesundheitscheck:
  Test: ["CMD", "curl", "-f", "http://192.168.1.167:12000/status"]
  Intervall: 30s
  Zeitüberschreitung: 10 s
  Wiederholungsversuche: 3
  Startzeitraum: 20 s
  Häfen:
  - Ziel: 12000
   veröffentlicht: 12000
   Protokoll: TCP
   Modus: Host
  - Ziel: 12002
   veröffentlicht: 12004
   Protokoll: TCP
   Modus: Host
  Bände:
  – data-storaged1:/Daten/Speicher
  – Protokolle gespeichert1:/Protokolle
  Netzwerke:
  - Nebel-Netz
 
 Speicherd2:
  Bild: vesoft/nebula-storaged:nightly
  Umgebungsdatei:
  - ./nebula.env
  Befehl:
  – –meta_server_addrs=192.168.1.166:45500,192.168.1.167:45500,192.168.1.168:45500
  – –local_ip=192.168.1.168
  – –ws_ip=192.168.1.168
  – --port=44500
  – –data_path=/Daten/Speicher
  – –log_dir=/Protokolle
  - --v=0
  – --minloglevel=2
  einsetzen:
  Replikate: 1
  Neustartrichtlinie:
   Bedingung: bei Fehler
  Platzierung:
   Einschränkungen:
   - node.hostname == KF2-DATA-168
  hängt ab von:
  -metad0
  -metad1
  -metad2
  Gesundheitscheck:
  Test: ["CMD", "curl", "-f", "http://192.168.1.168:12000/status"]
  Intervall: 30s
  Zeitüberschreitung: 10 s
  Wiederholungsversuche: 3
  Startzeitraum: 20 s
  Häfen:
  - Ziel: 12000
   veröffentlicht: 12000
   Protokoll: TCP
   Modus: Host
  - Ziel: 12002
   veröffentlicht: 12006
   Protokoll: TCP
   Modus: Host
  Bände:
  – data-storaged2:/Daten/Speicher
  - Protokolle-gespeichert2:/Protokolle
  Netzwerke:
  - Nebel-Netz
 graphd1:
  Bild: vesoft/nebula-graphd:nightly
  Umgebungsdatei:
  - ./nebula.env
  Befehl:
  – –meta_server_addrs=192.168.1.166:45500,192.168.1.167:45500,192.168.1.168:45500
  – --port=3699
  – –ws_ip=192.168.1.166
  – –log_dir=/Protokolle
  - --v=0
  – --minloglevel=2
  einsetzen:
  Replikate: 1
  Neustartrichtlinie:
   Bedingung: bei Fehler
  Platzierung:
   Einschränkungen:
   - node.hostname == KF2-DATA-166
  hängt ab von:
  -metad0
  -metad1
  -metad2
  Gesundheitscheck:
  Test: ["CMD", "curl", "-f", "http://192.168.1.166:13000/status"]
  Intervall: 30s
  Zeitüberschreitung: 10 s
  Wiederholungsversuche: 3
  Startzeitraum: 20 s
  Häfen:
  - Ziel: 3699
   veröffentlicht: 3699
   Protokoll: TCP
   Modus: Host
  - Ziel: 13000
   veröffentlicht: 13000
   Protokoll: TCP
 # Modus: Host
  - Ziel: 13002
   veröffentlicht: 13002
   Protokoll: TCP
   Modus: Host
  Bände:
  - Protokolle-graphd:/Protokolle
  Netzwerke:
  - Nebel-Netz
 
 graphd2:
  Bild: vesoft/nebula-graphd:nightly
  Umgebungsdatei:
  - ./nebula.env
  Befehl:
  – –meta_server_addrs=192.168.1.166:45500,192.168.1.167:45500,192.168.1.168:45500
  – --port=3699
  – –ws_ip=192.168.1.167
  – –log_dir=/Protokolle
  - --v=2
  – --minloglevel=2
  einsetzen:
  Replikate: 1
  Neustartrichtlinie:
   Bedingung: bei Fehler
  Platzierung:
   Einschränkungen:
   - node.hostname == KF2-DATA-167
  hängt ab von:
  -metad0
  -metad1
  -metad2
  Gesundheitscheck:
  Test: ["CMD", "curl", "-f", "http://192.168.1.167:13001/status"]
  Intervall: 30s
  Zeitüberschreitung: 10 s
  Wiederholungsversuche: 3
  Startzeitraum: 20 s
  Häfen:
  - Ziel: 3699
   veröffentlicht: 3640
   Protokoll: TCP
   Modus: Host
  - Ziel: 13000
   veröffentlicht: 13001
   Protokoll: TCP
   Modus: Host
  - Ziel: 13002
   veröffentlicht: 13003
   Protokoll: TCP
 # Modus: Host
  Bände:
  - logs-graphd2:/logs
  Netzwerke:
  - Nebel-Netz
 graphd3:
  Bild: vesoft/nebula-graphd:nightly
  Umgebungsdatei:
  - ./nebula.env
  Befehl:
  – –meta_server_addrs=192.168.1.166:45500,192.168.1.167:45500,192.168.1.168:45500
  – --port=3699
  – –ws_ip=192.168.1.168
  – –log_dir=/Protokolle
  - --v=0
  – --minloglevel=2
  einsetzen:
  Replikate: 1
  Neustartrichtlinie:
   Bedingung: bei Fehler
  Platzierung:
   Einschränkungen:
   - node.hostname == KF2-DATA-168
  hängt ab von:
  -metad0
  -metad1
  -metad2
  Gesundheitscheck:
  Test: ["CMD", "curl", "-f", "http://192.168.1.168:13002/status"]
  Intervall: 30s
  Zeitüberschreitung: 10 s
  Wiederholungsversuche: 3
  Startzeitraum: 20 s
  Häfen:
  - Ziel: 3699
   veröffentlicht: 3641
   Protokoll: TCP
   Modus: Host
  - Ziel: 13000
   veröffentlicht: 13002
   Protokoll: TCP
 # Modus: Host
  - Ziel: 13002
   veröffentlicht: 13004
   Protokoll: TCP
   Modus: Host
  Bände:
  - logs-graphd3:/logs
  Netzwerke:
  - Nebel-Netz
 Netzwerke:
 Nebel-Netz:
  extern: wahr
  anfügbar: wahr
  Name: Gastgeber
 Bände:
 Datenmetad0:
 Protokolle-Metadaten0:
 Datenmetad1:
 Protokollmetadaten1:
 Datenmetad2:
 Protokolle-Metadaten2:
 gespeicherte Daten0:
 Protokolle gespeichert0:
 gespeicherte Daten1:
 gespeicherte Protokolle1:
 gespeicherte Daten2:
 gespeicherte Protokolle2:
 Protokolle-graphd:
 Protokolle-graphd2:
 Protokolle-graphd3:
docker-stack.yml

編輯nebula.env

Fügen Sie den folgenden Inhalt hinzu

 TZ = UTC
USER=root

Nebel.env

2.6 Starten Sie den Nebelhaufen

Docker-Stack stellt Nebula -c docker-stack.yml bereit

3. Cluster-Lastausgleich und Hochverfügbarkeitskonfiguration

Der Nebula Graph-Client verfügt derzeit (1.X) nicht über Funktionen zum Lastenausgleich, sondern wählt nach dem Zufallsprinzip einen Graphd aus, mit dem eine Verbindung hergestellt wird. Daher müssen Sie beim Einsatz in der Produktion den Lastausgleich und die Hochverfügbarkeit selbst durchführen.

Abbildung 3.1

Die gesamte Bereitstellungsarchitektur ist in drei Schichten unterteilt: Datendienstschicht, Lastausgleichsschicht und Hochverfügbarkeitsschicht. Wie in Abbildung 3.1 dargestellt

Lastenausgleichsschicht: gleicht die Clientanforderungen aus und verteilt sie an die darunterliegende Datendienstschicht.

Hochverfügbarkeitsschicht: Diese Schicht implementiert die Hochverfügbarkeit von Haproxy, stellt den Dienst der Lastausgleichsschicht sicher und gewährleistet somit den normalen Dienst des gesamten Clusters.

3.1 Lastenausgleichskonfiguration

Haproxy wird mit Docker-Compose konfiguriert. Bearbeiten Sie die folgenden drei Dateien separat

Dockerfile fügt den folgenden Inhalt hinzu

VON haproxy:1.7
 KOPIEREN Sie haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg
EXPOSE 3640

Docker-Datei

Fügen Sie docker-compose.yml Folgendes hinzu

 Version: "3.2"
 Leistungen:
 Haproxy:
  Containername: Haproxy
  bauen: .
  Bände:
  - ./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg
  Häfen:
  -3640:3640
  Neustart: immer
  Netzwerke:
  - app_net
 Netzwerke:
 app_net:
  extern: wahr

docker-compose.yml

Fügen Sie Folgendes zu haproxy.cfg hinzu

weltweit
  Daemon
  maxconn 30000
  Protokoll 127.0.0.1 local0 info
 Protokoll 127.0.0.1 local1 Warnung

 Vorgabewerte
 Protokollformat %hr\ %ST\ %B\ %Ts
 globales Protokoll
  Modus http
  Option http-keep-alive
  Timeout beim Verbinden: 5000 ms
  Timeout-Client: 10.000 ms
  Timeout-Server 50000ms
  Timeout HTTP-Anfrage 20000ms
 
 # Passen Sie Ihre eigenen Frontends und Backends an und hören Sie sich die Konfiguration an
 #BRAUCH
 
 hören Sie Graphd-Cluster
  binden *:3640
  TCP-Modus
  maxconn 300
  Rundenturnier
  Server Server1 192.168.1.166:3699 Maxconn 300 prüfen
  Server Server2 192.168.1.167:3699 Maxconn 300 prüfen
  Server Server3 192.168.1.168:3699 Maxconn 300 prüfen
 
 Hörstatistiken
  binden *:1080
  Statistikaktualisierung 30 s
  Statistik-URI /Statistiken

3.2 Starten Sie Haproxy

docker-compose up -d

3.2 Hochverfügbarkeitskonfiguration

Hinweis: Um Keepalive zu konfigurieren, müssen Sie im Voraus eine VIP (virtuelle IP) vorbereiten. In der folgenden Konfiguration ist 192.168.1.99 die virtuelle IP.

Nehmen Sie die folgende Konfiguration auf 192.168.1.166, 192.168.1.167 und 192.168.1.168 vor

Installieren Sie Keepalived

apt-get update und apt-get upgrade und apt-get install keepalived -y

Ändern Sie die Keepalived-Konfigurationsdatei /etc/keepalived/keepalived.conf (nehmen Sie auf den drei Maschinen die folgende Konfiguration vor, und die Priorität sollte auf unterschiedliche Werte eingestellt werden, um die Priorität zu bestimmen).

192.168.1.166 Maschinenkonfiguration

 global_defs {
  router_id lb01 #Identifikationsinformationen, nur ein Name;
 }
 vrrp_script chk_haproxy {
  Skript "killall -0 haproxy" Intervall 2
 }
 vrrp_instance VI_1 {
  Zustand MEISTER
  Schnittstelle ens160
  virtuelle_Router_ID 52
  Priorität 999
  # Stellen Sie das Zeitintervall für die Synchronisierungsprüfung zwischen MASTER- und BACKUP-Load Balancer in Sekunden ein advert_int 1
  # Legen Sie den Authentifizierungstyp und die Kennwortauthentifizierung fest {
  # Legen Sie den Authentifizierungstyp fest. Es gibt zwei Haupttypen: PASS und AH auth_type PASS
  # Legen Sie das Authentifizierungskennwort fest. Unter derselben vrrp_instance müssen MASTER und BACKUP dasselbe Kennwort verwenden, um normal kommunizieren zu können. auth_pass amber1
  }
  virtuelle_IP-Adresse {
   # Die virtuelle IP ist 192.168.1.99/24; die gebundene Schnittstelle ist ens160; der Alias ​​ist ens169:1, die primäre und die Backup-Schnittstelle sind gleich 192.168.1.99/24 dev ens160 label ens160:1
  }
  Titel_Skript {
   chk_haproxy
  }
 }

167 Maschinenkonfiguration

 global_defs {
  router_id lb01 #Identifikationsinformationen, nur ein Name;
 }
 vrrp_script chk_haproxy {
  Skript "killall -0 haproxy" Intervall 2
 }
 vrrp_instance VI_1 {
  Status BACKUP
  Schnittstelle ens160
  virtuelle_Router_ID 52
  Priorität 888
  # Stellen Sie das Zeitintervall für die Synchronisierungsprüfung zwischen MASTER- und BACKUP-Load Balancer in Sekunden ein advert_int 1
  # Legen Sie den Authentifizierungstyp und die Kennwortauthentifizierung fest {
  # Legen Sie den Authentifizierungstyp fest. Es gibt zwei Haupttypen: PASS und AH auth_type PASS
  # Legen Sie das Authentifizierungskennwort fest. Unter derselben vrrp_instance müssen MASTER und BACKUP dasselbe Kennwort verwenden, um normal kommunizieren zu können. auth_pass amber1
  }
  virtuelle_IP-Adresse {
   # Die virtuelle IP ist 192.168.1.99/24; die gebundene Schnittstelle ist ens160; der Alias ​​ist ens160:1, die primäre und die Backup-Schnittstelle sind gleich 192.168.1.99/24 dev ens160 label ens160:1
  }
  Titel_Skript {
   chk_haproxy
  }
 }

168 Maschinenkonfiguration

 global_defs {
  router_id lb01 #Identifikationsinformationen, nur ein Name;
 }
 vrrp_script chk_haproxy {
  Skript "killall -0 haproxy" Intervall 2
 }
 vrrp_instance VI_1 {
  Status BACKUP
  Schnittstelle ens160
  virtuelle_Router_ID 52
  Priorität 777
  # Stellen Sie das Zeitintervall für die Synchronisierungsprüfung zwischen MASTER- und BACKUP-Load Balancer in Sekunden ein advert_int 1
  # Legen Sie den Authentifizierungstyp und die Kennwortauthentifizierung fest {
  # Legen Sie den Authentifizierungstyp fest. Es gibt zwei Haupttypen: PASS und AH auth_type PASS
  # Legen Sie das Authentifizierungskennwort fest. Unter derselben vrrp_instance müssen MASTER und BACKUP dasselbe Kennwort verwenden, um normal kommunizieren zu können. auth_pass amber1
  }
  virtuelle_IP-Adresse {
   # Die virtuelle IP ist 192.168.1.99/24; die gebundene Schnittstelle ist ens160; der Alias ​​ist ens160:1, die primäre und die Backup-Schnittstelle sind gleich 192.168.1.99/24 dev ens160 label ens160:1
  }
  Titel_Skript {
   chk_haproxy
  }
 }

Keepalived-bezogene Befehle

# Keepalived starten
systemctl start keepalived
# Aktivieren Sie Keepalived, um beim Booten automatisch zu starten. systemctl enable keeplived
# Keepalived neu starten
systemctl Neustart keepalived

IV. Sonstiges

Wie erfolgt die Offlinebereitstellung? Ändere das Bild einfach in eine private Bildbibliothek. Bei Fragen kannst du uns gerne kontaktieren.

Dies ist das Ende dieses Artikels zum schnellen Bereitstellen eines Nebula Graph-Clusters mit Docker Swarm. Weitere Informationen zum Bereitstellen eines Nebula Graph-Clusters mit Docker finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Nebula Graph löst Geschäftspraktiken zur Risikokontrolle

<<:  MySql-Gruppierung und zufälliges Abrufen eines Datenelements aus jeder Gruppe

>>:  JavaScript zum Erzielen eines einfachen Drag-Effekts

Artikel empfehlen

Zusammenfassung gängiger MySQL-DDL-Operationen

Bibliotheksverwaltung Erstellen einer Bibliothek ...

vue.js lädt Bilder entsprechend der Bild-URL herunter

Als ich kürzlich an einem Frontend-Docking-Funkti...

Ein kurzer Vortrag über JavaScript Sandbox

Vorwort: Apropos Sandboxen: Wir denken vielleicht...

So installieren Sie das ZSH-Terminal in CentOS 7.x

1. Installieren Sie grundlegende Komponenten Führ...

HTTP-Statuscodes

Dieser Statuscode gibt Auskunft über den Status d...

So konfigurieren Sie den Runner-Container in Docker

1. Erstellen Sie einen Runner-Container mk@mk-pc:...

Detaillierte Erklärung von MySQL-Transaktionen und MySQL-Protokollen

Transaktionale Merkmale 1. Atomarität: Nach dem S...

JavaScript implementiert das Topfschlagen-Spiel von Gray Wolf

1. Projektdokumente 2. Verwenden Sie HTML und CSS...

Schritte zum Erstellen eines WEBSERVERS mit NODE.JS

Inhaltsverzeichnis Was ist nodejs Installieren Si...