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

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

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

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

構成はこんな感じ。

wpbun1

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

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

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

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

さて、最初はなにをするかというと、Poderosaで2画面中継にしてみた。
パワーのあるパソコンを使うときはTeratermじゃなくてPoderosaを使ってるんだけど、文字の映りぐあいがTeratermの方が好きなんだけど、微妙な差なのでPoderosaに乗り換えしちゃうかもね。

余談は置いといて、まずは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サーバーを停止してみて、ちゃんとつながるかどうか、記事が更新されているかを確認したら冗長化は完了です。

これからMySQLかネットワークかどっちの勉強をしようか悩み中~。

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

という事で、続いてロードバランサーの設定をします。
さくらのクラウドのロードバランサーは月額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

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

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

wpbun3

 

Similar Posts:


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

  1. Pingback: さくらのクラウド、サーバプランを刷新など機能追加のまとめ(2013年7月8日版) | P2P today ダブルスラッシュ

  2. Pingback: WordPressを冗長化する方法 – mill's kits at dawn

Leave a Reply

Your email address will not be published. Required fields are marked *