Heim >Backend-Entwicklung >PHP-Tutorial >Heartbeat-Erkennung in Echtzeit mit PHP und Keepalive

Heartbeat-Erkennung in Echtzeit mit PHP und Keepalive

WBOY
WBOYOriginal
2023-06-28 08:30:262107Durchsuche

Mit der Entwicklung der Internet-Technologie müssen Computersysteme ständig optimiert und verbessert werden, um eine hohe Systemverfügbarkeit sicherzustellen. Unter diesen ist die Heartbeat-Erkennung eine sehr wichtige Funktion, mit der festgestellt wird, ob der Server online ist und ob das Netzwerk normal ist. In diesem Artikel stellen wir vor, wie man eine Echtzeit-Heartbeat-Erkennung mit PHP und Keepalive implementiert.

1. Einführung in Keepalive

Bevor wir Keepalive vorstellen, wollen wir zunächst den Drei-Wege-Handshake-Prozess von TCP verstehen. Der Aufbau einer TCP-Verbindung erfordert einen Drei-Wege-Handshake, dh der Client sendet ein SYN-Paket an den Server, der Server sendet nach dem Empfang ein SYN + ACK-Paket und schließlich sendet der Client ein ACK-Paket, sodass die Die Verbindung wurde erfolgreich hergestellt.

Wenn der Client eine Anfrage sendet und der Server nicht antwortet, geht der Client davon aus, dass die Verbindung getrennt wurde. Manchmal kann der Server jedoch aufgrund von Netzwerkschwankungen oder ausgelasteten Servern nicht reagieren. Daher ist ein Mechanismus erforderlich, um die Verbindung aufrechtzuerhalten.

Keepalive ist ein auf TCP basierendes Netzwerkprotokoll, das erkennt, ob eine Verbindung aktiv ist. Wenn eine Verbindung eine Zeit lang inaktiv ist, sendet Keepalive ein Erkennungspaket an den Server. Wenn der Server immer noch nicht antwortet, stellt er fest, dass die Verbindung getrennt wurde.

2. Verwenden Sie PHP, um die Heartbeat-Erkennung zu implementieren.

Um die Heartbeat-Erkennung zu implementieren, benötigen Sie zwei Skripte: eines ist das Client-Skript (Client.php), mit dem regelmäßig Heartbeat-Anfragen an den Server gesendet werden, und das andere ist das Serverskript (Server.php), um Heartbeat-Anfragen zu empfangen und mit entsprechenden Antworten zu antworten. Werfen wir einen Blick auf die konkrete Implementierung.

Client-Skript (Client.php)

<?php
while(true) {
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, 'http://localhost:8000/');//服务器地址
  curl_setopt($ch, CURLOPT_HEADER, false);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_exec($ch);
  curl_close($ch);
  sleep(5);//每 5 秒发送一次心跳请求
}
?>

Im obigen Code wird Curl zum Senden von HTTP-Anfragen, zum regelmäßigen Senden von Heartbeat-Anfragen an den Server und die Funktion „sleep()“ zum Implementieren des geplanten Sendens verwendet.

Serverskript (Server.php)

<?php
header('Content-Type: text/plain');
echo "OK
";//响应成功信息
?>

Im obigen Code antwortet das Serverskript mit einer einfachen Erfolgsmeldung, nachdem es die vom Client gesendete Anfrage empfangen hat.

Um den Server am Laufen zu halten, können Sie eine Serversoftware ähnlich Nginx oder Apache als Laufumgebung für Serverskripte verwenden.

3. Verwenden Sie Keepalive zur Implementierung der Heartbeat-Erkennung.

Die Verwendung von Keepalive zur Implementierung der Heartbeat-Erkennung erfordert die Installation der Keepalive-Software und zugehöriger Konfigurationen. Unter dem CentOS-System kann Keepalive über den folgenden Befehl installiert werden:

sudo yum install ipvsadm keepalived -y

Das Folgende ist ein Beispiel der Keepalive-Konfigurationsdatei (keepalived.conf):

vrrp_instance VI_1 {
  state MASTER
  interface eth0
  virtual_router_id 51
  priority 101
  authentication {
    auth_type PASS
    auth_pass 123456
  }
  virtual_ipaddress {
    192.168.10.10
  }
  track_script {
    chk_http_port
  }
}

vrrp_script chk_http_port {
  script "/usr/local/bin/alive.sh"
  interval 5
  weight 2
}

virtual_server 192.168.10.10 80 {
  delay_loop 6
  lb_algo rr
  lb_kind DR
  protocol TCP
  real_server 192.168.10.11 80 {
    weight 1
    TCP_CHECK {
      connect_timeout 10
      nb_get_retry 3
      delay_before_retry 3
      connect_port 80
    }
  }
}

Die obige Konfigurationsdatei definiert a VRRP-Instanz (VI_1), der Status ist MASTER; definieren Sie eine virtuelle IP-Adresse (192.168.10.10) und legen Sie ein Tracking-Skript (chk_http_port) als Heartbeat-Erkennungsskript fest; definieren Sie schließlich einen virtuellen Server (IP-Adresse ist 192.168.10.10, Port). ist 80) und definieren Sie Erstellt einen echten Server (IP-Adresse 192.168.10.11, Port 80).

Das Folgende ist ein Beispiel für ein Tracking-Skript (alive.sh):

#!/bin/bash
A=`curl -I -s -o /dev/null http://localhost`
if [ "$?" != "0" ] || [ "$A" == "" ]; then
  /etc/init.d/keepalived stop
fi
exit 0

Das obige Skript wird verwendet, um zu erkennen, ob der Server aktiv ist, und wenn der Server nicht antworten kann oder mit einem Fehler antwortet, stoppt er Keepalive .

4. Zusammenfassung

In diesem Artikel haben wir vorgestellt, wie man mit PHP und Keepalive eine Echtzeit-Heartbeat-Erkennung implementiert. PHP kann HTTP-Anfragen über Curl senden, um Heartbeat-Anfragen zu simulieren, während Keepalive die Heartbeat-Erkennung über VRRP und IPVS implementieren kann. Diese Methode kann die hohe Verfügbarkeit von Netzwerkanwendungen verbessern und den Serverstatus in Echtzeit überwachen. Es ist ein sehr nützliches Netzwerktool.

Das obige ist der detaillierte Inhalt vonHeartbeat-Erkennung in Echtzeit mit PHP und Keepalive. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn