ホームページ  >  記事  >  バックエンド開発  >  PHP とキープアライブを使用したリアルタイムのハートビート検出

PHP とキープアライブを使用したリアルタイムのハートビート検出

WBOY
WBOYオリジナル
2023-06-28 08:30:261927ブラウズ

インターネット技術の発展に伴い、システムの高可用性を確保するために、コンピュータ システムを継続的に最適化および改善する必要があります。その中でもハートビート検出はサーバーがオンラインかどうか、ネットワークが正常かどうかを検出するために使用される非常に重要な機能です。この記事では、PHPとキープアライブを使ってリアルタイムハートビート検出を実装する方法を紹介します。

1. Keepalive の概要

Keepalive を紹介する前に、まず TCP の 3 ウェイ ハンドシェイク プロセスを理解しましょう。 TCP 接続の確立には 3 ウェイ ハンドシェイクが必要です。つまり、クライアントは SYN パケットをサーバーに送信し、サーバーは受信後に SYN ACK パケットを送信し、最後にクライアントは別の ACK パケットを送信します。無事に確立されました。

クライアントがリクエストを送信したときにサーバーが応答しない場合、クライアントは接続が切断されたと判断します。しかし、ネットワークの変動やサーバーの混雑によりサーバーが応答できない場合があり、その際に接続が切断されるとユーザーエクスペリエンスに影響を与えるため、接続を維持する仕組みが必要になります。

Keepalive は、TCP 上に構築されたネットワーク プロトコルで、接続がまだ生きているかどうかを検出するために使用されます。一定期間接続がアイドル状態になると、キープアライブはサーバーに検出パケットを送信し、それでもサーバーが応答しない場合は、接続が切断されたと判断します。

2. PHP を使用してハートビート検出を実装する

ハートビート検出を実装するには 2 つのスクリプトが必要です。1 つはクライアント スクリプト (Client.php) で、ハートビート リクエストをサーバーに送信するために使用されます。もう 1 つはハートビート リクエストを受信し、適切な応答で応答するサーバー スクリプト (Server.php) です。具体的な実装を見てみましょう。

クライアント スクリプト (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 秒发送一次心跳请求
}
?>

上記のコードでは、curl を使用して HTTP リクエストを送信し、定期的にハートビート リクエストをサーバーに送信し、sleep() 関数を使用してスケジュール送信を実装します。

サーバー スクリプト (Server.php)

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

上記のコードでは、サーバー スクリプトは、クライアントから送信されたリクエストを受信した後、単純な成功メッセージで応答します。

サーバーを実行し続けるために、サーバー スクリプトの実行環境として Nginx や Apache に似たサーバー ソフトウェアを使用できます。

3.キープアライブを使用してハートビート検出を実装する

キープアライブを使用してハートビート検出を実装するには、キープアライブ ソフトウェアと関連構成のインストールが必要です。 CentOS システムでは、次のコマンドを使用してキープアライブをインストールできます:

sudo yum install ipvsadm keepalived -y

次に、キープアライブ構成ファイル (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
    }
  }
}

上記の設定ファイルは、MASTER ステータスの VRRP インスタンス (VI_1) を定義し、仮想 IP アドレス (192.168.10.10) を定義し、ハートビート検出スクリプトとして追跡スクリプト (chk_http_port) を設定し、最後に仮想サーバー(IP アドレスは 192.168.10.10、ポートは 80)と実サーバー(IP アドレスは 192.168.10.11、ポートは 80)が定義されています。

次は追跡スクリプト (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

上記のスクリプトは、サーバーが生存しているかどうかを検出するために使用されます。エラーが発生した場合、キープアライブは停止されます。

4. 概要

この記事では、PHP と Keepalive を使用してリアルタイムのハートビート検出を実装する方法を紹介しました。 PHP は、curl を介して HTTP リクエストを送信してハートビート リクエストをシミュレートできますが、Keepalive は VRRP および IPVS を介してハートビート検出を実装できます。この方法により、ネットワーク アプリケーションの高可用性が向上し、サーバーの状態をリアルタイムで監視できるため、非常に便利なネットワーク ツールです。

以上がPHP とキープアライブを使用したリアルタイムのハートビート検出の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。