こんにちは!

とあるWordPress案件で、ダウンタイムは短くしたいよね!ってことで、冗長構成WEB2台DB2台(Master-Slave)にしました。
今回は、データベースの冗長化部分を紹介します。
といっても、難しいことはなにもありません。HyperDBというプラグインがあるので、設置と設定だけです。

冗長化とは?
何らかのシステム障害が万が一発生した場合に備えて、一部の設備が故障してもシステム機能を維持してサービスを提供できるようにすることです。

流れとしては、次のような感じ。

(1)ダウンロード
(2)設定(ファイル編集)
(3)設置動作確認
(4)動作確認

それでは、いってみましょー。

まずはダウンロード

HyperDBは通常のプラグインとはちょっと違い(「ドロップイン」という)、管理画面でぽちぽちしてインストールするわけではありません。
まずは、『WordPress.ORG』のHyperDBのページからプラグインをダウンロードします。

HyperDBプラグインのダウンロード

ちなみに、zipファイルの中身はこんな感じ。

次は、設定です。

続きを読む

設定

編集しなければならないファイルが2つあります。
・wp-config.php(WordPressに元から入ってるファイル)
・db-config.php(ダウンロードしたzipの中に入ってるファイル)

ファイルを編集する前に各DBサーバー(MasterDB・SlaveDB)の前提条件や情報を下記サンプルのようにまとめておきます。
・MasterDB-SlaveDB間はレプリケーション設定をしておく。
・データベース名:database_name
・MasterDB・SlaveDBへの接続ユーザー・パスワードは共通(別でも問題ないですが同じ前提で話を進めます)。
 接続ユーザー:username
 接続パスワード:password
・各データベースのIP
 MasterDBのIP:192.168.●.1
 SlaveDBのIP:192.168.●.2
・データベースへの接続ポートはデフォルトの「3306」とする。

wp-config.phpの編集

本来は、次の一行を追記するだけです。

が、2台目のサーバーの接続情報を別のファイルに書くことになり情報が散らばるため、このファイルにその情報も記述します。

編集前

この部分を編集します。

編集後

編集・追記した個所は、「// コメント」の形式で補足してます。

db-config.phpの編集

編集前

210行目ぐらいからある記述部分を編集します。

編集後

編集・追記した個所は、「// コメント」の形式で補足してます。

オプションについては、同ファイルのコメントを見てほしいのですが、
readの値についてちょっと触れておきます。
・0:そのデータベースからは、読み込まない。
・1以上:そのデータベースから読み込みをする。
ここで注目したいのが、1より大きな値を設定することにより接続の重みづけができます。
より小さい値のサーバーへの接続が優先されます。

上記の編集後のように、
MasterDB:read => 2
SlaveDB:read => 1
と設定した場合、SlaveDB → MasterDB の順番で接続を試みます。
MasterDBへの接続も失敗した場合に、初めて『データベース接続エラー』になります。
※writeの値も同様の動作をしますが、この動作をさせるには、データベースの設定をmulti-masterにする必要があります。

準備は整ったので、いよいよ設置です。

設置

計3ファイルを設置します。

db-config.php(zipに入っていたものを編集したファイル)

wp-config.phpなどのファイルと同じ階層に設置します。

db.php(zipに入っていたファイル)

wp-contentディレクトリの中。pluginsやthemesディレクトリと同じ階層に設置します。

wp-config.php

編集したものを、もともとある場所のファイルと置き換えます。

最後に、動作確認です。

動作確認

データベースを停止・起動できる環境なら、片方ずつ停止した状態でサイトを確認してみてください。
レンタルサーバなどで、DBの停止・起動ができない環境であれば、wp-config.phpファイル内の、「DB_HOST」「DB_HOST_SLAVE」に設定した値(IP)を適当な値に変えてテストするのがよいと思います。

おわりに+補足

管理画面から簡単に導入できるものではないですが、今回、紹介させていただいたHyperDBの他にも、ドロップインのプラグインはあります。
ドロップインのプラグインはwp-contentディレクトリに特定の名称のPHPファイルを設置(※wp-config.phpに追記が必要なものもある)することで、WordPressが本来の動作をする前に処理をさせることができます。
・キャッシュ機構の追加
・データベースクラスのカスタマイズ ← 今回はコレ
・メッセージのカスタマイズ
 ・データベース接続エラー画面
 ・メンテナンス中画面
・マルチサイト機能のカスタマイズ
などなど。

実は、今回の案件では、他にもドロップインを使ってカスタマイズを行ったので後々紹介できたらと思います。

※執筆時点の、『WordPress』のバージョンは3.8.1です。
※執筆時点の、『HyperDB』のバージョンは1.1です。

あわせて読みたい記事