Keepalived+Nginx+Tomcat zur Erzielung eines hochverfügbaren Webclusters 1. Nginx-Installationsprozess 1. Laden Sie das Nginx-Installationspaket herunter und installieren Sie das abhängige Umgebungspaket (1) Installieren Sie die C ++ - Kompilierungsumgebung yum -y installiere gcc #C++ (2) PCRE installieren yum -y installiere pcre-devel (3) Installieren Sie zlib yum -y installiere zlib-devel (4) Installieren Sie Nginx Suchen Sie den Speicherort der Nginx-Dekomprimierungsdatei und führen Sie den Kompilierungs- und Installationsbefehl aus [root@localhost nginx-1.12.2]# pwd /usr/local/nginx/nginx-1.12.2 [root@localhost nginx-1.12.2]# ./konfigurieren && make && make install (5) Starten Sie Nginx Suchen Sie nach Abschluss der Installation zunächst den Verzeichnisspeicherort, an dem die Installation abgeschlossen ist [root@localhost nginx-1.12.2]# whereis nginx nginx: /usr/local/nginx [root@localhost nginx-1.12.2]# Wechseln Sie in das Nginx-Unterverzeichnis sbin und starten Sie Nginx [root@localhost sbin]# ls nginx [root@localhost sbin]# ./nginx & [1] 5768 [root@localhost sbin] Überprüfen Sie, ob Nginx gestartet ist Oder überprüfen Sie den Nginx-Startstatus über den Prozess [root@localhost sbin]# ps -aux|grep nginx root 5769 0,0 0,0 20484 608 ? Ss 14:03 0:00 nginx: Masterprozess ./nginx niemand 5770 0,0 0,0 23012 1620 ? S 14:03 0:00 nginx: Arbeitsprozess root 5796 0,0 0,0 112668 972 Punkte/0 R+ 14:07 0:00 grep --color=auto nginx [1]+ Abgeschlossen ./nginx [root@localhost sbin] An diesem Punkt ist Nginx erfolgreich installiert und gestartet. (6) Nginx-Schnellstart und Bootkonfiguration Bearbeiten Sie das Nginx-Schnellstartskript [ Achten Sie auf den Nginx-Installationspfad , Sie müssen ihn entsprechend Ihrem eigenen NGINX-Pfad ändern ] [root@localhost init.d]# vim /etc/rc.d/init.d/nginx #!/bin/sh # # nginx - dieses Skript startet und stoppt den nginx-Daemon # # chkconfig: -85 15 # Beschreibung: Nginx ist ein HTTP(S)-Server, HTTP(S) Reverse \ # Proxy und IMAP/POP3-Proxyserver # Prozessname: nginx # Konfiguration: /etc/nginx/nginx.conf # Konfiguration: /usr/local/nginx/conf/nginx.conf # pid-Datei: /usr/local/nginx/logs/nginx.pid # Quellfunktionsbibliothek. . /etc/rc.d/init.d/Funktionen # Quellnetzwerkkonfiguration. . /etc/sysconfig/netzwerk # Überprüfen Sie, ob das Netzwerk aktiv ist. [ "$NETWORKING" = "nein" ] && exit 0 nginx="/usr/local/nginx/sbin/nginx" prog=$(Basisname $nginx) NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf" [ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx lockfile=/var/lock/subsys/nginx make_dirs() { # erforderliche Verzeichnisse erstellen Benutzer=`$nginx -V 2>&1 | grep "Argumente konfigurieren:" | sed 's/[^*]*--Benutzer=\([^ ]*\).*/\1/g' -` wenn [ -z "`grep $user /etc/passwd`" ]; dann useradd -M -s /bin/nologin $user fi Optionen=`$nginx -V 2>&1 | grep 'Argumente konfigurieren:'` für Opt-in $options; tun wenn [ `echo $opt | grep '.*-temp-path'` ]; dann Wert=`echo $opt | cut -d "=" -f 2` wenn [ ! -d "$wert" ]; dann # echo "erstellen" $value mkdir -p $Wert && chown -R $Benutzer $Wert fi fi Erledigt } Start() { [ -x $nginx ] || beenden 5 [ -f $NGINX_CONF_FILE ] || beenden 6 make_dirs echo -n $"$prog wird gestartet: " Daemon $nginx -c $NGINX_CONF_FILE retval=$? Echo [ $retval -eq 0 ] && touch $lockfile Rückgabewert $retval } stoppen() { echo -n $"$prog wird gestoppt: " killproc $prog -QUIT retval=$? Echo [ $retval -eq 0 ] && rm -f $lockfile Rückgabewert $retval } neu starten() { #configtest || return $? stoppen Schlaf 1 Start } neu laden() { #configtest || return $? echo -n $"Lade $prog neu: " killproc $nginx -HUP RETVAL=$? Echo } force_reload() { Neustart } konfigurationtest() { $nginx -t -c $NGINX_CONF_FILE } rh_status() { Status $prog } rh_status_q() { rh_status >/dev/null 2>&1 } Fall "$1" in Start) rh_status_q und beenden 0 1 Dollar ;; stoppen) rh_status_q || beenden 0 1 Dollar ;; Neustart|Konfigurationstest) 1 Dollar ;; neu laden rh_status_q || Ausgang 7 1 Dollar ;; erzwungenes Neuladen erzwingen_neuladen ;; Status) rh_status ;; condrestart|versuchen Sie einen Neustart) rh_status_q || beenden 0 ;; *) echo $"Verwendung: $0 {Start|Stopp|Status|Neustart|Condrestart|Neustartversuch|Neuladen|Neuladen erzwingen|Configtest}" Ausfahrt 2 esac Autorisieren Sie das Startskript und fügen Sie es zum Startskript hinzu. [root@localhost init.d]# chmod -R 777 /etc/rc.d/init.d/nginx [root@localhost init.d]# chkconfig nginx Starten Sie Nginx [root@localhost init.d]# ./nginx start Fügen Sie Nginx zu den Systemumgebungsvariablen hinzu [root@localhost init.d]# echo 'export PATH=$PATH:/usr/local/nginx/sbin' >>/etc/profile && Quelle /etc/profile Nginx-Befehl [service nginx (start|stop|restart)] [root@localhost init.d]# Dienst nginx start Nginx starten (über systemctl): [ OK ] Tipps: Schnellbefehle Dienst nginx (starten|stoppen|neu starten) 2. KeepAlived Installation und Konfiguration 1. Installieren Sie die Keepalived-Abhängigkeitsumgebung yum install -y popt-devel yum install -y ipvsadm yum install -y libnl* yum install -y libnf* yum install -y openssl-devel 2. Keepalived kompilieren und installieren [root@localhost keepalived-1.3.9]# ./konfigurieren [root@localhost keepalived-1.3.9]# make && make install 3. Installieren Sie Keepalive als Systemdienst [root@localhost usw.]# mkdir /etc/keepalived [root@localhost usw.]# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/ Kopieren Sie die Standardkonfigurationsdatei manuell in den Standardpfad [root@localhost usw.]# mkdir /etc/keepalived [root@localhost usw.]# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ [root@localhost usw.]# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/ Erstellen Sie einen Softlink für Keepalived [root@localhost sysconfig]# ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/ Stellen Sie Keepalived so ein, dass es beim Booten automatisch startet [root@localhost sysconfig]# chkconfig keepalived on HINWEIS: Weiterleitungsanforderung an „systemctl enable keepalived.service“. Symlink von /etc/systemd/system/multi-user.target.wants/keepalived.service nach /usr/lib/systemd/system/keepalived.service erstellt. Starten Sie den Keepalived-Dienst [root@localhost keepalived]# keepalived -D -f /etc/keepalived/keepalived.conf Beenden Sie den Keepalived-Dienst [root@localhost keepalived]# killall keepalived 3. Clusterplanung und -aufbau Umweltvorbereitung: CentOS 7.2 Keepalived Version 1.4.0 – 29. Dezember 2017 Nginx-Version: nginx/1.12.2 Tomcat Version:8 Checkliste für die Clusterplanung |
Virtuelle Maschinen | IP | veranschaulichen |
---|---|---|
Keepalived+Nginx1[Meister] | 192.168.43.101 | Nginx Server 01 |
Keeepalived+Nginx[Backup] | 192.168.43.102 | Nginx Server 02 |
Tomcat01 | 192.168.43.103 | Tomcat Web Server01 |
Tomcat02 | 192.168.43.104 | Tomcat Web Server02 |
VIP | 192.168.43.150 | Virtuelle Drift-IP |
1. Ändern Sie die Tomcat-Standard-Willkommensseite, um den Wechsel zum Web zu identifizieren
Ändern Sie die ROOT/index.jsp-Informationen des Knotens TomcatServer01, fügen Sie die Tomcat-IP-Adresse hinzu und fügen Sie den Nginx-Wert hinzu, d. h. ändern Sie die Informationen des Knotens 192.168.43.103 wie folgt:
<div id="asf-box"> <h1>${pageContext.servletContext.serverInfo}(192.168.224.103)<%=request.getHeader("X-NGINX")%></h1> </div>
Ändern Sie die ROOT/index.jsp-Informationen des Knotens TomcatServer02, fügen Sie die Tomcat-IP-Adresse hinzu und fügen Sie den Nginx-Wert hinzu, d. h. ändern Sie die Informationen des Knotens 192.168.43.104 wie folgt:
<div id="asf-box"> <h1>${pageContext.servletContext.serverInfo}(192.168.224.104)<%=request.getHeader("X-NGINX")%></h1> </div>
2. Starten Sie den Tomcat-Dienst und überprüfen Sie die IP-Informationen des Tomcat-Dienstes. Zu diesem Zeitpunkt ist Nginx nicht gestartet, daher enthält der Anforderungsheader keine Nginx-Informationen.
3. Konfigurieren Sie die Nginx-Proxy-Informationen
1. Konfigurieren Sie die Proxy-Informationen des Masterknotens [192.168.43.101]
Upstream-Tomcat { Server 192.168.43.103:8080 Gewicht=1; Server 192.168.43.104:8080 Gewicht=1; } Server{ Standort / { Proxy-Passwort http://Tomcat; Proxy_Set_Header X-NGINX "NGINX-1"; } #......Andere ausgelassen}
2. Konfigurieren Sie die Proxy-Informationen des Backup-Knotens [192.168.43.102]
Upstream-Tomcat { Server 192.168.43.103:8080 Gewicht=1; Server 192.168.43.104:8080 Gewicht=1; } Server{ Standort / { Proxy-Passwort http://Tomcat; Proxy_Set_Header X-NGINX "NGINX-2"; } #......Andere ausgelassen}
3. Starten Sie den Nginx-Dienst des Masterknotens
[root@localhost init.d]# Dienst nginx start Nginx starten (über systemctl): [ OK ]
Wenn Sie zu diesem Zeitpunkt 192.168.43.101 besuchen, können Sie sehen, dass die Tcomat-Knoten 103 und 104 abwechselnd angezeigt werden, was darauf hinweist, dass der Nginx-Dienst die Anforderung an zwei Tomcats geladen hat.
4. Konfigurieren Sie auf ähnliche Weise die Backup-Informationen [192.168.43.102] von Nginx. Besuchen Sie nach dem Starten von Nginx 192.168.43.102 und Sie können sehen, dass der Backup-Knoten eine Laderolle gespielt hat.
4. Konfigurieren Sie die Keepalived-Skriptinformationen
1. Fügen Sie die Datei check_nginx.sh zum Verzeichnis /etc/keepalived auf den Master- und Slave-Knoten hinzu, um den Inventarstatus von Nginx zu ermitteln, und fügen Sie die Datei keepalived.conf hinzu
Die Dateiinformationen von check_nginx.sh lauten wie folgt:
#!/bin/bash #Zeitvariable, wird zum Aufzeichnen von Protokollen verwendet d=`date --date today +%Y%m%d_%H:%M:%S` # Berechnen Sie die Anzahl der Nginx-Prozesse n=`ps -C nginx --no-heading|wc -l` #Wenn der Prozess 0 ist, starten Sie nginx und überprüfen Sie die Anzahl der nginx-Prozesse erneut. #Wenn es immer noch 0 ist, bedeutet dies, dass Nginx nicht gestartet werden kann und Sie Keepalived deaktivieren müssen wenn [ $n -eq "0" ]; dann /etc/rc.d/init.d/nginx starten n2=`ps -C nginx --no-heading|wc -l` wenn [ $n2 -eq "0" ]; dann echo "$d nginx down, keepalived wird gestoppt" >> /var/log/check_ng.log systemctl stop keepalived fi fi
Autorisieren Sie nach dem Hinzufügen die Datei check_nginx.sh, damit das Skript Ausführungsberechtigungen erhalten kann.
[root@localhost keepalived]# chmod -R 777 /etc/keepalived/check_nginx.sh
2. Fügen Sie die Datei keepalived.conf im Verzeichnis /etc/keepalived des Masterknotens hinzu. Die spezifischen Informationen lauten wie folgt:
vrrp_script chk_nginx { Skript "/etc/keepalived/check_nginx.sh" //Skriptintervall 2 zum Erkennen des Nginx-Prozesses Gewicht -20 } global_defs { Benachrichtigungs-E-Mail { //Sie können E-Mail-Erinnerungen hinzufügen} } vrrp_instance VI_1 { state MASTER #Zeigt den Status MASTER und die Backup-Maschine ist BACKUP Schnittstelle ens33 #Legen Sie die an die Instanz gebundene Netzwerkkarte fest (überprüfen Sie die IP-Adresse, die Bindung muss entsprechend der persönlichen Netzwerkkarte erfolgen). virtual_router_id 51 #Die virtual_router_id muss in derselben Instanz dieselbe sein mcast_src_ip 192.168.43.101 Priorität 250 #MASTER hat eine höhere Priorität als BACKUP, zum Beispiel ist BACKUP 240 advert_int 1 #Zeitintervall zwischen Synchronisierungsprüfungen zwischen MASTER- und BACKUP-Load Balancern, in Sekunden nopreempt #Nicht-präemptiver Modus authentication { #Authentifizierung festlegen auth_type PASS #Authentifizierungsmethode für Master-Slave-Server auth_pass 123456 } Titel_Skript { check_nginx } virtual_ipaddress { #VIP festlegen 192.168.43.150 #Sie können mehrere virtuelle IPs haben, umbrechen Sie einfach die Zeile} }
3. Fügen Sie die Konfigurationsdatei keepalived.conf im Verzeichnis etc/keepalived des Backup-Knotens hinzu
Die Informationen lauten wie folgt:
vrrp_script chk_nginx { Skript "/etc/keepalived/check_nginx.sh" //Skriptintervall 2 zum Erkennen des Nginx-Prozesses Gewicht -20 } global_defs { Benachrichtigungs-E-Mail { //Sie können E-Mail-Erinnerungen hinzufügen} } vrrp_instance VI_1 { Status BACKUP #Zeigt an, dass der Status MASTER ist und die Backup-Maschine BACKUP ist Schnittstelle ens33 #Legen Sie die an die Instanz gebundene Netzwerkkarte fest (Anzeige nach IP-Adresse) virtual_router_id 51 #Die virtual_router_id muss in derselben Instanz dieselbe sein mcast_src_ip 192.168.43.102 Priorität 240 #MASTER hat eine höhere Priorität als BACKUP. Beispielsweise hat BACKUP die Priorität 240. advert_int 1 #Zeitintervall zwischen Synchronisierungsprüfungen zwischen MASTER- und BACKUP-Load Balancern, in Sekunden nopreempt #Nicht-präemptiver Modus authentication { #Authentifizierung festlegen auth_type PASS #Authentifizierungsmethode für Master-Slave-Server auth_pass 123456 } Titel_Skript { check_nginx } virtual_ipaddress { #VIP festlegen 192.168.43.150 #Sie können mehrere virtuelle IPs haben, umbrechen Sie einfach die Zeile} }
Tipps: Einige Hinweise zu Konfigurationsinformationen
5. Überprüfung der Hochverfügbarkeit (HA) des Clusters
Schritt 1 Starten Sie die Keepalived- und Nginx-Dienste auf dem Master-Rechner
[root@localhost keepalived]# keepalived -D -f /etc/keepalived/keepalived.conf [root@localhost keepalived]# Dienst nginx starten
Dienststartprozess anzeigen
[root@localhost keepalived]# ps -aux|grep nginx root 6390 0,0 0,0 20484 612 ? Ss 19:13 0:00 nginx: Masterprozess /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf niemand 6392 0,0 0,0 23008 1628 ? S 19:13 0:00 nginx: Arbeitsprozess root 6978 0,0 0,0 112672 968 Punkte/0 S+ 20:08 0:00 grep --color=auto nginx
Anzeigen des Keepalived-Startvorgangs
[root@localhost keepalived]# ps -aux|grep keepalived root 6402 0,0 0,0 45920 1016 ? Ss 19:13 0:00 keepalived -D -f /etc/keepalived/keepalived.conf root 6403 0,0 0,0 48044 1468 ? S 19:13 0:00 keepalived -D -f /etc/keepalived/keepalived.conf root 6404 0,0 0,0 50128 1780 ? S 19:13 0:00 keepalived -D -f /etc/keepalived/keepalived.conf root 7004 0,0 0,0 112672 976 Punkte/0 S+ 20:10 0:00 grep --color=auto keepalived
Verwenden Sie ip add, um den Status der virtuellen IP-Bindung zu überprüfen. Wenn die Knoteninformation 192.168.43.150 angezeigt wird, ist sie an den Masterknoten gebunden.
[root@localhost keepalived]# IP hinzufügen 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue status UNBEKANNT qlen 1 Link/Loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 Bereich Host lo valid_lft für immer preferred_lft für immer inet6 ::1/128 Bereich Host valid_lft für immer preferred_lft für immer 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast Status UP qlen 1000 Link/Ether 00:0c:29:91:bf:59 brd ff:ff:ff:ff:ff:ff:ff inet 192.168.43.101/24 brd 192.168.43.255 Bereich global ens33 valid_lft für immer preferred_lft für immer inet 192.168.43.150/32 Bereich global ens33 valid_lft für immer preferred_lft für immer inet6 fe80::9abb:4544:f6db:8255/64 Bereichslink valid_lft für immer preferred_lft für immer inet6 fe80::b0b3:d0ca:7382:2779/64 Bereichslink vorläufig dadfailed valid_lft für immer preferred_lft für immer inet6 fe80::314f:5fe7:4e4b:64ed/64 Bereichslink vorläufig dadfailed valid_lft für immer preferred_lft für immer 3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue status DOWN qlen 1000 Link/Ether 52:54:00:2b:74:aa brd ff:ff:ff:ff:ff:ff:ff inet 192.168.122.1/24 brd 192.168.122.255 Bereich global virbr0 valid_lft für immer preferred_lft für immer 4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast Master virbr0 Status DOWN qlen 1000 Link/Ether 52:54:00:2b:74:aa brd ff:ff:ff:ff:ff:ff:ff
Schritt 2 Starten Sie den Nginx-Dienst und den Keepalived-Dienst auf dem Backup-Knoten und überprüfen Sie den Startstatus des Dienstes. Wenn auf dem Backup-Knoten eine virtuelle IP angezeigt wird, liegt ein Problem mit der Keepalived-Konfigurationsdatei vor. Diese Situation wird als Split-Brain bezeichnet.
[root@localhost keepalived]# löschen [root@localhost keepalived]# IP hinzufügen 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue status UNBEKANNT qlen 1 Link/Loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 Bereich Host lo valid_lft für immer preferred_lft für immer inet6 ::1/128 Bereich Host valid_lft für immer preferred_lft für immer 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast Status UP qlen 1000 Link/Ether 00:0c:29:14:df:79 brd ff:ff:ff:ff:ff:ff:ff inet 192.168.43.102/24 brd 192.168.43.255 Bereich global ens33 valid_lft für immer preferred_lft für immer inet6 fe80::314f:5fe7:4e4b:64ed/64 Bereichslink valid_lft für immer preferred_lft für immer 3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue status DOWN qlen 1000 Link/Ether 52:54:00:2b:74:aa brd ff:ff:ff:ff:ff:ff:ff inet 192.168.122.1/24 brd 192.168.122.255 Bereich global virbr0 valid_lft für immer preferred_lft für immer 4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast Master virbr0 Status DOWN qlen 1000 Link/Ether 52:54:00:2b:74:aa brd ff:ff:ff:ff:ff:ff:ff
Schritt 3 Überprüfen Sie den Dienst
Durchsuchen Sie die Adresse und erzwingen Sie mehrmals eine Aktualisierung: http://192.168.43.150. Sie können sehen, dass 103 und 104 mehrmals abwechselnd angezeigt werden und Nginx-1 angezeigt wird, was darauf hinweist, dass der Masterknoten den Webdienst weiterleitet.
Schritt 4 Schließen Sie den Master-Keepalive-Dienst und den Nginx-Dienst und greifen Sie auf den Webdienst zu, um den Status der Dienstübertragung zu beobachten
[root@localhost keepalived]# killall keepalived [root@localhost keepalived]# Dienst nginx stoppen
Aktualisieren Sie zu diesem Zeitpunkt 192.168.43.150 zwangsweise und stellen Sie fest, dass die Seite abwechselnd 103 und 104 anzeigt und Nginx-2 anzeigt. Der VIP wurde auf 192.168.43.102 übertragen, was beweist, dass der Dienst automatisch zum Sicherungsknoten wechselt.
Schritt 5 Starten Sie den Master Keepalived-Dienst und den Nginx-Dienst
Zu diesem Zeitpunkt haben wir erneut überprüft, dass der VIP vom Master zurückerobert wurde, und die Seite zeigt abwechselnd 103 und 104 an. Zu diesem Zeitpunkt wird Nginx-1 angezeigt.
4. Präemptiver und nicht präemptiver Keepalived-Modus
Der HA von Keepalived ist in einen präemptiven und einen nicht präemptiven Modus unterteilt. Im präemptiven Modus wird der MASTER nach der Wiederherstellung nach einem Fehler den VIP vom BACKUP-Knoten präemptiv entfernen. Der nicht präemptive Modus bedeutet, dass nach der Wiederherstellung des MASTER der VIP nach dem Upgrade des BACKUP auf den MASTER nicht präemptiv wird.
Konfiguration des nicht präemptiven Modus:
1> Die Anweisung nopreempt wurde zu jedem der beiden Knoten unter dem Block vrrp_instance hinzugefügt, um anzuzeigen, dass kein VIP-Wettbewerb erforderlich ist
2> Der Status der Knoten ist BACKUP. Nachdem beide Keepalived-Knoten gestartet wurden, befinden sie sich standardmäßig im BACKUP-Status. Nach dem Senden der Multicast-Informationen wählen beide Parteien basierend auf der Priorität einen MASTER aus. Da für beide „nopreempt“ konfiguriert ist, wird der MASTER den VIP nach der Wiederherstellung nach einem Fehler nicht vorzeitig beenden. Dadurch werden Serviceverzögerungen vermieden, die durch den VIP-Wechsel entstehen können.
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.
<<: Erläuterung der Faktoren, die die Datenbankleistung in MySQL beeinflussen
>>: So installieren Sie MySQL Community Server 5.6.39
Inhaltsverzeichnis Datenvolumen Anonyme und benan...
1. Überprüfen Sie die MySQL-Datenbankkodierung my...
In diesem Artikel wird die Methode zum manuellen ...
Einführung in das Schlüsselwort void Zunächst ein...
Vuex ist ein speziell für Vue.js-Anwendungen entw...
In diesem Artikel werden Docker Container (orches...
Nach der Dekomprimierung der grünen Version von m...
VMware vSphere ist die branchenführende und zuver...
Umfeld: MAC_OS 10.12 Python 3.6 MySQL 5.7.25 Djan...
In diesem Artikel wird der spezifische Code von V...
In diesem Artikel werden die Installations- und K...
Inhaltsverzeichnis 1 Konfiguration der Java-Umgeb...
1. Konvertierung des Übermittlungsformats für die...
DIV+CSS-Struktur Lernen Sie CSS-Layout? Sie beherr...
1. Mehrere Aufrufe eines einzelnen Pfeils Sobald ...