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:記憶領域の分裂.つまり同期失敗の可能性ありってことかな