たった30分でWordPressを冗長化する方法


wordpress突然ですが、WordPressを冗長化したいと思いませんか?1台サーバが落ちてもサービス影響を最小限に、しかもサーバ代以外のお金をかけず冗長化できる方法があるんですよ奥さん。

■ NW構成

下記の図のようなNW構成で実現可能です。

DBはマルチマスタにせず、マスターDBはServer #1 とし、Server #2、および以降スケールアウトするマシンはすべてSlaveとします。

■ 障害パターン

Server #2 の全体障害および部分障害がおきても、DNSラウンドロビンによりServer #1へアクセスした場合は影響がありません。Server #2のMySQLが落ちていても、Server #1のMySQLが生きている限り影響はありません。Server #1の全体障害およびDB障害の際は、エントリの投稿やコメントをつけたりなどの更新系は止まっても、サイト閲覧には支障ありません。

 

■ 用意するもの

WEB+DBサーバ 2台 ( CentOS 6.3 にて動作確認済 )

■ まずは普通に WordPress をインストールする

2台のサーバに、WordPress をインストールします。ApacheやMySQL、PHPのパッケージはそれぞれOSの標準リポジトリからインストールで大丈夫ですが、バーチャルホストのServerNameだけは同じ値にしておいてください。この時点で特別な設定は何一つ不要です。 wp-config.php のホスト名は、2台ともlocalhostのままでOKです。

さて、2台のサーバでそれぞれ動作確認ができたら、DBのレプリケーション設定を行います。

 

■ MySQLのレプリケーション設定

とみぞーノート さんの手順そのままでOKです。いわゆる「Master-Slave構成」というやつを構築します。2台のサーバで異なる設定を投入するので、各手順の前に [Master] [Slave] を書いておきます。

● [Master] /etc/my.cnf の[mysqld]セクションに、バイナリログ取得設定とサーバIDを追加

設定反映後、mysqldを再起動します。

● [Master] レプリケーション用アカウント作成

SlaveからMasterへ接続する際のアカウントを、Master側で作成しておきます。mysqlにログイン後、以下のコマンドを実行します。パスワードは一例ですので必ず変更してくださいね。

● [Master] テーブルに書き込みロックを行う

Master側のデータを手動コピーする前に、テーブルロックを行います。

● [Master] バイナリログの確認を行う

バイナリログの名前(File)と位置(Position)を確認します。テーブルロック中にやらないと、どんどん数字がインクリメントされてしまうので注意しましょう。

● [Master] データベースをtarコマンドでバックアップする

Master側のデータベースを手動バックアップし、Slave側へSCPなどで転送します。

● [Master] テーブルロックを解除する

マスター側のMySQL設定は以上になります。続いてSlave側の設定を行います。

● [Slave] 静止状態を確保し、データベースをコピーする

Master側からコピーしてきたアーカイブを展開します。書き込みを防止するため、mysqldは止めておきましょう。

● [Slave] Slave側のmy.cnfにserver-idを設定し、mysqldを再起動する

Master側と同じく、[mysqld]セクションにserver-idを追加します。他のサーバと被らないようにしましょう。

 

● [Slave] Master側へ接続するためのパラメータを設定する

SlaveとなるMySQLサーバへログインし、以下SQL文を投入します。

 

● [Slave] レプリケーションを開始する

以下のコマンドを実行し、192.168.0.11のほうのサーバをSlaveにします。

 

■ [Master][Slave] HyperDB のダウンロードとファイルコピー

以降の作業は、MasterとSlaveの両方で実施します。

// アーカイブのダウンロード

// ファイルコピー

 

■ [Master][Slave] db-config.php 設定

Master側とSlave側の動作を設定します。ソース内の赤太文字が追加部分となります。

217~224行目周辺 修正前

217~224行目周辺 修正後

230~239行目周辺 修正前

230~239行目周辺 修正後

 

■ [Master][Slave] DB接続先変更

Master、Slaveの両方で、DB接続先を変更します。

修正前

修正後

以上でWordPressの冗長化作業は終了です。それでは確認してみましょう。

 

■ 確認項目

  1. Master側で記事を投稿し、Slave側にも記事が反映されていること
  2. Slave側で記事を投稿し、Master側にも記事が反映されていること
  3. Slave側のmysqldを止めても、サイト閲覧に問題がないこと
  4. Slave側のmysqldを止めても、記事の投稿ができること
  5. Master側のmysqldを止めても、サイト閲覧に問題がないこと

ここまで確認できれば、WordPressの冗長化は終了です。ね、簡単でしょう?

関連記事

たった30分でWordPressを冗長化する方法”に関する1件のコメント

  1. ピングバック

コメントは受け付けていません。