1. Komponenten und implementierte FunktionenKeepalived: realisiert eine hohe Verfügbarkeit des Haproxy-Dienstes und übernimmt die Dual-Active-Modellkonfiguration; Haproxy: implementiert Lastausgleich und Lese-/Schreibtrennung für Nginx; Nginx: realisiert die Hochgeschwindigkeitsverarbeitung von HTTP-Anfragen; 2. Architektur-Design-Diagramm3. Keepalived-BereitstellungKeepalived muss auf beiden Knoten installiert werden. Der Befehl lautet wie folgt: $ yum -y installiere Keepalived Ändern Sie die Konfiguration der Datei keepalived.conf auf dem Knoten 172.16.25.109. Der Befehl lautet wie folgt $ vim /etc/keepalived/keepalived.conf Der geänderte Inhalt lautet wie folgt: ! Konfigurationsdatei für Keepalived global_defs { Benachrichtigungs-E-Mail { root@localhost } Benachrichtigungs-E-Mail von [email protected] smtp_connect_timeout 3 SMTP-Server 127.0.0.1 Router-ID LVS_DEVEL } vrrp_script chk_maintaince_down { Skript "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0" Intervall 1 Gewicht 2 } vrrp_script chk_haproxy { Skript "killall -0 haproxy" Intervall 1 Gewicht 2 } vrrp_instance VI_1 { Schnittstelle eth0 Zustand MEISTER Priorität 100 virtuelle_Router_ID 125 garp_master_delay 1 Authentifizierung Authentizitätstyp PASS auth_pass 1e3459f77aba4ded } Track-Schnittstelle { eth0 } virtuelle_IP-Adresse { 172.16.25.10/16 dev eth0 Bezeichnung eth0:0 } Titel_Skript { chk_haproxy } notify_master "/etc/keepalived/notify.sh master 172.16.25.10" notify_backup "/etc/keepalived/notify.sh Backup 172.16.25.10" notify_fault "/etc/keepalived/notify.sh Fehler 172.16.25.10" } vrrp_instance VI_2 { Schnittstelle eth0 Status BACKUP Priorität 99 virtuelle_Router_ID 126 garp_master_delay 1 Authentifizierung Authentizitätstyp PASS auth_pass 7615c4b7f518cede } Track-Schnittstelle { eth0 } virtuelle_IP-Adresse { 172.16.25.11/16 dev eth0 Bezeichnung eth0:1 } Titel_Skript { chk_haproxy chk_maintaince_down } notify_master "/etc/keepalived/notify.sh master 172.16.25.11" notify_backup "/etc/keepalived/notify.sh Backup 172.16.25.11" notify_fault "/etc/keepalived/notify.sh Fehler 172.16.25.11" } Ändern Sie auf ähnliche Weise die keepalived.conf-Konfiguration auf dem Knoten 172.16.25.110 mit dem folgenden Inhalt: ! Konfigurationsdatei für Keepalived global_defs { Benachrichtigungs-E-Mail { root@localhost } Benachrichtigungs-E-Mail von [email protected] smtp_connect_timeout 3 SMTP-Server 127.0.0.1 Router-ID LVS_DEVEL } vrrp_script chk_maintaince_down { Skript "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0" Intervall 1 Gewicht 2 } vrrp_script chk_haproxy { Skript "killall -0 haproxy" Intervall 1 Gewicht 2 } vrrp_instance VI_1 { Schnittstelle eth0 Status BACKUP Priorität 99 virtuelle_Router_ID 125 garp_master_delay 1 Authentifizierung Authentizitätstyp PASS auth_pass 1e3459f77aba4ded } Track-Schnittstelle { eth0 } virtuelle_IP-Adresse { 172.16.25.10/16 dev eth0 Bezeichnung eth0:0 } Titel_Skript { chk_haproxy chk_maintaince_down } notify_master "/etc/keepalived/notify.sh master 172.16.25.10" notify_backup "/etc/keepalived/notify.sh Backup 172.16.25.10" notify_fault "/etc/keepalived/notify.sh Fehler 172.16.25.10" } vrrp_instance VI_2 { Schnittstelle eth0 Zustand MEISTER Priorität 100 virtuelle_Router_ID 126 garp_master_delay 1 Authentifizierung Authentizitätstyp PASS auth_pass 7615c4b7f518cede } Track-Schnittstelle { eth0 } virtuelle_IP-Adresse { 172.16.25.11/16 dev eth0 Bezeichnung eth0:1 } Titel_Skript { chk_haproxy } notify_master "/etc/keepalived/notify.sh master 172.16.25.11" notify_backup "/etc/keepalived/notify.sh Backup 172.16.25.11" notify_fault "/etc/keepalived/notify.sh Fehler 172.16.25.11" } # vi /etc/keepalived/notify.sh #!/bin/bash # Autor: Jason.Yu <[email protected]> # Beschreibung: Ein Beispiel für ein Benachrichtigungsskript # Kontakt='root@localhost' benachrichtigen() { mailsubject="`hostname` soll $1:$2 Floating sein" mailbody="`date '+%F %H:%M:%S'`: VRRP-Übergang, `Hostname` in $1 geändert" echo $mailbody | mail -s "$mailsubject" $kontakt } Fall "$1" in Master) Master benachrichtigen $2 /etc/rc.d/init.d/haproxy Neustart Ausfahrt 0 ;; Sicherung) Backup benachrichtigen $2 # Wenn der Knoten in den Sicherungszustand wechselt, muss der Haproxy-Dienst nicht absichtlich gestoppt werden, um zu verhindern, dass chk_maintaince und chk_haproxy den Haproxy-Dienst mehrmals ausführen. Ausfahrt 0 ;; Fehler) Fehler melden $2 # Wie oben exit 0 ;; *) echo 'Verwendung: `Basisname $0` {Master|Backup|Fehler}' Ausfahrt 1 ;; esac Führen Sie den Startbefehl „keepalved“ auf beiden Knoten aus. Der Befehl lautet wie folgt: $ Dienst Keepalived Start 4. Haproxy-BereitstellungHAProxy muss auf beiden Knoten installiert werden. Der Befehl lautet wie folgt: $ yum -y installiere haproxy Ändern Sie die Konfiguration der Datei haproxy.cfg auf den Knoten 172.16.25.109 und 172.16.25.110 (die Konfigurationsdateien auf den beiden Knoten sind konsistent). Der Befehl lautet wie folgt: $ vim /etc/haproxy/haproxy.cfg Der Inhalt der Konfigurationsdatei ist wie folgt: weltweit Protokoll 127.0.0.1 local2 chroot /var/lib/haproxy pid-Datei /var/run/haproxy.pid maxconn 4000 Benutzer Haproxy Gruppen-Haproxy Daemon # Als Hintergrundprogramm ausführen; Vorgabewerte Modus http # Wählen Sie den HTTP-Modus, um eine Filterung der Ebene 7 durchzuführen; globales Protokoll Option httplog # kann eine umfangreichere Protokollausgabe erhalten; Option dontlognull Option http-server-close # Der Server kann die HTTP-Verbindungsfunktion schließen; Option Forwardfor außer 127.0.0.0/8 # Übergebe die IP-Adresse des Clients an den Server und schreibe sie in den Header „X-Forward_for“. Option Redispatch Wiederholungsversuche 3 Timeout für HTTP-Anforderungen: 10 s Timeout-Warteschlange 1m Timeout Verbindung 10s Timeout-Client 1m Timeout-Server 1m Zeitüberschreitung HTTP-Keep-Alive 10 s Timeout-Prüfung 10s maxconn 30000 Hörstatistiken Modus http bind 0.0.0.0:1080 # Die Statistikseite ist an Port 1080 gebunden; stats enable # Aktivieren Sie die Statistikseitenfunktion; Statistiken Hide-Version #Haproxy-Versionsnummer ausblenden; stats uri /haproxyadmin?stats #Passen Sie die Zugriffs-URI der Statistikseite an; Stats Realm Haproxy\ Statistics #Eingabeaufforderung für Informationen zur Kennwortüberprüfung auf der Statistikseite; stats auth admin:admin # Anmeldeauthentifizierung für die Statistikseite aktivieren; stats admin if TRUE # Wenn der angemeldete Benutzer die Überprüfung besteht, wird ihm die Verwaltungsfunktion gewährt; Frontend-HTTP-In binden *:80 Modus http globales Protokoll Option httpclose Option Logasap Option dontlognull Erfassen Sie den Anforderungsheader Host-Länge 20 Erfassungsanforderungsheader Referrer-Länge 60 acl url_static path_beg -i /static /p_w_picpaths /javascript /stylesheets acl url_static path_end -i .jpg .jpeg .gif .png .css .js .html use_backend static_servers if url_static # Anfragen, die den ACL-Regeln entsprechen, werden an den statischen Backend-Server weitergeleitet default_backend dynamic_servers # Anfragen werden standardmäßig an den dynamischen Backend-Server weitergeleitet backend static_servers Rundenturnier Server imgsrv1 192.168.0.25:80 check maxconn 6000 # Statischer Server, mehrere Server können konfiguriert und das Gewicht kann festgelegt werden; Backend dynamische_Server Balance-Quelle # Bei dynamischen Anforderungen kann der Quellplanungsalgorithmus verwendet werden, um bis zu einem gewissen Grad Sitzungspersistenz zu erreichen; am besten ist es jedoch, Cookie-Bindung zu verwenden, um Sitzungspersistenz zu erreichen. Server websrv1 192.168.0.35:80 check maxconn 1000 # Dynamische Server können mit mehreren Servern konfiguriert und Gewichte festgelegt werden. Die beiden Knoten starten den Dienst mit den folgenden Befehlen: $ Dienst HaProxy starten 5. Nginx-Bereitstellungyum -y groupinstall "Entwicklungstools" yum -y groupinstall „Serverplattform-Entwicklung“ yum installiere gcc openssl-devel pcre-devel zlib-devel Gruppenadd -r nginx Benutzeradd -r -g nginx -s /sbin/nologin -M nginx tar xf nginx-1.4.7.tar.gz cd nginx-1.4.7 mkdir -pv /var/tmp/nginx ./konfigurieren \ --prefix=/usr \ --sbin-path=/usr/sbin/nginx \ --conf-path=/etc/nginx/nginx.conf \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --pid-path=/var/run/nginx/nginx.pid \ --lock-path=/var/lock/nginx.lock \ --Benutzer=nginx \ --group=nginx \ --mit-http_ssl_module \ --mit-http_flv_module \ --mit-http_stub_status_module \ --mit-http_gzip_static_module \ --http-client-body-temp-path=/var/tmp/nginx/client/ \ --http-proxy-temp-path=/var/tmp/nginx/proxy/ \ --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \ --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \ --http-scgi-temp-path=/var/tmp/nginx/scgi \ --mit-pcre machen && machen installieren Konfigurieren von Dienstskripten vi /etc/init.d/nginx # Serviceskript konfigurieren#!/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: /etc/sysconfig/nginx # PID-Datei: /var/run/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/sbin/nginx" prog=$(Basisname $nginx) NGINX_CONF_FILE="/etc/nginx/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' -` 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() { Konfigurationstest || return $? stoppen Schlaf 1 Start } neu laden() { Konfigurationstest || 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 chmod +x /etc/init.d/nginx # Stellt die Ausführungsberechtigung des Serviceskripts wieder her vi /etc/nginx/nginx.conf # Bearbeiten Sie die Hauptkonfigurationsdatei worker_processes 2; Fehlerprotokoll /var/log/nginx/nginx.error.log; pid /var/run/nginx.pid; Ereignisse { Arbeiterverbindungen 1024; } http { mime.types einschließen; Standardtyp Anwendung/Oktett-Stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; sendfile an; KeepAlive-Timeout 65; Server { hören Sie 80; Servername xxrenzhe.lnmmp.com; Zugriffsprotokoll /var/log/nginx/nginx.access.log Haupt; Standort / { Wurzel /www/lnmmp.com; index.php index.html index.htm; } Fehlerseite 404 /404.html; Fehlerseite 500 502 503 504 /50x.html; Standort = /50x.html { Wurzel /www/lnmmp.com; } Standort ~ \.php$ { Wurzel /www/lnmmp.com; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $Dokumentstammsatz$fastcgi_script_name; fastcgi_params einschließen; } } } vi /etc/nginx/fastcgi_params # Fastcgi-Parameterdatei bearbeiten fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $Anforderungsmethode; fastcgi_param CONTENT_TYPE $Inhaltstyp; fastcgi_param CONTENT_LENGTH $Inhaltslänge; fastcgi_param SCRIPT_FILENAME $Dokumentstammsatz$fastcgi_script_name; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $Dokumentstammsatz; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; Starten des Dienstes service nginx configtest #Überprüfen Sie, ob die Konfigurationsdatei korrekt ist, bevor Sie den Dienst starten service nginx start ps -ef |grep nginx # Überprüfen Sie den nginx-Prozess, insbesondere, ob der Worker-Prozess mit dem worker_processes-Wert übereinstimmt ss -antupl |grep 80 # Überprüfen Sie, ob der Service-Port gestartet ist 6. ZugangsverifizierungTest der Haproxy-Statistikseite Dynamischer und statischer Trenntest Hochverfügbarkeitstests Damit ist die Einführung in den Aufbau eines Nginx-Hochverfügbarkeitsclusters (Keepalived+Haproxy+Nginx) abgeschlossen. Dies ist das Ende dieses Artikels über den Aufbau eines Nginx-Hochverfügbarkeitsclusters (Keepalived+Haproxy+Nginx). Weitere relevante Inhalte zum Nginx-Hochverfügbarkeitscluster finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
>>: Design-Story: Der Wachmann, der sich Nummernschilder nicht merken kann
Wirkung Brauchen Sie eine Umgebung Ansicht elemen...
1. Laden Sie das Alpenbild herunter [root@DockerB...
In MySQL können Sie die Funktionen IF(), IFNULL()...
Das Div+CSS-Layout zur Erzielung einer 2-Enden-Au...
In diesem Artikel wird der spezifische Code von V...
#!/bin/bash #SVN herunterladen yum -y installiere...
Inhaltsverzeichnis Fügen Sie dem GitHub+Jekyll-Bl...
Ich habe heute einen neuen Trick gelernt. Ich kann...
Ich denke, das Karussell ist ein relativ wichtige...
UCenter Home ist ein von Comsenz veröffentlichtes ...
Da Uniapp nicht über eine autorisierte DingTalk-A...
Die bidirektionale MySQL-Sicherung wird auch als ...
Einigen Eigenschaften in CSS geht ein "*&quo...
Laden Sie zuerst JDK herunter. Hier verwenden wir...
Beim Freigeben eines Projekts müssen Sie häufig d...