ラベル heartbeat の投稿を表示しています。 すべての投稿を表示
ラベル heartbeat の投稿を表示しています。 すべての投稿を表示

2011年6月30日木曜日

heartbeat + SVN でエラー

heartbeatでサービスが引き継がれた際に、Subversion(SVN)でエラーが出た。

コミット時にリポジトリのdb/txn-current-lock に書き込めない、とあった。

調べてみると、ファイル・ディレクトリのオーナーが違う人になっていた。
要は、稼動系のuidとgidが待機系と違っていた、ということ。
usermod, groupmodで合わせたらあっさりコミット出来た。

こういうことも気を付けないといけなかった…。

heartbeat で cron設定を引き継がせる

heartbeatでcron設定(crontab)を引き継がせたくていろいろ調べてみた。

アプローチしては、似通ってくるけど3つぐらい

  1. 別ユーザのcronで自分のノードの状態を監視し、状態に応じてcrontab -u <ファイル>を実行する方法
  2. ha.cfの外部スクリプトでノードの状態を監視し、状態に応じてcrontab -u <ファイル>を実行する方法
  3. /etc/init.dにcrontab -u <ファイル>を実行するスクリプトを書いて、haresourceから起動させる方法

3がキレイだと思ったので、これを採用。
/etc/init.d/hacrontabとして


#!/bin/bash
# get functions
. /etc/init.d/functions
# See how we were called.
case "$1" in
  start)
    logger -s -t "$0" "setting up root crontab: /data/crontab/hacrontab"
    /usr/bin/crontab -u root /data/crontab/hacrontab
    echo
  ;;
  stop)
    logger -s -t "$0" "removing root crontab"
    /usr/bin/crontab -u root -r
    echo
  ;;
  status)
    echo "$0 status: "
    echo "crontab -u root -l:"
    crontab -u root -l
    ;;
  *)
    echo "Usage $0 (start|stop|status)"
    ;;
esac
exit 0


適当だけど…。
これを両方のノードに置き、/etc/haresourcesの最後にhacrontabを追加してheartbeatを再起動。
これでOKでした!

heartbeat + drbd でクラスタ化…、なのに同期が取れていない?!

Linuxサーバ2台でheartbeat + drbd を使用して2ノードクラスタを作っている。
稼動系がサーバが落ちてしまい、ちゃんと待機系に切り替わったのはいいんだが、どうもディスクの同期が取れていないっぽい…。
「まさか、待機系のmysqlはdrbdでミラー化されたディスクじゃなくてローカルディスクを見ている?」
と思ったが、そんなことはない。ちゃんとdrbdを見ている。
では、なぜ?とdrbdのステータスを見たところ

# service drbd status
drbd driver loaded OK; device status:
version: 0.7.25 (api:79/proto:74)
GIT-hash: 3a9c7c136a9af8df921b3628129dafbe212ace9f build by root@linux01, 2009-11-05 10:46:57
 0: cs:WFConnection st:Primary/Unknown ld:Consistent
    ns:0 nr:0 dw:31412 dr:108445 al:308 bm:435 lo:0 pe:0 ua:0 ap:0

ん、St: Primary/Unknown?
確か、Primary/Secondaryだったはず。
調べてみると、Secondaryとなるべき相手が見つからない状態になっている。

通信に使うNICも動いているけど、なんでだろう?

こちらを参考にして以下をやってみた。


ひとまず今マウントされているPrimaryの方を外付けディスクにバックアップ

# dd if=/dev/drbd0 of=/dev/sdb bs=16384

バックアップされたのを確認後、Secondary側で今のデータを捨て、リソースに繋ぐようにコマンド実行

# drbdadm -- --discard-my-data connect r0
※すぐ終わる

そして、Primary側でリソースに繋ぐ(PrimaryのデータをSecondaryも持つはず)

# drbdadm connect r0
※データ量にもよると思うが、数秒で終わった

もう一度、ステータスを確認してみる。

# service drbd status
drbd driver loaded OK; device status:
version: 0.7.25 (api:79/proto:74)
GIT-hash: 3a9c7c136a9af8df921b3628129dafbe212ace9f build by root@linux01, 2009-11-05 10:46:57
 0: cs:SyncSource st:Primary/Secondary ld:Consistent
    ns:216312 nr:0 dw:144992 dr:410449025 al:490 bm:1064 lo:0 pe:299 ua:0 ap:0
        [====>...............] sync'ed: 24.5% (687712/902828)K
        finish: 0:00:19 speed: 35,852 (35,852) K/sec
よかった。