Nginx + WordPress ロードバランサー篇

AWS運用自動化サービス「Cloud Automator」
この記事は1年以上前に書かれたものです。
内容が古い可能性がありますのでご注意ください。

こんにちは。CSチームの坂本です。

今回はNginxをロードバランサーとして利用して負荷分散を行うことでWordpressを高速化したいと思います。

いままでの記事
Nginx + WordPress
Nginx + WordPress 「Gzip Precompression」モジュール篇
Nginx + WordPress proxy cache篇

※EC2の環境、Nginx以外のMySQL、PHP、PHP-FPMの設定などはいままでと同様です。

目次

  1. 今回の構成
  2. ロードバランサーの設定
  3. 設定ファイル/ロードバランサー(default.conf)
  4. 設定ファイル/Webサーバー(default.conf)
  5. 比較

1. 今回の構成

今回の構成は以下の図のようなイメージです。

フロントエンドにNginxをロードバランサーとして置いて、バックエンドに3台のWebサーバーを置いています。

 

2. ロードバランサーの設定

Nginxをロードバランサーとして使う場合、特にモジュールを追加する必要はありません。

設定もシンプルでわかりやすく、とても簡単です。

フロントエンドのNginxのupstreamブロックの設定で、バックエンドのWebサーバーを以下のように指定します。

この設定のみでロードバランサーの下に置くWebサーバーの数を簡単に増減できます。

※振り分け方法はラウンドロビンです。

バックエンドのサーバーにスペックの違いがある場合などは、以下のようにweightを設定をすれば、振り分けるサーバーの重み付け(リクエストを振り分ける割合)の設定ができます。

例えば、以下の設定をおこなった場合、「54.XXX.XXX.41」には12リクエスト、「54.XXX.XXX.42」には13リクエスト、weight=2を設定した「54.XXX.XXX.43」には25リクエストが振り分けられるイメージです。

同じIPアドレスからのアクセスを同じサーバーに振り分けたい場合は、ip_hashを追加します。

※こちらの設定は重み付けの設定と組み合わせることはできません。

 

3. 設定ファイル/ロードバランサー(default.conf)

フロントエンドのロードバランサーのNginxの設定です。

/etc/nginx/conf.d/default.conf

 

4. 設定ファイル/Webサーバー(default.conf)

バックエンドのWebサーバーのNginxの設定です。

/etc/nginx/conf.d/default.conf

 

5. 比較

今回のロードバランサー1台+Webサーバー3台で負荷分散をした場合と前回までのproxy cacheの環境の速度を比較してみたいと思います。

※今回の環境ではproxy cacheの設定をしていません。

ローカルの環境からabコマンドでベンチーマークの測定をした結果です。

※サーバーは両方ともEC2でZoneはap-southeast-1b、Typeはt1.microとなっています。

ロードバランサー

すべてのリクエストが完了するのにかかった時間は約2.6秒でした。

Time taken for tests: 2.668697 seconds

proxy cache

すべてのリクエストが完了するのにかかった時間は約1.2秒でした。

Time taken for tests: 1.284296 seconds

やはりproxy cacheの環境の方が速いですが、負荷分散した環境では2秒台となり、5秒以上かかっていた何も対応をおこなっていない1台構成の環境よりは高速化します。

proxy cacheの環境との比較ですと速さ、コスト共に分が悪いですが、通常はproxy cacheと負荷分散の両方を組み合わせて利用することになると思います。

何よりもNginxのロードバランサーの設定は上記のようにシンプルで簡単なところがいいですね。

このようにNginxを使うと簡単にサイトを高速化できることがわかりました。ただ、このままの構成ですと運用上問題となる点があります。

WordPressの管理画面から画像をアップロードした場合のデータの保存先をどこにするか、SPOF(単一障害点)となっている箇所(DBとロードバランサー)をどうするか、などです。

その解決方法を先日のテラスカイ様との勉強会で説明させていただきました。

「勝手にAWSクラウドデザインパターン キャンペーンサイト篇」

次回は、上記のスライドに補足説明を加えて、AWSのサービスを使ったWordPressのサイトのカイゼンの流れを説明したいと思います。

 

AWS運用自動化サービス「Cloud Automator」