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
Inhaltsverzeichnis Basisversion Schritt 1: Axios ...
Informationen zur Überprüfung der Kennwortstärke:...
KVM steht für Kernel-based Virtual Machine und is...
HTML-Ereignisliste Allgemeine Ereignisse: onClick ...
Async Hooks ist eine neue Funktion von Node8. Sie...
html,Adresse, Blockzitat, Körper, dd, div, dl,dt,...
In diesem Artikel werden die Installations- und K...
Grundlegende Syntax Sie können eine Ansicht mit d...
Inhaltsverzeichnis 1 Bewertung 2 Fünf Strategien ...
1. Befehlseinführung Mit „time“ werden die für di...
Dieser Artikel wurde ursprünglich von Bloggerin W...
Nginx-Installation CentOS 6.x yum verfügt standar...
Inhaltsverzeichnis Vorwort Design erreichen Zusam...
Inhaltsverzeichnis 1. Standortobjekt 1. URL 2. Ei...
Code kopieren Der Code lautet wie folgt: <styl...