問題: MySQL データベース用の ClearDB を使用して、Azure にセットアップされた WordPress のスケーラブルなインスタンス (VM ではなく、Microsoft Azure の事前構成された WordPress Web アプリケーション インスタンス) があります。Azure BLOB ストレージ WordPress プラグインをテストしましたが、Azure ストレージがセットアップされている CDN からのデータを表示するように機能します。
さまざまな地域の場所での需要を満たすために、WordPress インスタンスをスケールアップできるようにしたいと考えています。現在、私たちのセットアップ (Azure ではなく、異なる地理的データ センターで Ultima によってホストされている 4 つの VM を使用) には、ステージング サーバー (米国内) と、EU、AU、および米国内の 3 つの地域サーバーがあります。さまざまな地域で需要が増加するにつれて (3 つ以上でも問題ありません。特定の国に到達できる場合は素晴らしいことです)、WordPress サイトのインスタンスをその地域でスピンアップし、ユーザーが要求を行っているサーバーに最も近いサーバーに誘導する必要があります。彼らの地域。
Traffic Manager を使用してリージョンを定義し、サーバー インスタンスにそのリージョン内の別のインスタンス ノード (VM ではない) を起動するように指示するにはどうすればよいですか?
そのリージョンのノードがそのリージョンに最も近い ClearDBのコピーを使用していることを確認するにはどうすればよいですか(すべての Web フロント エンド
が米国リージョンの 1 つの場所にある DB にアクセスするのは望ましくありません)Traffic Manager を使用して、CDN (Azure ストレージ) からプルされたデータが、
要求されたリージョンに最も近いノードからプルされることを確認するにはどうすればよいですか?
ステージング サーバーをセットアップしてパブリック ノードに公開し、地域固有の場所での需要に合わせてスケールアップするにはどうすればよいですか?
現在、グローバルな WordPress フェールオーバー セットアップがどのように行われているかをお読みいただければ、私の質問はより理にかなっています。
現在の構成とバック ストーリー 現在、次のように、3 つの地域の場所でホストされているさまざまな Ultima がホストする VM で、WordPress サイトをグローバルにセットアップしています。
4 サーバー
- ステージング- 米国のオフィスの近くにあるローカル ステージング サーバー VM
- EU - EU 地域で Ultima がホストするヨーロッパのサーバー。ステージング サーバーの Hyper-V インスタンスです。
- AU - AU 地域で Ultima がホストするオーストラリアのサーバー。ステージング サーバーの Hyper-V インスタンスです。
- US - 米国地域で Ultima がホストする北米サーバー。ステージング サーバーの Hyper-V インスタンスです。
WordPress:バージョン4.0.1 がすべてのバージョンにインストールされています (マルチサイトではありません)続く:
- DB_NAME
- DB_USER
- DB_PASSWORD
- DB_HOST
- WP_HOME
- WP_SITEURL
例: 当社の EU サーバー IE eu.contoso.com に対する要求では、一致する CASE ステートメントにこれらの値が含まれます。
switch ($ip) {
case (strstr ($ip, '255.255.255.255') == true): // EU server request, set to port 3306
$port = '3306';
break;
}
$host = $ip . ':' . $port;
SWITCH ($hostname) {
case 'eu.contoso.com': //This is the EU server
define('DB_NAME', 'main_wp_website');
/** MySQL database username */
define('DB_USER', 'main_website_user');
/** MySQL database password */
define('DB_PASSWORD', 'main_website_password');
/** MySQL hostname */
define('DB_HOST', $host);
define('WP_HOME', 'http://eu.contoso.net');
define('WP_SITEURL', 'http://eu.contoso.net');
break;
}
理由:これにより、ユーザーは別のリクエスト ポイントから WordPress サイトに入り、そのリージョンの DB への DB アクセスを適切に設定し、URL をリージョン固有のルート ドメインで書き換えることができます。すべてのケースのすべてのプロファイルは、すべてのサーバーの wp-config.php ファイルに存在するため、サーバー間で同一です。
MySQL: ステージングからグローバル リージョナル サーバーへのマスター/スレーブ レプリケーション (各サーバーの my.ini 内) での MySQL サーバー セットアップのバージョン 6
- ステージング- GTID を使用してマスター サーバーとしてセットアップし、グローバル リージョナル サーバーへの一方向のレプリケーション同期を行います。
- EU、AU、US - すべて読み取り専用モードでスレーブとして設定。ステージング サーバーからのレプリケーションの更新を受け入れますが、ローカルで送信されたデータを公開することはできません。
ファイル ストレージ: これは、Web サイト ディレクトリ、WordPress コンテンツ ディレクトリ (プラグイン、テーマ、アップロードなど) です。
Syncovery という製品を使用して、これらのフォルダーを監視し、変更を検出して、FTP 経由でファイルを他のサーバーの同様のフォルダーに自動的に同期します。
Syncovery が変更を検出するのに時間がかかりすぎる場合、BeyondCompare を手動同期に使用します。
トラフィック ルーティング: EdgeDirectorと 呼ばれる DNS サービスを使用します。これは、要求している IP から地域を検出し、要求しているユーザーをその地域に最も近いサーバーにルーティングします。
防止したいこと 現在、ファイルの同期に問題があります (データベースの複製は問題なく、問題はありません)。当社の同期プログラムは、何十万ものファイルを常にスキャンして同期する必要があり、ファイルの変更が検出されると、スキャンが開始され (時間がかかります)、検出されたファイルの相違点がコピーされます (ファイル サイズによっては時間がかかります)。 )。スキャンが開始された後に別のファイルまたはフォルダーが変更された場合、最初のスキャン/ファイルのコピーが完了するまで待つ必要があります。これにより、公開されたコンテンツをステージング サーバーからパブリック クラスターにプッシュする際に長い遅延が発生しています。
また、4 つの異なるインスタンス/サーバーを維持する必要もありません。地域固有の場所での需要に基づいてパブリッシュし、スケールアップ/ダウンするステージング インスタンスとパブリック インスタンスが最大で 1 つ必要です。
- ステージング/パブリック インスタンスのセットアップは Azure でどのように機能しますか?
- ステージング インスタンスとパブリック インスタンスの両方を構成するにはどうすればよいですか? サーバー名とDB名以外はまったく同じだと思います。
- ステージングからパブリックに公開する変更を実行するにはどうすればよいですか?
上記の需要に基づいて、さまざまな地域でグローバルに利用できるスケーラブルな WordPress サイトを作成する簡単な方法はありますか? 私は Azure を初めて使用し、古い方法論が新しいクラウド環境で必ずしも最適であるとは限らないことに気付きました。
WordPress サイトを Azure で運用する方法についてはよく理解しており、ClearDB と Azure BLOB Storage を使用して動作するインスタンスを既に持っています。現在のセットアップのように地域的に拡張する方法、または地域的に多様な地域のユーザーの需要を満たす新しい方法を知りたいだけです。ユーザーは常に最も近いサーバーにアクセスし、必要に応じて自動的にプロビジョニングおよびスケールアップされます。発生します。