3日間缶詰めで戦った日々でした。自宅サーバを使ってWordpressを外部から突きたかったので、この際ちゃんと冗長しようと思ってクラスタを組んでみました。結構難しいです。頭が慣れるまで時間がかかります。
いままでめんどくさがってWAMPばっかり使ってたのでLAMPをいざ使おうと思ったらお作法とかバージョンとか考慮しないといけないことがたくさん出てきてとにかく時間がかかりました。
以前紹介した自宅LANの構成。赤丸のついたところが今回組んだサーバです。
サーバの構成はこんな感じ。
正直完全フリーでお手軽にクラスタ組もうとすると、この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
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"
続く