Memcached 用 Amazon ElastiCache を使用して WordPress を高速化する

Memcached 用 Amazon ElastiCache を使用して WordPress サイトのパフォーマンスを向上する方法について、学んでください。

WordPress は、洗練されたウェブサイトを作成することができる、人気のあるオープンソースコンテンツマネジメントシステム (CMS) です。WordPress はフレンドリーなブラウザインターフェイスで簡単にサイトを編集することができ、バックエンドデータベース (通常 MySQL) にコンテンツを保存します。WordPress での簡単なウェブサイトの構築を経験するには、ページの読み込みが速いことを確認しなくてはいけません。パワフルなデータベースサーバーでデータを素早くフェッチすることは問題の解決につながりますが、コストが大幅にかかることが考えられます。

Memcached は、データをミリ秒で検索できる、オープンソースの分散型メモリ内キー値ストアです。Memcached でサイトのインフォメーションを得ることによって、コストを管理しつつ、サイトのパフォーマンスとスケーラビリティを向上することができるようになります。

このチュートリアルでは、Memcached 用 Amazon ElastiCache を使用して WordPress サイトのパフォーマンスを向上する方法について説明します。Memcached 用 ElastiCache では、完全マネージド型の Memcached を提供するので、ハードウェアのプロビジョニング、セットアップ、設定作業、モニタリング、ソフトウェアへのパッチ適用、障害復旧といった管理タスクが不要になります。このチュートリアルでは、Linux の知識が多少必要になります。本チュートリアルで作成し、使用されたリソースは AWS 無料利用枠の対象となります。

注: チュートリアルを簡単に進めるため、WordPress と Memcached インスタンスを AWS アカウントの規定の VPC (仮想プライベートクラウド) で作成することを忘れないようにしてください。

Memcached 用 Amazon ElastiCache

セキュリティ、スケーラビリティを備えた完全マネージド型 Memcached

ステップ 1: Memcached インスタンス用の ElastiCache をセットアップする

まず、Memcached インスタンスのローンチが必要です。AWS コンソールを開いて「ElastiCache」を検索するか、このリンクを使って直接 ElastiCache コンソールを開いてください。ElastiCache ダッシュボードで、「今すぐ始める」をクリックし Memcached を選びます。名前を「myMemcached」で入力し、cache.t2.micro ノードタイプを選んでください (AWS 無料利用枠の利用資格を確認してください)。エンジンのバージョンとポートは、規定の設定のままにしてください。今チュートリアルの目的のため、Security Group は [default] のままにしてください。

Subnet Group が無い場合、作成する必要があります。作成するには、ElastiCache コンソールで [Advanced Memcached settings] オプションを展開し、[Create new for subnet group] を選び、グループに名前をつけ、グループ内での希望のサブネットを選んでください。

数分後、クラスターのステータスが [Available] になります。Configuration Endpoint のノートをとっておいてください (以下のように表示されます: mymemcached.chty1z.cfg.use2.cache.amazonaws.com:11211)。

ステップ 2: WordPress on EC2 をセットアップする

次に、WordPress ウェブサイトのローンチチュートリアルに従って事前にインストールした WordPress に EC2 をセットアップします。このチュートリアルでは、既定の Security Group セッティングを使ってください。これによって、規定の VPC に新しい Security Group が作られます。WordPress の EC2 インスタンスは、ElastiCache インスタンスと同じである必要があります。

注: チュートリアルのステップ 2 では、新しい EC2 インスタンスをローンチする際 SSH キーの作成が必要です。これによって EC2 インスタンスと接続できるようになるので、Memcached クライアントのインストールと設定が可能になります。プライベートキーを安全な場所にダウンロードして保存することを忘れないでください。

ステップ 3: WordPress インスタンスが Memcached インスタンスにアクセスできるようにする

AWS コンソールで「VPC」を検索して VPC ダッシュボードを開いてください。ページの左側で [Security Groups] タブをクリックし、Memcached インスタンスのセキュリティグループを選択します。この情報は、ElastiCache ダッシュボードで Memcached インスタンスの詳細を確認することで見つけることができます。ページの下部で [Inbound Rules] タブをクリックし、[Edit] をクリックしてください。WordPress インスタンスの Security Group ID をソースとして使用して新しい Custom TCP Rule を追加し、ポート 11211 へアクセスできるようにします。WordPress インスタンスの Security Group ID は、WordPress で始まるグループ名の Security Groups のリストあるいは WordPress を実行している EC2 インスタンスで詳細を確認することで見つけることができます。このステップにより、WordPress が Memcached に接続できるようになります。

ステップ 4: WordPress に接続し Memcached Client をインストールする

WordPress に接続する

WordPress が Memcached と働くのに必要なクライアントソフトウェアをインストールするため、WordPress に接続する必要があります。Mac/Linux では規定の SSH クライアントが使用でき、Windows では PuTTY あるいは Git Bash といったツールが使用できます。詳細な方法については、Launch a Linux Virtual Machine チュートリアルの「ステップ 3: インスタンスに接続する」をご覧ください。EC2 インスタンスに接続するには、作成した SSH キーとそのパブリック IP アドレスが必要になります。

コマンドラインを使用して EC2 インスタンスに接続している場合、次のコマンドで実行できます (PUBLIC_IP をインスタンスの IP アドレスで置換し、PRIVATE_KEY を SSH キーへのパスで置換します)。

ssh ubuntu@PUBLIC_IP -i PRIVATE_KEY.pem

サーバーに接続されたら、コマンド 'cat bitnami_credentials' を実行してください。ファイルに記載されているパスワードのメモをとっておいてください。

Memcached Client をインストールする

WordPress を Memcached インスタンスに接続するために必要な PHP Memcached クライアントをインストールしてください。コマンドラインで次のコマンドを実行し、Memcached クライアント用 Amazon ElastiCache をインストールしてください。

wget https://elasticache-downloads.s3.amazonaws.com/ClusterClient/PHP-7.0/latest-64bit
tar -zxvf latest-64bit
sudo cp artifact/amazon-elasticache-cluster-client.so /opt/bitnami/php/lib/php/extensions/
sudo echo 'extension=amazon-elasticache-cluster-client.so' >> /opt/bitnami/php/etc/php.ini
sudo reboot

サーバーが再起動して完了するまで、数分お待ちください。注: PHP あるいは WordPress のインストールが今チュートリアルで使われている Bitnami イメージと違う場合、これらのコマンドも異なる場合があります。

ブラウザーのアドレスバーに WordPress サーバーのパブリック IP アドレスを張り付け、そのあとに ‘/admin’ と入力してください。URL は ‘123.123.123.123/admin’ のようになります。‘user’ にユーザー名を入力し、bitnami_credentials ファイルで取得したパスワードを使用します。これで、Memcached を使用してウェブサイトをスピードアップすることができるプラグインをインストールできるようになりました。

ステップ 5: キャッシングを有効にする

WordPress と Memcached が実行されているので、これでキャッシングを有効にすることができるようになりました。

プラグインのインストール

このチュートリアルでは、Memcached キャッシングを有効にするため W3 Total Cache プラグインを使用します。1M+ インストールでは、これは一番有名でよく管理された WordPress キャッシングプラグインのうちのひとつです。W3 Total Cache のインストールには、WordPress ダッシュボードの [Plugins] を開き [Add New] をクリックしてください。

次に ‘W3 Total Cache’ を検索し、[Install Now] を選択し、[Activate] をクリックしてください。

構成のアクセス許可を設定する

プラグインをインストールすると、[Plugins] ページに次のメッセージが表示されます。

このチュートリアルの後のほうで初めのメッセージに対応します。2 番目のメッセージに対応するには、コマンド 'chmod 777 /opt/bitnami/apps/wordpress/htdocs/wp-config.php' を実行してください。PHP ファイルに必要な変更を反映させるため、キャッシュの設定の前にコマンドを実行する必要があります。コマンドを実行したら、プラグイン構成ウェブページをリフレッシュしてください。

ステップ 6: キャッシュの構成

キャッシングシステムの一般的な使用法は、一時的に Memcached にそのデータを保存 (キャッシュ) することによって、プライマリデータベースに送る必要のあるクエリの数を減少させることです。WordPress を構成することによって前述の動作が実行でき、ウェブサイトのパフォーマンスをスピードアップすることができるようになりました。はじめに、[Performance] タブ (キャッシングプラグインをインストールすることによって追加されたタブ) の [General Settings] セクションを開きます。[Database Cache] で ‘Enable’ をチェックし、‘Database Cache Method’ として 'Memcached' を選びます。最後に、‘Save all settings’ をクリックします。

[General Settings Page] の上部に次のメッセージが表示されます。

これは、Memcached インスタンスを接続する必要があるのに、ローカルで実行されている Memcached インスタンスが存在しないため、表示されます。接続文字列を指定するには、ナビゲーションバーの [Database Cache] をクリックしてください。 Memcached インスタンス用 ElastiCache の Memcached の接続文字列を貼り付け、[Test] をクリックします。緑の [Test Passed] メッセージが表示されない場合、ElastiCache 接続情報を確認してからもう一度テストしてください。新しい構成を [Save all settings] をクリックして保存してください。

ファイルのアクセス権限を更新する

上記の [Set Configuration File Permissions] 内のメッセージを修正するには、ファイルのアクセス権限を更新する必要があります。次のコマンドを実行し、[Set Configuration File Permissions] セクションにはじめに表示されたメッセージが再び表示されないことを確認してください。

chmod 755 /opt/bitnami/apps/wordpress/htdocs/wp-content  
chmod 640 /opt/bitnami/apps/wordpress/htdocs/wp-config.php

トラブルシューティング

W3TC 構成ドロップダウンで Memcached オプションがグレーアウトされている場合、Memcached クライアントがインストールされているか確認する必要があります。WordPress PHP Info プラグインをインストールすると、確認できます。左のナビゲーションバーで、[Settings]、[PHP Info] をクリックしてください。‘memcached’ を検索し、クライアントが正しくインストールされているか確認します。リスト内に Memcached が表示されていない場合、上記のクライアントのインストールのための手順をもう一度確認してください。

接続文字列を設定しテストしている際に Memcached インスタンスとの接続に問題が発生した場合、Memcached 用 ElastiCache のセキュリティグループの設定をもう一度確認してください。WordPress サーバーのコマンドラインでコマンド telnet <memcached-connection-string> 11211 (引数を接続情報で置換) を実行することによって、telnet を使って接続の問題をトラブルシューティングすることもできます。

使用可能な telnet のコマンドは次の通りです。

  • stats - Memcached サーバーに関する多数の統計を表示する
  • set - Memcached にキーを値の組み合わせを作成する
  • get - Memcached キーを取得する
  • flush_all - すべてのキーを削除する
  • Ctrl + ] - telnet を終了する
telnet my_memcache.4abcde.cfg.use1.cache.amazonaws.com 11211
Escape character is '^]'.
stats
STAT pid 13360
STAT uptime 88
…
set my_key 0 900 8
my_value
STORED
get my_key
VALUE my_key 0 8
my_value
END
flush_all
OK

その他のキャッシングオプション

ユーザーがウェブサイトを訪問すると、ウェブサーバーはウェブページを表示するため多くの処理をする必要があります。ページのコンテンツのためデータベースに問い合わせをし、コンテンツをテンプレートファイルにマージし、CSS と JS を適用し、結果の HTML をブラウザに返す必要があります。キャッシュを使うと、キャッシュの期限が切れるまで結果を再利用するので、ウェブサーバーがこれらの中のいくつかの処理を 1 度すればよいことになります。 

Memcached では、ウェブサーバーが取得しなければいけなかった異なる種類のインフォメーションをキャッシュすることができます。データベースキャッシングでは、上記のことが可能になるのに加えて、オブジェクト、ページ、縮小された CSS や JS ファイルをキャッシュすることができます。それらの他のキャッシングオプションを有効にするには、データベースキャッシングの際にしたように (Memcached ホスト名とポートを指定する) WordPress W3TC プラグインを構成する必要があります。詳細なガイダンスについては、W3TC インストールガイドラインを参照してください。

パフォーマンス

多数のテストツールを使用してウェブページのトラフィックを生成することによって、キャッシングの影響が測定できます。ツールには、WRK ベンチマークツールといったものがあります。ツールをインストールするには、リポジトリを複製して make を実行しコードをコンパイルします。すべてのパフォーマンステストにおいて、「your mileage may vary」だということを覚えておいてください。ウェブサイトによって、使用可能なキャッシングオプションのメリットは異なります。ネットワークレイテンシーなど、制御不可能な要因によってパフォーマンスも変わってきます。最後に、実際のユーザーに影響を与えるかもしれないので、本番サーバーで大きな負荷を生成する際は注意してください。

AWS での完全マネージド型の Memcached

Amazon では完全マネージド型の Memcached サービスである Memcached 用 Amazon ElastiCache を提供しています。

  • クラウド内で Memcached のデプロイメントを簡単に設定、運用、スケールできます。障害が発生したノードは自動的に検出して置き換えられます。
  • 高コスト効率で規模の変更が可能なハードウェア容量を利用します。
  • 自動検出と一緒に ElasitCache Memcached クラスタークライアントを使用することにより、ノード管理を簡素化してアプリケーション開発を高速化します。
3 つの簡単な手順で、Memcached 用 Amazon ElastiCache AWS を無料利用枠で使用開始できます。
Redis 用 Amazon ElastiCache

サインアップ

Amazon ElastiCache 無料利用枠を利用します。
Redis 用 Amazon ElastiCache の詳細を見る

シンプルなチュートリアルで学ぶ

Memcached クラスターの作成法を学ぶ。
Redis 用 ElastiCache の使用を開始する

構築を開始する

ユーザーガイドでのヘルプを使って、構築を開始する。