高可用性を目的としてWebサーバーを複製することを計画しています。サーバーはHyper-VでUbuntu15.04仮想マシンとして実行されており、MariaDB 10.0、Apache 2.4、およびPHP-FPM5.6がインストールされています。
2番目の仮想マシンは、この仮想マシンの直接コピーとして起動しますが、米国に配置されます。最初の仮想マシンはヨーロッパにあります。 (待ち時間は約80〜120ミリ秒になります)
サーバーの同期を維持して、両方が同じコンテンツをクライアントに提供できるようにし、クライアントが最も近いサーバーを使用できるようにします(このため、Route 53を使用します)
サーバー間のデータ交換が安全であり、データベース内の連絡先の詳細やその他の情報を保護し、/ var/wwwディレクトリ内のファイルが変更されないようにすることが重要です。
これには次のオプションを使用することを検討しました。
SSL(TLS)
データベースとファイルのレプリケーションの両方にSSHを使用することを検討しました。ただし、ファイル複製部分にどのアプリケーションを使用するかはわかりません。
SSLはデータベースの複製に使用できますが、証明書の生成が必要であり、時々交換する必要があり、費用がかかる可能性があります。
私の最後のオプションはopenvpnを使用することですが、すべてのトラフィックをルーティングする代わりに、これを追加のネットワークとして設定できるかどうかはわかりません。この方法でも、証明書ファイルの生成が必要なようです。
独自のプライベート通信に有料のTLS証明書は必要ありません。独自のCAをセットアップし(非常に長続きする証明書を使用して、侵害された場合はCA全体を破棄するだけです)、サーバーにそれを信頼させることができます。その後、さまざまなサービスに対して必要な数の証明書を発行できます。有料証明書が必要になるのは、たとえばWebサイトの訪問者など、リモートホストにCAを確実に信頼させることができない場合のみです。
単一のサービスを使用する必要があり、それがTLSをサポートしている場合(MySQLのように)、それに合わせて、ファイアウォールレベルでサーバーのIPからの接続のみを許可することにより、セキュリティの層を追加します。
複数のサービスが必要な場合は、VPNソリューションを使用することをお勧めします。 OpenVPNで時間を無駄にしないでください。カーネルにはIPSecサポートが組み込まれており、それを使用できます。さらに、Windowsですぐにサポートされるため、このようなサーバーを展開した場合でも、簡単にセットアップできます。
それは簡単な部分でした。本当に難しいのは、アプリのファイルの同期を維持することです。アプリがデータベースのみを使用する場合は簡単ですが、汎用CMSの場合は、何らかの理由で独自のファイルも変更する可能性があります(プラグインの更新例)または新しいもの(ユーザーがアップロードしたコンテンツなど)を作成し、それらを同期させるための信頼できる方法がわかりません。頭に浮かぶ唯一の解決策は、NFS(ファイルをホストするサーバーが1つしかないが、HA要件に反する)またはGlusterFSのいずれかであり、どちらもこの種の遅延ではパフォーマンスが大幅に低下します。
rsync
は、ファイルの同期を維持するための優れたツールです。次のように、SSH(および公開鍵)と組み合わせて使用します。
rsync -az -e ssh --delete /var/www otherserver:/var/www
複数のサーバーの場合、rsync
を複数回使用するのが最適なオプションです。別のオプションはpdcp -r
ですが、デルタ転送を行う代わりに、毎回すべてのファイルをコピーする必要があります。つまり、少量のデータと多くのサーバーに適しています。
データベースレプリケーションを最適に行う方法は、アプリケーションの機能によって大きく異なります。 MariaDBのドキュメントやその他の質問には、このあたりに多くの良いアドバイスがあります。
あなたは言及しませんが、私はあなたがマルチマスターのセットアップの後であると思います。これにより、マスタースレーブデータベースのセットアップが除外されます。
セキュリティにどの技術を使うかは、あなたの心配が最も少ないと思います。
1。データベース
マルチマスターデータベースのセットアップを維持することは同期が難しいです。 MariaDB w/Galera Clusterのようなマルチマスター(アクティブ/アクティブ)データベースセットアップを使用できますが、地理的な距離を考慮すると、これがこれほど良いアイデアかどうかはわかりません。すべての書き込みは、すべてのデータベースノードに同期されます。レイテンシーはデータベースのパフォーマンスに大きく影響します。 Galeraなどのデータベースクラスターは、通常、単一のLAN内の適切な候補として説明されています。ただし、パフォーマンスの観点から、マルチマスターデータベースクラスターは、データベースノードがWAN内の複数の物理的な場所に分散している「実際の」高可用性セットアップに関しては、一般的に悪化していると説明されています。マルチマスターデータベースのセットアップに入る前に、まずトピックを読んでください。 スケールアウトブログ を見てみましょう。
別のアプローチを取り、データベースの同期を維持できるSymmetricDSを調べることもできます。トリガーを使用してデータベースのCRUD操作をキャプチャします。スキーマの変更、ユーザー、または純粋なデータ以外のものは複製されません。ただし、これは非同期レプリケーションであり、たとえば、 MariaDBGaleraクラスターのように自動インクリメントされた主キーはそうなります。
2。ファイル
中央のNFSサーバーを使用することもできますが、それでは複数のマスターの目的が損なわれます(単一障害点はありません)。私はcsync2(lsyncdを使用)を使用して、Webノードを成功と同期させました(内部ではrsync)。
一般的なアドバイス
これは、パフォーマンスまたは高可用性のために行っていますか?パフォーマンスのためにそれを行う場合、単一の場所と前のVarnishサーバーがあなたを遠くに連れて行きます。まだ待ち時間があることはわかっていますが、キャッシュを通じてサーバーのオーバーヘッドを「削減」することができます。他の場所にVarnishサーバーを追加することもできます。複雑さが大幅に軽減されます(これを過小評価しないでください。シンプルにしてください)。これにアセット(CSS、js、画像など)のCDNを追加すると、ヨーロッパのユーザーと同じくらい優れたユーザーエクスペリエンスを米国のユーザーに提供できる可能性が高くなります(ヨーロッパにサービスを置く場合)。
高可用性のためにこれを行う場合は、レプリケーションを導入して複雑さを追加する必要があります。