DRBD+GFS2でPrimary/Primary構成 on CentOS での起動スクリプト
2台のLinuxサーバを使った DRBD + GFS2 での Primary/Primary 構成では,シャットダウンと起動の順序に気を遣う必要があります.そうしないと DRBD が Split-Brain*1となってしまいます.それを防ぐために,以下のようなスクリプトを作ってみました.
使い方はかんたん.
% git clone git://gist.github.com/71325.git gist-71325 % sudo cp cluster /etc/init.d/cluster % sudo /sbin/chkconfig --add cluster
VirtualBox 上で何度か再起動実験してますが,特に問題はありません.起動時間がずれたときにどうするかという問題がありますが,そのときは wfc-timeout / degr-wfc-timeout の値を調整すればいいのではないかと思います.
追記
start/stopに反応するスクリプト書いて,K01とかやれば1番目に実行されるだろうと思ってたらそうではなく,/etc/rcにある 49行目〜52行目で continue されてしまいます.
45 # First, run the KILL scripts. 46 for i in /etc/rc$runlevel.d/K* ; do 47 check_runlevel "$i" || continue 48 49 # Check if the subsystem is already up. 50 subsys=${i#/etc/rc$runlevel.d/K??} 51 [ -f /var/lock/subsys/$subsys -o -f /var/lock/subsys/$subsys.init ] \ 52 || continue 53 54 # Bring the subsystem down. 55 if LC_ALL=C egrep -q "^..*init.d/functions" $i ; then 56 $i stop 57 else 58 action $"Stopping $subsys: " $i stop 59 fi 60 done
どうやら /var/lock/subsys/$script_name のロックファイルが存在しないとスルーして「あとで実行」するようなので,他のスクリプトを参考に touch /var/lock/subsys/cluster を追加したところ,万事うまくいきました.
まだまだ知らないこと多いなぁ・・・・
*1:記憶領域の分裂.つまり同期失敗の可能性ありってことかな