従来の単一ノード アーキテクチャでは、アプリケーションに対するすべてのリクエストが同じサーバーに送信されます。このアーキテクチャは比較的単純ですが、単一障害点のリスクがあります。アプリケーションが配置されているサーバーがダウンしている場合、すべてのリクエストは失敗します。
この問題を解決するには、アプリケーションを複数のサーバーにデプロイして、高可用性 (HA) モードとフェイルオーバーを実現する必要があります。この記事では、Redis と Sentinel を使用して高可用性とフェイルオーバーを実装する方法について説明します。
Redis は、キャッシュ、キューイング、リアルタイム分析、メッセージングに一般的に使用される高速インメモリ データ ストレージ システムです。 Redis はシングルスレッド設計を特徴とし、メモリをストレージとして使用します。これにより、Redis に優れたパフォーマンスとスケーラビリティが与えられます。
Sentinel は、Redis の高可用性ソリューションです。 Redis インスタンスを監視し、プライマリ ノードに障害が発生した場合は自動的にバックアップ ノードに切り替えることができます。この自動フェイルオーバーにより、Redis インスタンスが常に利用可能になります。
ここでは、Redis と Sentinel を使用して高可用性とフェイルオーバーを実現する手順を示します。
最初のステップ、Redis と Sentinel のインストール
CentOS では、次のコマンドを使用して Redis と Sentinel をインストールできます。
yum install redis sentinel
Ubuntu では、次のコマンドを使用できます。 Redis と Sentinel をインストールするには:
apt-get install redis sentinel
2 番目のステップは、Redis 構成ファイルを変更することです
プライマリ ノードとバックアップ ノードで、Redis 構成ファイルを変更する必要があります。 CentOS では、構成ファイルは /etc/redis.conf
にあり、Ubuntu では、構成ファイルは /etc/redis/redis.conf
にあります。
構成ファイルでは、bind
パラメータをノードの IP アドレスに設定する必要があります。任意の IP からのクライアントが Redis に接続できるようにするには、bind
パラメーターを 0.0.0.0 に設定します。
承認されたユーザーのみが Redis にアクセスできるようにするには、requirepass
パラメーターをパスワードに設定する必要もあります。
最後に、daemonize
パラメータを yes に設定して、Redis がバックグラウンドで実行されていることを確認します。
bind 192.168.0.1 requirepass mypassword daemonize yes
バックアップ ノードの場合は、slaveof
パラメータをプライマリ ノードの IP アドレスとポート番号に設定する必要もあります。
slaveof 192.168.0.1 6379
3 番目のステップ、Sentinel 構成ファイルの変更
CentOS では、Sentinel 構成ファイルは /etc/redis-sentinel.conf
にあり、Ubuntu では、 Sentinel の設定 ファイルは /etc/redis/sentinel.conf
にあります。
Sentinel 設定ファイルでは、bind
パラメータを設定して、Sentinel がクライアントからリクエストを確実に受信できるようにする必要があります。任意の IP アドレスのクライアントが Sentinel に接続できるようにしたい場合は、bind
パラメータを 0.0.0.0 に設定します。
Redis インスタンスを監視するには、sentinel Monitor
パラメーターを設定する必要もあります。このパラメータには、Redis インスタンスの名前、IP アドレス、ポート番号、フェイルオーバーしきい値が含まれます。
bind 192.168.0.2 sentinel monitor mymaster 192.168.0.1 6379 2
この例では、Sentinel は mymaster
という名前の Redis インスタンスを監視します。プライマリ ノードに障害が発生した場合、Sentinel はバックアップ ノード上で新しい Redis インスタンスを自動的に起動し、それをプライマリ ノードに昇格させます。
4 番目のステップ、Redis と Sentinel の開始
各ノードで Redis と Sentinel を開始します:
systemctl start redis systemctl start redis-sentinel
マスター ノードが開始されると、Sentinel は Redis インスタンスの監視を開始します。 。プライマリ ノードに障害が発生した場合、Sentinel はバックアップ ノード上で新しい Redis インスタンスを自動的に起動し、それをプライマリ ノードに昇格させます。このプロセス中に、クライアントは自動的に新しいマスター ノードに切り替わり、アプリケーションは通常どおり動作し続けます。
次のコマンドを使用して Redis インスタンスのステータスを確認できます:
redis-cli -h 192.168.0.1 -p 6379 ping
次のコマンドを使用して Sentinel のステータスを確認できます:
redis-cli -h 192.168.0.2 -p 26379 sentinel slaves mymaster
この例ではたとえば、Sentinel をポート 26379 の 192.168.0.2 に接続し、mymaster
という名前の Redis インスタンスのバックアップ ノードを確認します。
概要
この記事では、Redis と Sentinel を使用して高可用性とフェイルオーバーを実現する方法を紹介しました。アプリケーションを複数のサーバーにデプロイし、自動フェイルオーバーを使用することにより、プライマリ ノードに障害が発生した場合でもアプリケーションが適切に動作し続けることを保証できます。
これにより、アプリケーションの可用性が向上し、単一障害点のリスクが軽減されます。この記事がお役に立てば幸いです。Redis と Sentinel の使用の幸運をお祈りします。
以上がPHP 開発: Redis と Sentinel を使用した HA モードとフェイルオーバーの実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。