LinuxでWordPressクラスタ その1 (Pacemaker+corosync+DRBD+MySQL+Apache)


3日間缶詰めで戦った日々でした。
自宅サーバを使ってWordpressを外部から突きたかったので、この際ちゃんと
冗長しようと思ってクラスタを組んでみました。

結構難しいです。頭が慣れるまで時間がかかります。
いままでめんどくさがってWAMPばっかり使ってたので
LAMPをいざ使おうと思ったらお作法とかバージョンとか考慮しないといけないことが
たくさん出てきてとにかく時間がかかりました。

以前紹介した自宅LANの構成。赤丸のついたところが今回組んだサーバです。

1

サーバの構成はこんな感じ。

2

正直完全フリーでお手軽にクラスタ組もうとすると、
このPacemaker+corosync+DRBDの3つのソフトウェアが登場するわけですが、

データベースのデータディレクトリを
DRBDにリンク貼るだけとか正気の沙汰じゃない

ので、普通の人はMySQLクラスタを素直に使ったほうがいいと思います。

■インストールしたもの

CentOS 6.5(ESXi6.0)
Kernel 2.6.32-573
Pacemaker 1.0.13
corosync 1.4.3
DRBD 8.4.3
Apache 2.2
MySQL 5.6
PHP 5.4
PHPmyAdmin 4.4

始める前にこの動画を見てイメージを膨らませます。

【ニコニコ動画】かんたんペースメーカー入門 特別編

これから試してみようと思った人の中には、
どうせGUIでらくちんポンな方法があるんでしょ、と思われる方もいると思いますが、
残念ながら唯一のGUIツール、LCMCは使い物になりません。
コマンドラインで地道に構築していきましょう。
(これでも今はだいぶ楽になったんだぞ、たぶん)

インターネットに手順はたくさん乗ってるので僕がどこで
つまづいてどんなサイトを参考にしたか書こうと思います。

■1 OSセットアップ

・CentOSをminimal デスクトップでインストール
・SELinuxを無効化したり、NetworkManagerを切ったり。

■1.5 ethtoolでオフロード無効

セグメント超えすると糞遅い問題を回避するため、
サービス系NICでオフロード機能を無効化する。
しかも質が悪いことにコマンドで入力すると再起動後再びONに
なってしまうので、起動スクリプトで殺す。

vi /etc/init.d/ STARTUP-ethtool.sh

#!/bin/sh
#chkconfig:345 99 01
ethtool -K eth0 rx off
ethtool -K eth0 tx off
ethtool -K eth0 tso off
ethtool -K eth0 gro off

chkconfig --add STARTUP-ethtool.sh
chkconfig STARTUP-ethtool.sh on

■2 Kernel変更、Pacemaker,CorosyncDRBDはここを見ながらやりました。

CentOS6.5でDRBD8.4を使ってみる – vol.0 準備編
CentOS6.6のLinux-HAでDRBDを構築する手順めも

2つ不親切なことがあります。
DRBDが対応するカーネルのバージョンがとてもシビアで最初に
カーネルの入替えをするのですが、再起動した後、今回の場合2.6.32-573に更新されているか
uname -aで確認します。

もう一つはDRBDインストール後、modprobe drbd をすることです・

あと念のため、/etc/hostsには双方のホスト名、IPを全て書いておきました。

Pacemaker(CRM)で制御するミドルウェアは全てchkconfig off です。

Pacemakerの設定はCRMコマンドラインで設定できます。
CiscoライクなのでNW屋さんは馴染みやすいと思います。

駄菓子菓子!

結局、editモードでConfigファイルをViで編集するほうが楽なので、
こんな感じで作っておいたConfigを貼り付けて編集してました。

service corosync stop(両機)
rm -rf /var/lib/heartbeat/crm/* (両機)
service corosync start(1号機)
 crm>configure>edit (1号機)

うちで稼働してるCRMのConfigを載せておきます。
起動順はDRBD→MySQL→Apacheの順で。

node wiki-web-1
node wiki-web-2

primitive VIP1 ocf:heartbeat:IPaddr2 \
        params ip="192.168.11.16" nic="eth0" cidr_netmask="24" \
        op start interval="0s" timeout="20s" \
        op stop interval="0s" timeout="20s" \
        op monitor interval="30s"

primitive drbd ocf:linbit:drbd \
        params drbdconf="/etc/drbd.conf" drbd_resource="r0" \
        op monitor interval="10" role="Slave" \
        op monitor interval="11" role="Master" \
        op stop on-fail="block" interval="0"

primitive filesystem ocf:heartbeat:Filesystem \
        params run_fsck="no" device="/dev/drbd0" directory="/mnt/drbd" fstype="ext4" \
        op monitor interval="15" \
        op stop on-fail="ignore" interval="0"

primitive mysqld lsb:mysqld

primitive httpd ocf:heartbeat:apache \
        params configfile="/etc/httpd/conf/httpd.conf" port="80" \
        op monitor interval="20s"
        
group WEB-GROUP filesystem VIP1 mysqld httpd

ms ms-drbd drbd \
        meta notify="true"

colocation drbd-fs-colocation inf: WEB-GROUP ms-drbd:Master
order drbd-fs-order inf: ms-drbd:promote WEB-GROUP:start
property $id="cib-bootstrap-options" \
        dc-version="1.0.13-a83fae5" \
        cluster-infrastructure="openais" \
        expected-quorum-votes="2" \
        no-quorum-policy="ignore" \
        stonith-enabled="false"
rsc_defaults $id="rsc-options" \
        resource-stickiness="1" \
        migration-threshold="1"

続く

Leave a comment

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください