私は Amazon Web Services を使用しており、負荷分散と災害復旧のために適度なシステムをセットアップしようとしています。アプリケーションは PHP ベースで、フロント エンドに Zend Framework 2 (ZF2)、ローカルの memcached サーバー、および RDS を介した MySQL を使用します。すべてのサーバーは Amazon Linux を実行しています。
2 つの異なる AWS の「可用性ゾーン」で 2 つのサーバーを使用するようにエラスティック ロード バランサーを構成しようとしています。あるサーバーがシャットダウンして別のサーバーが引き継ぐことをシームレスに許可するには、共有 PHP セッションが必要です。そこで、ZF2 で PHP データベース セッションをセットアップしました。
一般に、AWS ゾーンが停止する可能性は、個々のサーバーまたはアプリケーション自体に致命的な問題が発生する可能性よりもかなり低いと思います。だから私は別のアプローチを検討しています:
- 同じアベイラビリティ ゾーン内のすべてのサーバー
- 別の AWS ElastiCache サーバー (基本的に memcached であり、ゾーン間で使用することはできません)
- キャッシュに格納された PHP セッション (memcached の組み込みサポート)
- 別のゾーンに 1 つの緊急サーバー – まれにゾーンが停止した場合、別のサーバーを使用するように DNS レコードを変更します。
これは、DR と負荷分散に対する適切な標準的なアプローチですか? ゾーンが停止した場合の DR ソリューションは好きではありませんが、ゾーンがそれほどダウンするのを見たことがありません。設計が簡素化されれば、おそらくそのレベルのリスクに対処できるでしょう。ロード バランサーがサーバーに重み付けできる場合は、1 つのゾーンにすべての重み付けを適用し、バックアップ サーバーの重み付けをはるかに低くします。