Heim  >  Artikel  >  Betrieb und Instandhaltung  >  So erreichen Sie eine hohe Verfügbarkeit durch die Kombination von Keepalived mit Nginx

So erreichen Sie eine hohe Verfügbarkeit durch die Kombination von Keepalived mit Nginx

WBOY
WBOYnach vorne
2023-05-15 21:07:121360Durchsuche

1. Einführung

keepalived ist eine hochverfügbare Lösung für LVS-Dienste auf Basis des VRRP-Protokolls, mit der Single Points of Failure vermieden werden können. Ein LVS-Dienst verfügt über zwei Server, auf denen Keepalived ausgeführt wird, einer als Hauptserver (Master) und einer als Backup-Server (Backup). Nach außen hin erscheint er jedoch als virtuelle IP. Der Hauptserver sendet bestimmte Nachrichten an den LVS-Dienst Wenn der Backup-Server diese Nachricht nicht empfangen kann, d. h. wenn der Hauptserver ausfällt, übernimmt der Backup-Server die virtuelle IP und stellt weiterhin Dienste bereit, wodurch eine hohe Verfügbarkeit gewährleistet wird. Keepalived ist die perfekte Implementierung von vrrp. Bevor wir Keepalived einführen, stellen wir zunächst das Prinzip von vrrp vor.

1.vrrp-Protokolleinführung

In einer realen Netzwerkumgebung haben zwei Hosts, die kommunizieren müssen, in den meisten Fällen keine direkte physische Verbindung. Wie wählt man in einer solchen Situation die Route zwischen ihnen? Wie wählt der Host die nächste Hop-Route zum Zielhost aus? Es gibt zwei gängige Lösungen für dieses Problem:

  1. Verwenden Sie dynamische Routing-Protokolle (RIP, OSPF usw.) auf dem Host.

  2. Konfigurieren Sie statisches Routing der Host

Offensichtlich ist die Konfiguration von dynamischem Routing auf dem Host aufgrund vieler Probleme wie Verwaltungs- und Wartungskosten und der Frage, ob es unterstützt wird, sehr unpraktisch. Das Konfigurieren statischer Routen erfreut sich großer Beliebtheit, doch der Router (oder das Standard-Gateway) wird oft zu einem Single Point of Failure. Der Zweck von vrrp besteht darin, das Single-Point-of-Failure-Problem des statischen Routings zu lösen. vrrp verwendet ein Wahlprotokoll, um Routing-Aufgaben dynamisch einem bestimmten vrrp-Router unter den virtuellen Routern im LAN zuzuweisen.

2.vrrp-Arbeitsmechanismus

In einem virtuellen vrrp-Router gibt es mehrere physische vrrp-Router, aber diese mehreren physischen Maschinen können nicht gleichzeitig arbeiten, aber eine sogenannte Master-Maschine ist für die Routing-Arbeit verantwortlich, alles andere ist es Backup, der Master ist nicht statisch, vrrp ermöglicht es jedem vrrp-Router, an der Wahl teilzunehmen, und der Master ist der endgültige Gewinner. Der Master verfügt beispielsweise über die IP-Adresse des virtuellen Routers. Unser Host verwendet diese IP-Adresse als statische Route. Der privilegierte Master ist für die Weiterleitung der an die Gateway-Adresse gesendeten Pakete und die Beantwortung von ARP-Anfragen verantwortlich.

vrrp implementiert die Funktion eines virtuellen Routers durch das Wahlprotokoll. Alle Protokollnachrichten werden in Form von IP-Multicast-Paketen (Multicast-Adresse 224.0.0.18) gesendet. Ein virtueller Router besteht aus einer VRID (Bereich 0-255) und einer Reihe von IP-Adressen, die nach außen als bekannte Mac-Adresse erscheinen. Daher sind in einem virtuellen Router der externe Mac und die IP gleich (VIP genannt), unabhängig davon, wer der Master ist. Der Client-Host muss seine Routing-Konfiguration aufgrund von Änderungen im Master nicht ändern. Für den Client ist diese Master-Slave-Umschaltung transparent.

In einem virtuellen Router sendet nur der vrrp-Router als Master immer vrrp-Benachrichtigungsnachrichten (vrrpadvertisement-Nachrichten), und das Backup wird dem Master nicht zuvorkommen, es sei denn, seine Priorität ist höher. Wenn der Master nicht verfügbar ist (das Backup kann keine Benachrichtigungsinformationen empfangen), wird dasjenige mit der höchsten Priorität unter mehreren Backups zum Master ernannt. Diese Vorabentscheidung erfolgt sehr schnell (

3.vrrp-Workflow

(1).Initialisierung:

Wenn der Router startet und die Priorität des Routers 255 ist (die höchste Priorität, der Router hat die Router-Adresse), sollten VRRP-Benachrichtigungsinformationen vorhanden sein Senden Sie ARP-Informationen, um die MAC-Adresse zu benachrichtigen, die der IP-Adresse des Routers als virtueller Routing-MAC entspricht. Stellen Sie den Benachrichtigungsinformations-Timer so ein, dass er sich auf das regelmäßige Senden von VRRP-Benachrichtigungsinformationen vorbereitet, und wechseln Sie andernfalls in den Sicherungsstatus Stellen Sie den Timer so ein, dass regelmäßig überprüft wird, ob die Benachrichtigung des Masters eingegangen ist.

(2).master

  1. Stellen Sie den Timer für geplante Benachrichtigungen ein.

  2. Verwenden Sie die virtuelle VRRP-Mac-Adresse, um auf die ARP-Anfrage der Router-IP-Adresse zu antworten Der virtuelle vrrp-Mac; empfangen, der geplante Benachrichtigungs-Timer wird gelöscht und die Sendepriorität beträgt 0 Benachrichtigungspaket, Übergang in den Initialisierungsstatus; empfangen, wenn die Priorität 0 ist, senden Sie VRRP-Benachrichtigungsinformationen; andernfalls beurteilen Sie die Daten. Ob die Priorität höher als die lokale oder gleich ist und die tatsächliche IP-Adresse größer als die tatsächliche lokale IP ist, stellen Sie den geplanten Benachrichtigungs-Timer ein und setzen Sie ihn zurück den Host-Timeout-Timer und den Transfer in den Backup-Status; andernfalls verwerfen Sie das Benachrichtigungspaket.

  3. Setzen Sie den Host-Timeout-Timer

  4. Alle Pakete verwerfen, deren Ziel-Mac-Adresse die virtuelle Router-IP ist;

  5. Beim Empfang eines Shutdown-Ereignisses löschen der Host-Timeout-Timer und der Übergang in den Initialisierungszustand

  6. Wenn der Host-Timeout-Timer abläuft, sendet er VRRP-Benachrichtigungsinformationen, sendet ARP-Adressinformationen und wechselt in den Master-Status.

  7. Wenn die Priorität beim Empfang der VRRP-Benachrichtigungsinformationen 0 ist, bedeutet dies, dass sie eingegeben werden Andernfalls wird beurteilt, ob die Priorität höher ist als die des lokalen Computers. Wenn sie hoch ist, wird der Master als gültig erkannt und der Host-Timeout-Timer wird zurückgesetzt

    4.arp-Abfrageverarbeitung

Wenn der interne Host die virtuelle Maschine über arp abfragt. Wenn die IP-Adresse des Routers der Mac-Adresse entspricht, ist die vom Master-Router zurückgegebene Mac-Adresse die Mac-Adresse des virtuellen VRRP, nicht die Mac-Adresse Adresse der tatsächlichen Netzwerkkarte, sodass der interne Netzwerkcomputer sie beim Umschalten des Routers nicht erkennen kann und beim Neustart des Routers die tatsächliche MAC-Adresse der lokalen Netzwerkkarte nicht aktiv senden kann. Wenn die ARP-Proxy-Funktion (proxy_arp) auf dem virtuellen Router aktiviert ist, reagiert die ARP-Antwort des Proxys auch auf die virtuelle VRRP-Mac-Adresse.

2. Erstellen Sie die Umgebung

1. Server 1: 10.63.0.154 Installieren Sie keeplived und stellen Sie den Prioritätswert auf 100 ein. Einstellung Die den beiden Servern entsprechenden virtuellen IPs sind: 10.63.0.158

3. Installieren Sie den Keepalived-Masterknoten



Diese Installation von Keepalived übernimmt den Yum-Modus und wird auf Server 1 installiert. Die Hauptschritte sind wie folgt:

1. Installation von ipvsadm, Befehl: yum install ipvsadm. Nach Abschluss der Installation können Sie die Versionsnummer mit dem Befehl ipvsadm –v überprüfen. 2. Keepalived installieren, Befehl: yum install keepalived. Nachdem die Installation abgeschlossen ist, können Sie die Versionsnummer mit dem Befehl keepalived –v überprüfen.

3. Erstellen Sie das Skript /usr/local/nginx/nginx_check.sh. Der Inhalt des Skripts lautet wie folgt:


#!/bin/bash
#判断nginx服务是否启动,如果不存在,调用nginx启用命令,并停止2秒,若#启动失败,杀掉keepalived
a=`ps -c nginx --no-header |wc -l`
if [ $a -eq 0 ];then 
 /usr/sbin/nginx
 sleep 2
 if [ `ps -c nginx --no-header |wc -l` -eq 0 ];then
  killall keepalived
 fi
fi

Setzen Sie die Berechtigungen für nginx_check.sh ein. Der Einstellungsbefehl lautet: chmod 777 /usr/local/nginx/nginx_check.sh


4. Konfigurieren Sie die Keepalived-Knoteninformationen /etc/keepalived/keepalived conf. Die Konfigurationsdatei Keepalived.conf lautet wie folgt:

! configuration file for keepalived

global_defs {
 router_id nginx_master154
}

vrrp_script chk_nginx {
 script "/usr/local/nginx/nginx_check.sh"
 interval 2
 weight 20
}
vrrp_instance vi_1 {
 state master
 interface eth0
 virtual_router_id 154
 mcast_src_ip 10.63.0.154
 priority 100
 nopreempt
 advert_int 1
 authentication {
  auth_type pass
  auth_pass 1111
 }
 track_script {
  chk_nginx
 }
 virtual_ipaddress {
  10.63.0.158
 }
}
}

Konfigurationsdatei Schlüsselparameterbeschreibung:


router_id // Knotennamen definieren

    vrrp_script chk_nginx {script "/etc/keepalived/nginx_check.sh" Internet Al 2 Gewicht -20 } //Führen Sie das Skript /etc/keepalived/nginx_check.sh alle 2 Sekunden aus. Diese Prüfung wurde vom Anfang an durchgeführt. Das Intervall stellt das Intervall dar, und Gewicht -20 bedeutet, dass bei der Ausführung des Skripts eine Ausnahme festgestellt wird , Die Priorität dieses Knotens 10.63.0.154 wird um 20 reduziert.
  1. state master //Zeigt an, dass die Knotenrolle als Master definiert ist
  2. virtual_router_id 154 //Definieren Sie die Identifikation des virtuellen Knotens
  3. interface eth0 //Definieren Sie den Namen der Netzwerkkarte, um den Namen der Server-Netzwerkkarte anzuzeigen über den Befehl: ifconfig oder ip a, wie in der Abbildung gezeigt:
  4. Starten Sie nach Abschluss der obigen Konfigurationsdatei Nginx und Keepalived, um zu testen, ob über die virtuelle IP-Adresse auf Nginx zugegriffen werden kann. Starten Sie den Befehl keepalived: systemctl start keepalived.service. Nach dem Start können Sie den Status über den Befehl systemctl status keepalived.service überprüfen. Der Screenshot der Hauptschnittstelle von Nginx mit virtueller IP sieht wie folgt aus:

So erreichen Sie eine hohe Verfügbarkeit durch die Kombination von Keepalived mit Nginx

3. Installieren Sie den Keepalived-Sicherungsknoten

So erreichen Sie eine hohe Verfügbarkeit durch die Kombination von Keepalived mit Nginx Die Methode zur Installation von Keepalived auf Server 2 ist genau die gleiche wie auf Server 1. Nur In der Konfigurationsdatei keepalived.conf sind drei Änderungen erforderlich:

interface eth0 // Definieren Sie den Netzwerkkartennamen, um die Netzwerkkarte von Server 2 anzuzeigen. Wenn der Netzwerkkartenname eno24 ist, ist er definiert als: Schnittstelle eno24

    priority // Der Prioritätswert ist auf 98 eingestellt Es war immer die Seite des Primärknotens und die Seite des Backup-Knotens wurde nicht aufgerufen. Nachdem Sie Keepalived auf Server 1 eingerichtet und erneut aufgerufen haben, wird die Hauptschnittstelle des Standby-Knotens angezeigt, wie unten gezeigt:
  1. 4. Das Linux-Dienstverwaltungstool systemctl

  2. Unter Linux gibt es zwei Befehle : Service- und chkconfig-Verwaltungsdienste. systemctl ist das Haupttool zur Verwaltung von Diensten. Es integriert chkconfig- und Servicefunktionen. (Mit diesem Befehl können Sie die yum-Installationssoftware verwalten und festlegen, ob beim Booten gestartet werden soll)

systemctl is-enabled servicename.service #Abfrage, ob der Dienst beim Booten gestartet wird

So erreichen Sie eine hohe Verfügbarkeit durch die Kombination von Keepalived mit Nginxsystemctl enable *.service # Führen Sie den Dienst beim Booten aus. Systemctl Disable *.service #Startvorgang abbrechen

  • systemctl restart *.service #重启服务

  • systemctl reload *.service #重新加载服务配置文件

  • systemctl status *.service #查询服务运行状态

  • systemctl --failed #显示启动失败的服务

  • 注:*代表某个服务的名字,如http的服务名为httpd

    例如在centos 7 上安装http

    [root@centos7 ~]# yum -y install httpd

    启动服务(等同于service httpd start)  systemctl start httpd.service
    停止服务(等同于service httpd stop)  systemctl stop httpd.service
    重启服务(等同于service httpd restart) systemctl restart httpd.service
    查看服务是否运行(等同于service httpd status) systemctl status httpd.service 开机自启动服务(等同于chkconfig httpd on)  systemctl enable httpd.service
    开机时禁用服务(等同于chkconfig httpd on) systemctl disable httpd.service

    ps -ef | grep nginx #查看服务进程

    #非systemctl配置开机启动:chmod +x /etc/rc.d/rc.local
    #打开rc.localvi /etc/rc.local
    #加入启动脚本其中路径一定要用全路径如:/usr/local/nginx/sbin/nginx

    Das obige ist der detaillierte Inhalt vonSo erreichen Sie eine hohe Verfügbarkeit durch die Kombination von Keepalived mit Nginx. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Stellungnahme:
    Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen