heartbeatでサービスが引き継がれた際に、Subversion(SVN)でエラーが出た。
コミット時にリポジトリのdb/txn-current-lock に書き込めない、とあった。
調べてみると、ファイル・ディレクトリのオーナーが違う人になっていた。
要は、稼動系のuidとgidが待機系と違っていた、ということ。
usermod, groupmodで合わせたらあっさりコミット出来た。
こういうことも気を付けないといけなかった…。
2011年6月30日木曜日
heartbeat で cron設定を引き継がせる
heartbeatでcron設定(crontab)を引き継がせたくていろいろ調べてみた。
アプローチしては、似通ってくるけど3つぐらい
3がキレイだと思ったので、これを採用。
/etc/init.d/hacrontabとして
適当だけど…。
これを両方のノードに置き、/etc/haresourcesの最後にhacrontabを追加してheartbeatを再起動。
これでOKでした!
アプローチしては、似通ってくるけど3つぐらい
- 別ユーザのcronで自分のノードの状態を監視し、状態に応じてcrontab -u <ファイル>を実行する方法
- ha.cfの外部スクリプトでノードの状態を監視し、状態に応じてcrontab -u <ファイル>を実行する方法
- /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のステータスを見たところ
ん、St: Primary/Unknown?
確か、Primary/Secondaryだったはず。
調べてみると、Secondaryとなるべき相手が見つからない状態になっている。
通信に使うNICも動いているけど、なんでだろう?
こちらを参考にして以下をやってみた。
ひとまず今マウントされているPrimaryの方を外付けディスクにバックアップ
バックアップされたのを確認後、Secondary側で今のデータを捨て、リソースに繋ぐようにコマンド実行
そして、Primary側でリソースに繋ぐ(PrimaryのデータをSecondaryも持つはず)
もう一度、ステータスを確認してみる。
稼動系がサーバが落ちてしまい、ちゃんと待機系に切り替わったのはいいんだが、どうもディスクの同期が取れていないっぽい…。
「まさか、待機系の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
2011年6月22日水曜日
Google Spreadsheetを使った家計簿
家計簿はいろいろ悩むところ。
紙、かんたんなソフト、Excel、Microsoft Moneyなど高機能ソフト、いろいろ試してみた。
そこで気付いたのが、機能うんぬんよりも続けることへのハードルが低いものが一番。
高機能なものもいいんだけど、うち帰ってPC立ち上げてソフト上げて、ってやるのはちょっと大変。
(それでも2年ぐらい続けたけど…)
銀行から取り込みとかも出来るけど、「これは本買ったヤツだ」「これは服だから…」と費目を調整するのが億劫になる。
別に税務署に提出するわけでもないし、ある程度記録が出来れば十分。
そして、家でしか出来ないものではなく、スマホから出来たりすればさらにいい。
やっぱりまとめてって言うのは、億劫になるので、その都度がベスト。
というわけで、Google Spreadsheetを使って家計簿を作ってみた。
作り方はライフハックが一番分かりやすかった。
さて、今度こそ続くといいんだが…。
紙、かんたんなソフト、Excel、Microsoft Moneyなど高機能ソフト、いろいろ試してみた。
そこで気付いたのが、機能うんぬんよりも続けることへのハードルが低いものが一番。
高機能なものもいいんだけど、うち帰ってPC立ち上げてソフト上げて、ってやるのはちょっと大変。
(それでも2年ぐらい続けたけど…)
銀行から取り込みとかも出来るけど、「これは本買ったヤツだ」「これは服だから…」と費目を調整するのが億劫になる。
別に税務署に提出するわけでもないし、ある程度記録が出来れば十分。
そして、家でしか出来ないものではなく、スマホから出来たりすればさらにいい。
やっぱりまとめてって言うのは、億劫になるので、その都度がベスト。
というわけで、Google Spreadsheetを使って家計簿を作ってみた。
作り方はライフハックが一番分かりやすかった。
さて、今度こそ続くといいんだが…。
2011年6月21日火曜日
Subversionのコミットログを変更する
こちらを参考にした。
完全にこれで解決したので自分が書くこともないけど…。
Subversion(SVN)でコミットしたログを編集するには、TortoiseSVNから「ログを表示」→「ログメッセージを編集」でOK。
ただ、
その時は、Linuxサーバ上でhookスクリプト(pre-revprop-change)を書けばいいだけ。
テンプレートそのままでいいので、cpして実行権限を加えておけば出来た。
完全にこれで解決したので自分が書くこともないけど…。
Subversion(SVN)でコミットしたログを編集するには、TortoiseSVNから「ログを表示」→「ログメッセージを編集」でOK。
ただ、
などと言われることがある。Repository has not been enabled to accept revision propchanges; ask the administrator to create a pre-revprop-change hook
その時は、Linuxサーバ上でhookスクリプト(pre-revprop-change)を書けばいいだけ。
テンプレートそのままでいいので、cpして実行権限を加えておけば出来た。
PHPからサブシェルを使う
PHPから外部プログラムを使うには、execやsystemなどの関数が用意されている。
が、例えば
解決出来ないかな~、といろいろ探したが断念…。
仕方ないので、PHP上で一時ファイルを作って対応した。
なにかいい方法知ってたら教えてください!
が、例えば
% diff -c <(sort $foo) <(sort $bar)のようなサブシェルを含んだものを呼び出すと失敗…。
sh: -c: line 0: syntax error near unexpected token `('とエラーが出てしまう。
解決出来ないかな~、といろいろ探したが断念…。
仕方ないので、PHP上で一時ファイルを作って対応した。
なにかいい方法知ってたら教えてください!
TeratermでCtrl+Cが利かない…
Teratermでサーバに入っているが、特定のサーバでCtrl+Cが利かなくなってしまった…。
なんでだろう?と思って、調べたら以下がヒット。
http://ziddy.japan.zdnet.com/qa4546116.html
言われたとおり、サーバ上で
自分はzshを使っているので、.zshrcにstty intr ^Cと書きこんで一旦ログアウト&ログイン。
ちゃんとCtrl+Cが利くようになりました!
なんでだろう?と思って、調べたら以下がヒット。
http://ziddy.japan.zdnet.com/qa4546116.html
言われたとおり、サーバ上で
% stty -aと打ってみると intr = DELになってた。
自分はzshを使っているので、.zshrcにstty intr ^Cと書きこんで一旦ログアウト&ログイン。
ちゃんとCtrl+Cが利くようになりました!
登録:
投稿 (Atom)