【新卒 / 中途採用】サーバー / クラウドエンジニア 募集中!【大阪】

【新卒 / 中途採用】サーバー / クラウドエンジニア 募集中!【大阪】

【導入実績300社以上】AWS 構築・運用保守サービス

【導入実績300社以上】AWS 構築・運用保守サービス

【ECサイト構築】Shopify カスタムアプリ開発サービス

【ECサイト構築】Shopify カスタムアプリ開発サービス

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【音声アプリ開発】Twilio アプリ開発サービス

【音声アプリ開発】Twilio アプリ開発サービス

【システム開発サービス】SAKARAKU Lab(セカラクラボ)| Webシステム開発

【システム開発サービス】SAKARAKU Lab(セカラクラボ)| Webシステム開発

【取材記事】サーバー系企業ビヨンドが サーバーサイドエンジニアを募集中

【取材記事】サーバー系企業ビヨンドが サーバーサイドエンジニアを募集中

【対談記事】「やっぱクラウド移設っていいですよね」マイネット × ビヨンド エンジニア対談

【対談記事】「やっぱクラウド移設っていいですよね」マイネット × ビヨンド エンジニア対談

ビヨンド公式YouTubeチャンネル「びよまるチャンネル」

ビヨンド公式YouTubeチャンネル「びよまるチャンネル」

「HyperDB」WordPressでDBの冗長化・負荷分散を行うプラグイン


インフラエンジニアの伊藤です。

AWSなどクラウドを使うと、簡単にサーバを複製してロードバランサー経由でサイトへのアクセスを冗長化・負荷分散出来るようになりました。

この状態であればWebサーバに関しては冗長化・負荷分散されていますが、データベースが冗長化・負荷分散されていません。

もしデータベースに対してのアクセスが多かった場合、
Webサーバへの負荷は大丈夫だけど、DBサーバ側の処理が詰まってサイトが表示されないという可能性が出てきます。

前置きが長くなりましたが、WordpressはいわゆるLAMP環境で動くコンテンツ。
ということはDBを使用しているので、Webサーバを冗長化していてもDBが詰まってしまうと…

503 Service Temporarily Unavailable

見たくないエラーが出てきます。。

そんなとき、DBも冗長化してあげましょう!!
ということで、WorpdressのDB冗長化を実現するプラグイン「HyperDB」の紹介です。

AWSの場合、RDSの冗長化は簡単に可能ですよね。
マスターとなるRDSの「リードレプリカ」を作成するだけでOKです。
なので説明は割愛します。

HyperDBをインストールする

HyperDBプラグインのインストールは少々複雑です。
というのも、Wordpress管理画面からインストールは可能なのですが、
実際の設定はphpファイルに直接書き込む必要があります。

インストール後は、Wordpressのwp-content/plugins/hyperdbに以下のファイルがあるかと思います。
「db-config.php」
サーバにSSHで接続出来る方はSSHで、ftp等のみで接続出来る方は事前に設定を入れて対象のディレクトリに
アップロードする必要があります。

まずはwp-config.phpに以下の内容を記載します。「DBの設定ファイルはdb-config.phpだよ」です。

# vim /pass/to/docroot/wp-config.php
define('DB_CONFIG_FILE', ABSPATH . 'db-config.php');

続けて設定をしていきましょう。

HyperDBの設定

設置したdb-config.phpに対して、以下の設定をしていきます。

まずはマスターサーバの設定をします。(217行目付近、v1.1にて確認)

# vim /pass/to/docroot/db-config.php
$wpdb->add_database(array(
        'host'     => 'RDS(マスターサーバ)のエンドポイントを入力',
        'user'     => DB_USER,
        'password' => DB_PASSWORD,
        'name'     => DB_NAME,
        'write'    => 1,
        'read'     => 2,
));

hostはRDSのエンドポイントを入力しますが、デフォルトの3306ポート以外を使用する場合、
<エンドポイント>:<ポート番号>とコロンに続けてポート番号を入力する必要があります。

write、readがポイントです。

  • write:DBへの書き込み優先度
  • read:DBへの読み込みの優先度

「0」に設定すると書き込み、読み込みを行わない設定になります。
上記の場合だと、マスターサーバへの書き込み優先度が高く、読み込み優先度は低くなります。

続けてスレーブサーバの設定です。
先ほどのマスターサーバの設定の下にでも追記してください。

# vim /pass/to/docroot/db-config.php
$wpdb->add_database(array(
        'host'     => 'RDS(スレーブサーバ)のエンドポイントを入力',
        'user'     => DB_USER,
        'password' => DB_PASSWORD,
        'name'     => DB_NAME,
        'write'    => 0,
        'read'     => 1,
));

ここでもwrite,readが威力を発揮します。

  • write:0=そのサーバに対して書き込みを行わない
  • read:1=読み込みの優先度が高く、writeが0なので読み込み専用

この設定をすると、スレーブサーバにはreadのみが行われます。
同様に、複数のスレーブサーバを登録してあげると、読み込みがスレーブサーバにのみ行われるようになります。
これでスレーブサーバでDBへの読み込み(つまり通常のアクセス)が負荷分散されるようになりました。

WordPressではDBに書き込みを行うのは、設定の変更や記事の追加など、管理画面から行うものばかりになります。
それはマスターサーバへ書き込み優先度を高く設定しているので問題ありません。

ということで、これでWordpressのDBの冗長化・負荷分散がされるようになりました!

これで急なアクセスにも安心!ですね。
HyperDB — WordPress Plugins


この記事をかいた人

About the author