WordPressのDBを冗長化して、さくらのクラウドのロードバランサーを入れてみる

負荷分散というものを学ぶために負荷分散するための下地作りをしました。

とりあえずDBの冗長化から

もう7月、熱い夏になりそうだね。

WordPressの負荷分散をする前に、とりあえずDBの冗長化をしようと思いまする。プラグインを利用する方法なのでたいした事はないです。
ググってるし。

構成はこんな感じ。

wpbun1

プラグインはHyperDBというやつを使います。ここだよ、ここ。HyperDB

参考サイト
(っ´∀`)っ ゃー | nullpopopo

たった30分でWordPressを冗長化する方法
ひげろぐ

HyperDBでWordPressとMySQLのレプリケーションを組み合わせて使う

まずはMaster側のMySQLの設定をしますと、たけけんの場合はWebServerからSSHでマスターDBサーバーへ繋いで操作します。

ssh root@192.168.**.***
vim /etc/my.cnf
[mysqld]

log-bin 
ユニークな識別IDをつける
server-id=1
スレーブDBからマスターDBへつながるユーザを作成
mysql> GRANT REPLICATION SLAVE ON *.* TO repl@192.168.24.*** IDENTIFIED BY 'パスワード'; 
ロックする必要がある様子。
mysql> FLUSH TABLES WITH READ LOCK;
この数字はメモしておきましょう。
mysql> SHOW MASTER STATUS;
データベースを圧縮&バックアップ
cd /var/lib/mysql/               
tar cvf ~/wordpress.tar.gz wordpress
ロック解除する。
mysql> UNLOCK TABLES;
DBサーバースレーブに飛ばす
scp wordpress.tar.gz root@*********:/var/lib/mysql

スレーブに移動する。いったんログアウトして、DB2にSSHで繋いでmy.cnfの設定から

vim /etc/my.cnf
[mysqld] server-id=2 
マスターDBへ繋ぐ設定をする。
mysql> CHANGE MASTER TO
        MASTER_HOST='192.168.24.***',  
MASTER_USER='repl',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='tank-bin.000001',
MASTER_LOG_POS=***; これはさっきメモった数字。

最後に
mysql> START SLAVE;
これでレプリケーション開始になる。

マスター、スレーブともにDBサーバーの設定は終わった。あとはWordpressがこれに対応するようにプラグインを入れる。

ログアウトしてウェブサーバーに戻ろう。

wget http://downloads.wordpress.org/plugin/hyperdb.zip
unzip hyperdb.zip
cd hyperdb
cp -p db-config.php /var/www/wordpress/
cp -p db.php /var/www/wordpress/wp-content/
cd /var/www/wordpress/

書き込みと読み込みを追記しる。スレーブはホスト名を変更しる。

vim db-config.php
$wpdb->add_database(array(
        'host'     => DB_HOST,     // If port is other than 3306, use host:port.
        'user'     => DB_USER,
        'password' => DB_PASSWORD,
        'name'     => DB_NAME,
        'write'    => 1,
        'read'     => 1,
));
$wpdb->add_database(array(
        'host'     => DB_HOST_RO,     // If port is other than 3306, use host:port.
        'user'     => DB_USER,
        'password' => DB_PASSWORD,
        'name'     => DB_NAME,
        'write'    => 0,
        'read'     => 1,
        'dataset'  => 'global',
        'timeout'  => 0.2,
))

もういっちょWordpressのコンフィグファイルを設定しる。

cp -p wp-config.php wp-config.php.orig
vim wp-config.php
/** MySQL のホスト名 */
define('DB_HOST', '192.168.24.200');
define('DB_HOST_RO', '192.168.24.201');

IPアドレスが伏字と出してるところがあるけど、深い意味はないっす。

これで完了です。
マスターとスレーブの片方づつDBサーバーを停止してみて、ちゃんとつながるかどうか、記事が更新されているかを確認したら冗長化は完了だね。

今回は、TeratermじゃなくてPoderosaで2画面中継にしてみたんだけど結構良かった。文字の映りぐあいでいうとTeratermの方が好きなんだけど、微妙な差なのでPoderosaに乗り換えしちゃうかもね。

と余談は置いといて、つぎ〜。

さくらのクラウドのロードバランサーを入れてみる

という事で、続いてロードバランサーの設定をします。
さくらのクラウドのロードバランサーは月額2,500円、日割りで128円。
ウェブサーバー、DBサーバー2台で計3台だと月額10,000円だ。
専用サーバーが初期費用が79,800円で月に8,800円で3か月は使う決まりだったと思うから、ほんとに用途次第だと思うけど、どっちがいいのか分からんなあ。
とりま今回はロードバランサーを使ってみようという事だけなんで、お金の話は置いておこう。

参考サイト
さくらのクラウドニューズ
http://cloud-news.sakura.ad.jp/2013/03/12/newlb/

参考サイトではルーター+スイッチに繋いだ構成1の説明になっているけど、前回も書いたようにそれだとコストがかかるので、たけけんはスイッチだけにしています。
んで、サイトを参考に構成2の設定をしてみようずと、DBのみを負荷分散しますん。

参考サイトには「設定手順や設定項目については、一般的なDSR構成ロードバランサ導入時と同様です。」と記載がありますが、たけけんにはちんぷんかんぷん一休さんですが、とりあえずやってみますか。

sysctl.confの設定追加をマスター、スレーブのDBサーバー両方に設定する。

# vi /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
# sysctl -p

ループバックアドレスを追加、VIPを使うのに必要なようだ。

# vi /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.24.222
NETMASK=255.255.255.255
# ifup lo:0

あとはブラウザでコントロールパネルの設定になるので、サイトを参考にしてください。

この仮想IPというかエイリアスだかで作ったlo:0に実サーバーのIPをあてがい、監視をするというもののようだ。
選択できるのが、監視する時間、プロトコル(HTTP、TCP、PING)が選べた。

wpbun2

動いてはいるようですね。

うまくいったはずだけど、負荷分散はラウンドロビンとセッション数、それプラス重み付けの設定ができるものしか知らないので、これがどういった動きになっているのか、どんな感じでバランサーとして動いてるのか分からね!重要なところが分からね!w

wpbun3

 

Related Posts


投稿者: Takeken

インターネット利用者のITリテラシーを向上したいという設定の2次元キャラです。 サーバー弄りからプログラミングまで手を付けた自称エッセイストなたけけんの物語。

「WordPressのDBを冗長化して、さくらのクラウドのロードバランサーを入れてみる」への2件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です