Beispiel für die Implementierung der Hochverfügbarkeit von Keepalived+Nginx

Beispiel für die Implementierung der Hochverfügbarkeit von Keepalived+Nginx

1. Einführung in Keepalived

Keepalived wurde ursprünglich für die LVS-Lastausgleichssoftware entwickelt, um den Status jedes Serviceknotens im LVS-Clustersystem zu verwalten und zu überwachen. Später wurde die VRRP-Funktion hinzugefügt, um eine hohe Verfügbarkeit zu erreichen. Neben der Verwaltung von LVS-Software kann keepalived auch Hochverfügbarkeitslösungen für andere Dienste unterstützen.

keepalived erreicht hohe Verfügbarkeit durch das VRRP-Protokoll. VRRP (Virtual Router Redundancy Protocol) virtuelles Routing-Redundanzprotokoll. Der Zweck von VRRP besteht darin, das Single Point Failure-Problem des statischen Routings zu lösen. Es kann sicherstellen, dass das gesamte Netzwerk ohne Unterbrechung ausgeführt werden kann, wenn einzelne Knoten ausfallen.

2. Keepalived-Hochverfügbarkeits-Failover-Prinzip

Das Failover zwischen Keepalived-Hochverfügbarkeitsdiensten wird durch VRRP erreicht. Wenn der Keepalived-Dienst funktioniert, sendet der Haupt-Masterknoten kontinuierlich (Multicast-)Heartbeat-Nachrichten an den Backup-Knoten, um dem Backup-Knoten mitzuteilen, dass er noch aktiv ist.

Wenn der Primärknoten ausfällt, kann er keine Heartbeat-Nachrichten an den Standby-Knoten senden. Wenn der Standby-Knoten den Heartbeat vom Primärknoten nicht mehr erkennen kann. Es ruft sein eigenes Übernahmeprogramm auf, um die IP-Ressourcen und Dienste des Hauptknotens zu übernehmen. Wenn der Masterknoten wiederhergestellt ist, gibt der Standbyknoten die IP-Ressourcen und -Dienste frei, die er beim Ausfall des Masterknotens übernommen hat, und kehrt zu seiner ursprünglichen Standby-Rolle zurück.

3. Installieren Sie nginx

3.1. Masterknoten (192.168.80.22)

3.1.1. Kompilierungstools und Bibliotheksdateien installieren

yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel

3.1.2. Installieren Sie pcre

#Geben Sie das Verzeichnis cd /usr/local/develop/anginx ein

#Laden Sie die Installationsdatei hoch und entpacken Sie sie tar -zxvf pcre-8.38.tar.gz

#Geben Sie das Installationsverzeichnis ein cd pcre-8.38

# Konfiguration prüfen ./configure

#Kompilieren und installieren Sie make && make install

# Zeigen Sie die pcre-Version an pcre-config --version

3.1.3. Installieren Sie nginx

#Geben Sie das Verzeichnis cd /usr/local/develop/anginx ein
​
#Laden Sie die Installationsdatei hoch und entpacken Sie sie tar -zxvf nginx-1.8.1.tar.gz
​
#Geben Sie das Installationsverzeichnis ein cd nginx-1.8.1
​
# Konfiguration prüfen ./configure --prefix=/usr/local/develop/anginx/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/develop/anginx/pcre-8.38
​
#Kompilieren und installieren Sie make && make install
​
# Zeigen Sie die Nginx-Version an /usr/local/develop/anginx/webserver/nginx/sbin/nginx -v
--------------------------------------------------------
[root@hadoop02 Webserver]# /usr/local/develop/anginx/webserver/nginx/sbin/nginx -v
Nginx-Version: nginx/1.8.1
​
#nginx konfigurieren (überprüfen)
/usr/local/develop/anginx/webserver/nginx/sbin/nginx -t
​
#nginx-Verwaltungsbefehl /usr/local/develop/anginx/webserver/nginx/sbin/nginx # Starten Sie Nginx
/usr/local/develop/anginx/webserver/nginx/sbin/nginx -s stop # Nginx stoppen
/usr/local/develop/anginx/webserver/nginx/sbin/nginx -s reload # Konfigurationsdatei neu laden /usr/local/develop/anginx/webserver/nginx/sbin/nginx -s reopen # Nginx neu starten

3.1.4.nginx Grundkonfiguration

vi nginx.conf

#Benutzer niemand;
Arbeiterprozesse 1;
​
#error_log Protokolle/Fehler.log;
#error_log Protokolle/error.log Hinweis;
#error_log Protokolle/error.log-Info;
​
pid-Protokolle/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"';
​
  access_log Protokolle/access.log Haupt;
​
  sendfile an;
  #tcp_nopush ein;
​
  #keepalive_timeout 0;
  KeepAlive-Timeout 65;
​
  #gzip ein;
  
  #Tomcat-Liste hinzufügen, die echten Anwendungsserver werden hier upstream tomcat_pool platziert{
    #Server-Tomcat-Adresse: Das Gewicht der Portnummer gibt das Gewicht an. Je höher das Gewicht, desto größer die Wahrscheinlichkeit der Zuweisung.
    Server 192.168.80.22:8080 Gewicht=4 max_fails=2 Fail_Timeout=30s;
    Server 192.168.80.22:8081 Gewicht=4, max_fails=2, Fail_Timeout=30 s;
    
  }
​
  Server {
    hören Sie 80;
    Servername Tomcat-Pool;
​
    #Zeichensatz koi8-r;
​
    #access_log Protokolle/Host.access.log Haupt;
​
    Standort / {
      #Wurzel-HTML;
      #index index.html index.htm;
      proxy_pass http://tomcat_pool; #direkt an Tomcat, um proxy_set_header Host $host zu verarbeiten;
      Proxy_Set_Header X-Real-IP $Remote_Addr;
      proxy_set_header X-Weitergeleitet-Für $proxy_add_x_forwarded_for;
    }
​
    #Fehlerseite 404 /404.html;
​
    # Server-Fehlerseiten auf die statische Seite /50x.html umleiten
    #
    Fehlerseite 500 502 503 504 /50x.html;
    Standort = /50x.html {
      Stamm-HTML;
    }
​
​
}

3.2. Standby-Knoten (192.168.80.21)

Hinweis: Die Installationsmethode ist dieselbe wie die des Nginx-Masterknotens.

4. Installieren Sie Keepalived

4.1. Masterknoten (192.168.80.22)

#Installieren Sie Keepalived
yum installiere keepalived -y
​
#Starten Sie den Keepalived-Dienst /etc/init.d/keepalived start
----------------------------------------------
[root@hadoop02 anginx]# /etc/init.d/keepalived start
Keepalived wird gestartet: [ OK ]
[root@hadoop02 anginx]# ps -ef |grep keepalived
root 15723 1 0 00:59 ? 00:00:00 /usr/sbin/keepalived -D
root 15724 15723 0 00:59 ? 00:00:00 /usr/sbin/keepalived -D
root 15725 15723 0 00:59 ? 00:00:00 /usr/sbin/keepalived -D
root 15731 15622 0 00:59 Punkte/1 00:00:00 grep keepalived
[root@hadoop02 anginx]#
​
#Stellen Sie das System so ein, dass es automatisch startet echo "/etc/init.d/keepalived start" >>/etc/rc.local
​
#Beenden Sie den Keepalived-Dienst /etc/init.d/keepalived stop
​
#Bearbeiten Sie die Keepalived-Konfigurationsdatei vi /etc/keepalived/keepalived.conf
​
-----------------------------------------------------------
! Konfigurationsdatei für Keepalived
​
global_defs {
  Benachrichtigungs-E-Mail {
   [email protected]
   [email protected]
   [email protected]
  }
  Benachrichtigungs-E-Mail von [email protected]
  SMTP-Server 192.168.200.1
  smtp_connect_timeout 30
  Router-ID lb01
}
​
vrrp_instance VI_1 {
  Zustand MEISTER
  Schnittstelle eth1
  virtuelle_Router_ID 55
  Priorität 150
  Anzeige_int 1
  Authentifizierung
    Authentizitätstyp PASS
    auth_pass server123
  }
  virtuelle_IP-Adresse {
    192.168.80.100 dev eth1 Bezeichnung eth1:1
  }
}
............................................................

Über Konfigurationsanweisungen:

  • [router_id] ist die Routerkennung, die innerhalb eines LAN eindeutig sein sollte.
    • 【vrrp_instance VI_1】{...}Dies ist eine VRRP-Instanz, die den Master/Slave-Status, die Schnittstelle, die Priorität, die Authentifizierung und die IP-Informationen von Keepalived definiert
    • [state] definiert die Rolle von VRRP
    • [interface] definiert die zu verwendende Schnittstelle. Hier ist die von meinem Server verwendete Netzwerkkarte eth1.
    • [virtual_router_id] ist die ID des virtuellen Routers. Der Master und der Backup in einer Gruppe von Keepalived-Konfigurationen sind auf die gleiche
    • [Priorität] ist die Priorität. Je größer die Zahl, desto höher die Priorität.
    • 【auth_type】ist die Authentifizierungsmethode
    • 【auth_pass】ist das Authentifizierungskennwort
  • 【virtual_ipaddress】 {...} Definiert eine virtuelle IP-Adresse. Sie können mehrere IP-Adressen konfigurieren. Hier definiere ich sie als 192.168.80.100, die an die Netzwerkschnittstelle eth1 gebunden ist, virtuelle Schnittstelle eth1:1

4.2. Standby-Knoten (192.168.80.21)

#Installieren Sie Keepalived
yum installiere keepalived -y
​
#Starten Sie den Keepalived-Dienst /etc/init.d/keepalived start
----------------------------------------------
[root@hadoop02 anginx]# /etc/init.d/keepalived start
Keepalived wird gestartet: [ OK ]
[root@hadoop02 anginx]# ps -ef |grep keepalived
root 15723 1 0 00:59 ? 00:00:00 /usr/sbin/keepalived -D
root 15724 15723 0 00:59 ? 00:00:00 /usr/sbin/keepalived -D
root 15725 15723 0 00:59 ? 00:00:00 /usr/sbin/keepalived -D
root 15731 15622 0 00:59 Punkte/1 00:00:00 grep keepalived
[root@hadoop02 anginx]#
​
#Stellen Sie das System so ein, dass es automatisch startet echo "/etc/init.d/keepalived start" >>/etc/rc.local
​
#Beenden Sie den Keepalived-Dienst /etc/init.d/keepalived stop
​
#Bearbeiten Sie die Keepalived-Konfigurationsdatei vi /etc/keepalived/keepalived.conf
​
-----------------------------------------------------------------
! Konfigurationsdatei für Keepalived
​
global_defs {
  Benachrichtigungs-E-Mail {
   [email protected]
   [email protected]
   [email protected]
  }
  Benachrichtigungs-E-Mail von [email protected]
  SMTP-Server 192.168.200.1
  smtp_connect_timeout 30
  Router-ID lb02
}
​
vrrp_instance VI_1 {
  Status BACKUP
  Schnittstelle eth1
  virtuelle_Router_ID 55
  Priorität 100
  Anzeige_int 1
  Authentifizierung
    Authentizitätstyp PASS
    auth_pass server123
  }
  virtuelle_IP-Adresse {
    192.168.80.100 dev eth1 Bezeichnung eth1:1
  }
}
............................................................
​
​

5. Testen

5.1. Starten Sie den Keepalived-Dienst des Master- und Standby-Knotens

#Auf Knoten 1 ausführen (192.168.80.22)
/etc/init.d/keepalived start
-------------------------------------
[root@hadoop02 anginx]# ps -ef |grep keepalived
root 15788 1 0 01:09 ? 00:00:00 /usr/sbin/keepalived -D
root 15790 15788 0 01:09 ? 00:00:00 /usr/sbin/keepalived -D
root 15791 15788 0 01:09 ? 00:00:00 /usr/sbin/keepalived -D
root 15807 15622 0 01:33 Punkte/1 00:00:00 grep keepalived
[root@hadoop02 anginx]#
​
​
#Auf Knoten 2 ausführen (192.168.80.21)
/etc/init.d/keepalived start
------------------------------------------
[root@hadoop01 ~]# ps -ef |grep keepalived
root 11542 1 0 01:30 ? 00:00:00 /usr/sbin/keepalived -D
root 11544 11542 0 01:30 ? 00:00:00 /usr/sbin/keepalived -D
root 11545 11542 0 01:30 ? 00:00:00 /usr/sbin/keepalived -D
root 11550 11512 0 01:33 Punkte/1 00:00:00 grep keepalived
[root@hadoop01 ~]#

5.2. Zugriff auf Dienste über virtuelle IP

http://192.168.80.100/session-redis-demo/

5.3. Stoppen Sie den Keepalived-Dienst auf dem Masterknoten

#Auf Knoten 1 ausführen (192.168.80.22)
/etc/init.d/keepalived stoppen
​
#Beobachten Sie die Änderungen in der IP-Adresse des Standby-Knotens
----------------------------------------------
[root@hadoop01 ~]# IP-Adresse
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue status UNBEKANNT 
  Link/Loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  inet 127.0.0.1/8 Bereich Host lo
  inet6 ::1/128 Bereich Host 
    valid_lft für immer preferred_lft für immer
2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast Status UP qlen 1000
  Link/Ether 00:50:56:38:e5:46 brd ff:ff:ff:ff:ff:ff:ff
  inet 192.168.80.21/24 brd 192.168.80.255 Bereich global eth1
  inet 192.168.80.100/32 Bereich global eth1:1
  inet6 fe80::250:56ff:fe38:e546/64 Bereichslink 
    valid_lft für immer preferred_lft für immer
[root@hadoop01 ~]#

5.4. Greifen Sie weiterhin über die virtuelle IP auf den Dienst zu

http://192.168.80.100/session-redis-demo/

6.Keepalived+nginx-Integration

Beschreibung: Schreiben Sie ein Nginx-Daemon-Skript. Wenn der Nginx-Dienst ausfällt, stoppen Sie den Keepalived-Dienst des aktuellen Knotens. Automatisch zum Standby-Knoten wechseln.

6.1. Schreiben Sie ein Nginx-Daemon-Skript

vi nginx_check.sh
​
--------------------------------------
#!/bin/bash
während wahr
Tun
wenn [ $(netstat -tlnp | grep nginx | ​​​​wc -l) -ne 1 ]
Dann
  /etc/init.d/keepalived stoppen
fi
Schlaf 2
Erledigt
​
#Autorisieren Sie das Skript chmod u+x nginx_check.sh
​
#Skript nohup /usr/local/develop/anginx/shell/nginx_check.sh ausführen &

6.2. Stoppen Sie den Nginx-Dienst des Masterknotens

#Stoppen Sie den Nginx-Dienst des Masterknotens /usr/local/develop/anginx/webserver/nginx/sbin/nginx -s stop
​
#Prozess suchen [root@hadoop02 ~]# ps -ef |grep nginx
root 15915 1 0 01:51 ? 00:00:00 /bin/bash /usr/local/develop/anginx/shell/nginx_check.sh
root 16516 15753 0 01:54 Punkte/5 00:00:00 grep nginx
[root@hadoop02 ~]#
​
#Beobachten Sie die Änderungen der Standby-Knoten [Der Dienst ist normal]
IP-Adresse
--------------------------------------
[root@hadoop01 shell]# IP-Adresse
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue status UNBEKANNT 
  Link/Loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  inet 127.0.0.1/8 Bereich Host lo
  inet6 ::1/128 Bereich Host 
    valid_lft für immer preferred_lft für immer
2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast Status UP qlen 1000
  Link/Ether 00:50:56:38:e5:46 brd ff:ff:ff:ff:ff:ff:ff
  inet 192.168.80.21/24 brd 192.168.80.255 Bereich global eth1
  inet 192.168.80.100/32 Bereich global eth1:1
  inet6 fe80::250:56ff:fe38:e546/64 Bereichslink 
    valid_lft für immer preferred_lft für immer
[root@hadoop01-Shell]
​
#Starten Sie den Masterknoten nginx und den Keepalived-Dienst erneut /usr/local/develop/anginx/webserver/nginx/sbin/nginx
​
/etc/init.d/keepalived start

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:
  • HAProxy+Keepalived zur Erzielung eines hochverfügbaren Lastausgleichs (theoretischer Teil)
  • So aktualisieren Sie die Daten einer Keepalive-Seite im Vue-Cache
  • Implementierung der KeepAlive-Schnittstelle in jetcd, dem offiziellen Repository des Java-Clients Etcd

<<:  So installieren Sie MySQL und aktivieren die Remote-Verbindung auf dem Cloud-Server Ubuntu_Server_16.04.1

>>:  So implementieren Sie den neuen Operator von JavaScript selbst

Artikel empfehlen

So installieren Sie Windows Server 2008 R2 auf einem Dell R720-Server

Hinweis: Alle Bilder in diesem Artikel stammen au...

Prozessdiagramm für die Ideenbereitstellung und Tomcat-Dienstimplementierung

Konfigurieren Sie zunächst die Projektartefakte K...

JavaScript zum Anzeigen und Ausblenden von Bildern

JavaScript zeigt und verbirgt Bilder. Zu Ihrer In...

Verwenden Sie thead, tfoot und tbody, um eine Tabelle zu erstellen

Manche Leute verwenden diese drei Tags auf pervers...

Praxis der mehrschichtigen verschachtelten Anzeige von Elementtabellen

Es wird eine Liste mit mehreren Bestellungen benö...

MySQL-Optimierung: Join statt Unterabfrage verwenden

Verwenden Sie JOIN anstelle von Unterabfragen MyS...

Sequenzimplementierungsmethode basierend auf MySQL

Das Team ersetzte den neuen Rahmen. Alle neuen Un...

Codebeispiele für allgemeine Vorgänge bei der Docker-Image-Verwaltung

Spiegelung ist auch eine der Kernkomponenten von ...