mysqlのレプリケーションを使う(4) WordPressでレプリケーションを使う
ご利用のブラウザは、JavaScript が無効 となっていませんか?
このサイトでは、コンテンツの一部が非表示 、あるいは、コメント、お問い合わせの投稿ができない 、検索ができない ことがあります。
以前に
で、mysqlのレプリケーション(replication) について記事にしました。
今回は、Wordpressでそのmysqlのレプリケーションを有効にする方法について簡単に解説してみたいと思います。
そもそもWordpressの基本パッケージは、mysqlのレプリケーションに対応したものになっていません。
1つのデータベースに対して書き込み・読み込みを行うようにしかなっていないのです。
mysqlのレプリケーションの設定を行ったサーバーで、マスターデータベースのあるサーバーでWordpressを運用する分には、何も問題ありません。
しかし、スレーブ側でWordpressを運用した場合、Wordpressの基本パッケージのままであれば、データベースのホストをマスターデータベースのあるサーバーに向ける必要があります。
これを回避するために、Wordpressでは、レプリケーション対応のためのプラグインが標準で用意されています。
つまり、このプラグインを用いることで、読み込みはスレーブ側(ローカルホスト)とし、書き込みをマスターデータベースのあるサーバーを指定することができるようになります。
では、早速、このプラグインを使ってみましょう。
レプリケーション(replication) とは、
直訳のとおり
複製 を意味します。(レプリカ(replica)と語源は一緒なので、こちらがピンとくるかもしれません)
mysqlでレプリケーションと言うと、マスター、スレーブのそれぞれのmysqlサーバーを構築することに他なりません。
マスター1台に対して、スレーブ複数台というのが一般的なmysqlサーバーの構成になります。
一般的には、マスター mysql サーバー でデータベースの更新処理(書き込み)を受け持ち、スレーブ側で参照処理(読み込み)を受け持つことで負荷を分散させたり、バックアップデータベースを作成するなど行うことができます。
上の図は、その典型的なレプリケーションの例を示したものです。
ユーザは、1台のサーバーにアクセスしているつもりですが、実際のデータベースへの書き込み処理は、バックにあるマスターサーバー側で処理され、データベースの読み込み処理は、フロントのスレーブサーバーで処理されます。
特に参照がメインのサーバーでは、かなりの負荷分散が期待されます。
WordPressのレプリケーション対応プラグインHyperDB
HyperDB とは、
複数のデータベース環境において標準の wpdb クラスを置き換えるものです。HyperDB はデータのパーティションおよびレプリケーションに対応しています。
つまり、HyperDBは、レプリケーションのためのプラグインです。
これを使ってWordpressのMySQLのレプリケーション対応を行ってみます。
ダウンロード:http://wordpress.org/extend/plugins/hyperdb/
HyperDBをインストールする
HyperDBは、一般的なWordpressのプラグインをインストールするやり方ではインストールできません。
だからと言って、手順を間違えなければ、難しいわけでもなんでもないです。むしろ簡単です。
では、早速インストールしてみましょう。
ダウンロードし、ZIPファイルを展開する。
解凍したファイルの中のdb-config.php を編集する。
編集可能なパラメータ情報は、以下のとおりです。
save_queries
これは、通常は使いません。デバッグ時などに使用するものです。
$wpdb->queriesの中にクエリー情報を保存します。
デバッグ時には、$wpdb->queriesをダンプすることでSQLを解析することができるようになります。
example
$wpdb -> save_queries = false ;
デフォルト:
false
persistent
これは、mysql_connect あるいは mysql_pconnect のどちらを使用するかを指定します。
この設定の効果は、思っている効果と違う場合があります。注意深くテストする必要があります。
true : mysql_pconnect を使います。
example
$wpdb -> persistent = false ;
デフォルト:
false
max_connections
これは、mysqlへの接続をオープンにしたままにする数を指定します。
データベースサーバーへの接続の多くを再利用することが予想される場合は、ここの数を増やしてあげると効果的です。
これは、
persistent を有効にした場合は無視されます。
example
$wpdb -> max_connections = 10 ;
デフォルト:
10
これは、mysql_connectあるいはmysql_pingの前にfsockopenでTCPの応答性をチェックを有効にします。
PHPのmysqlの関数は、タイムアウトを設定するパラメータを提供していないので、これが追加されました。
このパラメータを無効にすると、接続が成功している間は、わずかながら平均的に性能は向上するかもしれません。ただし、接続に失敗するようになった場合、そのような小さな性能向上は意味が無くなるでしょう。
example
$wpdb -> check_tcp_responsiveness = true ;
デフォルト:
true
$database
add_database メソッド(関数)を使ってデータベース情報を登録します。(以降の設定例を参照)
この
$database は、各パラメータを配列(array)のキーと値で設定します。
以下は、そのパラメータとその概要です。
パラメータ名
必須
概要
host
o
MySQLのホスト名(or IPアドレス or localhost)を設定します。
また、TCPポート番号がデフォルトの3306を使っていない場合は、このホスト名以降にポート番号を指定します。
例)
‘host’ => ‘blog.db.example.com:9999’
blog.db.example.com : ホスト名
9999:TCPポート番号
user
o
MySQL のユーザ名を設定します。
例)
‘user’ => ‘bloguser’
password
o
MySQL のユーザのパスワードを設定します。
例)
‘password’ => ‘blogpassword’
name
o
MySQL のデータベース名を設定します。
例)
‘name’ => ‘blogdb’
read
x
指定したデータベースサーバーが読み込み可か否かを設定します。
デフォルト : 1 (読み込み可)
また、優先順位の意味もあります。参照 : “Network topology”.
例)
‘read’ => 1
write
x
指定したデータベースサーバーが書き込み可か否かを設定します。
デフォルト : 1 (書き込み可)
また、マルチマスターモード(multi-master mode)での優先順位の意味もあります。
例)
‘write’ => 1
dataset
x
データセットの名前を設定します。
例)
‘dataset’ => ‘blog’
デフォルト : global
timeout
x
TCP接続応答待ち時間を設定します。
例)
‘timeout’ => 0.5
デフォルト : 0.2
example
$wpdb -> add_database ( array (
'host' => 'blog.db.example.com' ,
'user' => 'bloguser' ,
'password' => 'blogpassword' ,
'name' => 'blogdb' ,
'dataset' => 'blog' ,
) ) ;
ここで必ず設定しなければならないのは、上記のパラメータの$database です。
レプリケーションで使用するマスター、スレーブのすべてのデータベースについて作成する必要があります。
以下は、その設定例です。
マスターデータベースサーバーの設定例)
$wpdb -> add_database ( array (
'host' => '192.168.1.100' , // If port is other than 3306, use host:port.
'user' => 'dbuser' ,
'password' => 'dbpassword' ,
'name' => 'dbname' ,
'write' => 1 ,
'read' => 1 ,
) ) ;
スレーブデータベースサーバーの設定例)
$wpdb -> add_database ( array (
'host' => '192.168.1.101' , // If port is other than 3306, use host:port.
'user' => 'dbuser' ,
'password' => 'dbpassword' ,
'name' => 'dbname' ,
'write' => 0 ,
'read' => 1 ,
) ) ;
最も簡単な構成で2台のデータベースサーバーでのレプリケーションなら、上記のように’host’,’write’ の違いだけではないかと思います。
あとは、ほとんどデフォルトのままで問題ないと思います。
wp-config.php のあるディレクトリと同じディレクトリへdb-config.php をアップロードする。
wp-config.php は、Wordpressをインストールしているルートディレクトリにあります。
wp-config.php を編集する。
// MySQL replication
define ( 'DB_CONFIG_FILE' , ABSPATH . 'db-config.php' ) ;
を追記する。
どこに追記しても良いですが、一般的にデータベースのDB_TYPE などを定義している前後ぐらいが分かりやすいかもしれませんね。
解凍したファイルの中のdb.php を/wp-content/ へアップロードする。
Wordpressをインストールしているディレクトリ配下に/wp-content/ というディレクトリがあるはずなので、その直下にアップロードします。
HyperDB を使う場合、WP_USE_MULTIPLE_DB は無視されます。
これで完了です。簡単だったでしょ?
簡単でしたね。
ここまで設定したら、Wordpressで何か設定を変更してみてください。
設定の変更は、マスターからスレーブへすぐに反映されますから、設定変更の後に再読み込みしてみてください。
ちゃんと変更のままならOK。
これが、不安定に変更したデータだったり、変更前の状態に戻ったりした場合は、レプリケーションが正しく動作していない場合が多いです。
その場合、スレーブ側でエラーが発生していないか確認してみましょう。
mysql> show slave status \G;
これでエラーストップしていないことを確認しましょう。
何もエラーが発生していないなら、ここでの設定に誤りがあるかもしれません。パラメータの設定を確認してみましょう。
ご利用のブラウザは、広告ブロック(AdBlockなど) が適用 となっていませんか?
このサイトでは、コンテンツの一部が非表示 、あるいは、コメント、お問い合わせの投稿ができない 、検索ができない ことがあります。
関連記事 :
コメントを投稿 :