stonith-helper

HAクラスタサポートの日々
~Pacemaker導入・運用の勘所~
2012年8月4日 OSC2012 Kansai/Kyoto
Linux-HA Japan
赤松 洋
Linux-HA Japan Project
1
ある日…
赤松君、最近 Pacemaker の
問い合わせが多いね
今週5件ですね、今年度だけで
すでに50件超えてます
三井さん
赤松
わが社だけでこれだけあるというこ
とは、コミュニティでも困ってる人が
多いんじゃないかなぁ?
Linux-HA Japan Project
2
ある日…
まぁ、そうかもしれませんね
よし決めた!保守運用ノウハウを
OSC で発表しよう!
三井さん
赤松
・・・あの
半年前も、OSC東京で
しましたよ?
Linux-HA Japan Project
3
ある日…
三井さん
赤松くん!
あとよろしく!
Linux-HA Japan Project
赤松
4
登場人物
三井さん
Linux-HA の重鎮の一人
何でも答えてくれます!
赤松
今回の演者、日々汗を流して
サポート業務に励んでいます
更に…
Linux-HA Japan Project
5
登場人物
かなさんとかよさんにも
登場して頂きます
Linux-HA Japan Project
6
本日のお話
①
フェイルオーバーに関する運用
②
Pacemaker の自動起動・停止・リストア
③
stonith について
Linux-HA Japan Project
7
ちなみに

インストール・環境構築の話はありません

GUI・Corosync の話もありません

仮想化の話は少し触れるかもしれません

DRBD の話もありません
Linux-HA Japan Project
8
ちなみに

環境は Pacemaker + Heartbeat(1.0.12)
に特化しています

個人的な見解に沿っている所もあります

ご不明な点は後ほどブースや、メール等で
お問い合わせ下さい
Linux-HA Japan Project
9
本日のお話
①
フェイルオーバーに関する運用
②
Pacemaker の自動起動・停止・リストア
③
最後に stonith について
Linux-HA Japan Project
10
某社のシステム構成
srv01
SBY
ACT
srv02
フェイルオーバ対象
sfex
prmSFEX(sfex)
prmFS(Filesystem)
grpDB
prmIP(IPaddr2)
prmDB(pgsql)
Linux-HA Japan Project
11
大変です!
どうされましたか?
リソースがフェイルオーバー
してます!
何をしたらよいでしょうか!?
Linux-HA Japan Project
12

まずは現状認識
と srv02 の状況
 srv02 ではリソースが正常稼働しているか
 srv01

具体的には crm_mon コマンドを実行
[srv02 ]# crm_mon△-fA△-1
が稼働しているか
 srv02 で正常稼働中か
 ha-log, messages ファイルなどを保存・分析
 その結果から…
 srv01
Linux-HA Japan Project
13
現状の
確認
サーバの電源
入ってない
Pacemaker が
起動していない
リソース異常が出力
サーバの電源ON
ハードやログの確認

コミュニティへ質問等
Pcemaker 起動
異常の調査・復旧
Standby実施



Linux-HA Japan Project
NW経路
ディスク異常
リソース異常
14

サーバの電源が入っていない
抜いた?
 各ケーブルの結線の確認
 電源押下、ディスクの状況確認
 ログファイルを分析用に保存
 調査・コミュニティへ質問

暴走?
メディア
入れっぱなし?
Pacemaker が起動していない時
 上記同様の確認
 ログファイルを分析用に保存
 調査・コミュニティへ質問
 Pacemaker
Stonith?
Pacemaker
暴走?
の起動
Linux-HA Japan Project
15

リソース異常が出力
 srv01を
Standby 化します
[srv02 ]# crm△-R△node△standby△srv01
 再度、現状認識
[srv02 ]# crm_mon△-fA△-1
 その結果から、(主に)下記の異常が判定
NW経路監視に異常
 ディスク監視に異常
 リソースに異常

Linux-HA Japan Project
16

リソース異常が出力
 srv01を
Standby 化します
[srv02 ]# crm△-R△node△standby△srv01
 再度、現状認識
クイズ!
[srv02 ]# crm_mon△-fA△-1
-R をつけると、どんな
効果があるでしょうか?
 その結果から、(主に)下記の異常が判定
 NW経路監視に異常
 ディスク監視に異常
 リソースに異常
Linux-HA Japan Project
17

NW経路監視に異常
[srv01 ]# crm_mon△-fA△-1
・・・
* Node srv01:
+ default_ping_set : 0 : Connectivity is lost
 srv01
ケーブル
抜線?
から経路監視先への導通で異常発生!
NIC故障?
Ifconfig
down
iptables
 問題が解決したらクラスタメンバに復帰
[srv01 ]# crm△-R△node△online△srv01
Linux-HA Japan Project
18

ディスク経路監視に異常
[srv01 ]# crm_mon△-fA△-1
・・・
+ diskcheck_status : ERROR
 サーバと共有ディスク間の導通で異常発生!
ケーブル
抜線?
ディスク
破損?
Multipahtd
iSCSI 等
異常
 問題が解決したらクラスタメンバに復帰
[srv01 ]# crm△-R△node△online△srv01
Linux-HA Japan Project
19

リソース異常
[srv01 ]# crm_mon△-fA△-1
・・・
* Node srv01:
prmDB: migration-threshold=1 fail-count=1
Failed actions:
prmDB_monitor_10000 ¥
(node=srv01, call=XXX, rc=-2, status=Timed Out): ¥
unknown exec error
 異常情報をクリアして、クラスタメンバに復帰!
[srv01 ]# crm△-R△resource△cleanup△prmDB△srv01
[srv01 ]# crm△-R△node△online△srv01
Linux-HA Japan Project
20
大変です!
どうされましたか?
リソースが両系共にいません!
どうしたらよいでしょうか!?
Linux-HA Japan Project
21

まずは現状認識
 両系ともサーバ自体の電源確認
 両系ともに

停電?
抜線?
Pacemaker が稼働している事を確認
srv02 を standby化
 最終的に
srv01 でリソースを稼働させるため
[srv02 ]# crm△-R△node△standby△srv02

次に crm_mon コマンドを実行
[srv02 ]# crm_mon△-fA△-1
Linux-HA Japan Project
22
現状の
確認
監視先確認等
NW経路異常
ディスク異常
Pacemaker 停止
両系でリソース
異常
データ復旧
リソース制約
未解除
srv01・srv02 の順で
異常解除
電源断
制約解除
Pacemaker 未稼働
Linux-HA Japan Project
23

NW経路監視が両系ともに異常
 経路監視先(デフォゲー等)が落ちてる可能性あり
[srv01 ]# crm_mon△-fA△-1
・・・
* Node srv01:
+ default_ping_set : 0 : Connectivity is lost
* Node srv02:
+ default_ping_set : 0 : Connectivity is lost
 NW関係の機材等を確認
 問題が解決したらクラスタメンバに自動で復帰
standby を解除
[srv01 ]# crm△-R△node△online△srv02
Linux-HA Japan Project
24

ディスク監視が両系ともに異常
 共有ディスクに異常が発生している可能性あり
[srv01 ]# crm_mon△-fA△-1
・・・
* Node srv01:
+ diskcheck_status
* Node srv02:
+ diskcheck_status
: ERROR
: ERROR
 FCケーブル等に異常が無い場合


Pacemaker を直ちに停止
データの調査・復旧等を実施
Linux-HA Japan Project
まずい
状況!
25

両系でリソース異常
 片系で監視異常、対向でも起動失敗等
[srv01 ]# crm_mon△-fA△-1
・・・
Failed actions:
prmDB_monitor_10000 ¥
(node=srv01, call=XXX, rc=7, status=complete): ¥
not running
prmDB_start_0 ¥
(node=srv02, call=XXX, rc=-2, status=Timed Out): ¥
unknown exec error


同時刻に重い処理(ウィルススキャンとか)が走った…
マウント対象デバイスの設定に問題がある…
Linux-HA Japan Project
26

両系でリソース異常
 異常情報をクリアしてサービス再開!
①
srv01 のリソース異常を解除、リソース再開

②
srv01 でリソース再開を確認

③
# crm△-R△resource△cleanup△prmDB△srv02
srv02 のリソース解除を確認

⑤
# crm_mon△-fA△-1
srv02 のリソース異常を解除

④
# crm△-R△resource△cleanup△prmDB△srv01
# crm_mon△-fA△-1
srv02 の standby 解除

# crm△-R△node△online△srv02
Linux-HA Japan Project
27

リソース移動制約が効いている(解除忘れ)
 以前、リソースを意図して対向サーバへ移動させた
crm_mon コマンドでは判定できず
 ログファイルに残るが、ローテートされて消えてしまう
 下記コマンドで制約の存在確認が可能

[srv01 ]# cibadmin△-Q | grep△cli-standby | grep△srv02
<expression id=“cli-standby-expr-grpDB” ¥
attribute="#uname" ¥
operation="eq" ¥
value=“srv02" ¥
type="string"/>

例えば srv01 にてリソース異常が発生したが srv02 で
上記制約が効いていると、両系で起動されない
Linux-HA Japan Project
28

リソース移動制約が効いている
 制約情報をクリアしてサービス再開!
①
srv01 のリソース異常を解除、リソース再開

②
srv01 でリソースが再開された事を確認

③
# crm△-R△resource△unmove△prmDB
解除された事を確認

⑤
# crm_mon△-fA△-1
リソース起動制約を解除

④
# crm△-R△resource△cleanup△prmDB△srv01
# cibadmin△-Q | grep△cli | grep△srv02
srv02 の standby 解除

# crm△-R△node△online△srv02
Linux-HA Japan Project
29

Pacemaker あるある : リソース異常の原因









高負荷だった(バッチ処理・ウィルススキャン等)
/tmp 配下のファイルが消された
max_connections を超えていた
pg_hba.conf(認証用ファイル)を編集した or 消した
multipathd, iSCSI の起動漏れによるデバイス無効
マウントする時に fsck の完全チェックが走った
${DocumentRoot}/index.html が無い or grep で失敗
ログファイルのパーミッションが root だった
その他:cib.xml の場所をド忘れ
お互い、気をつけましょう
Linux-HA Japan Project
30

さらにおまけ:起動スクリプトによる制御

LSB(Linux Standard Base)の仕様に則ったスクリプトである事

http://refspecs.linuxfoundation.org/LSB_4.1.0/LSB-Coregeneric/LSB-Core-generic/iniscrptact.html
① start / stop / status の各メソッドが実装されている。
② 停止中に start メソッドが実行され、正常起動した場合は "0" を返す
③ 停止中に start メソッドが実行され、起動失敗した場合は "0"
以外を返す
④ 稼動中に stop メソッドが実行され、正常停止した場合は "0" を返す
⑤ 稼動中に stop メソッドが実行され、停止失敗した場合は "0" 以外を返す
⑥ 稼動中に status メソッドが実行された場合は "0" を返す
⑦ 停止中に status メソッドが実行された場合は "0" 以外を返す
⑧ 停止中に stop メソッドが実行された場合は "0" を返す
Linux-HA Japan Project
31

さらにおまけ:起動スクリプトによる制御

ただし!監視処理が緩い!





pid ファイルの存在確認・/proc/$PID 確認程度
プロセスがサスペンドしてても気づかない
RA であれば wget, select文等、より確実で高度な動作確認が可能
基本的には RA でリソース管理する事を勧めます
且つ、コミュニティ提供の RA を利用される際は、事前に必ず
目を通される事を勧めます
個人的な見解:
snmpd, ntpd, multipathd 等、両系必ず動いていなくてはいけないリソースを
クローンとして稼働させる時には 起動スクリプトでも良いのかなと思います
尚、クローンはリソースが稼働した状態でも停止させずにそのまま組み込めます
Linux-HA Japan Project
32
本日のお話
①
フェイルオーバーに関する運用
②
Pacemaker の自動起動・停止・リストア
③
最後に stonith について
Linux-HA Japan Project
33
shutdown コマンドでサーバが停止
しません!
大変です!
どうされましたか?
Linux-HA Japan Project
34

実は…Pacemaker を手動停止する前に
サーバを緩やかに停止(※)する事は少し危険
 リソース停止異常が発生すると、ダンマリしちゃう!
 ゲストOSを管理対象にしていると、対向でゲストOSが
まともに起動しない!

詳細については別途…
※ # shutdown△-h△now
 保守者は
Pacemaker を事前に停止させ、停止を確認し
た後にサーバの停止を行って下さい
 もしくは、上記状態になったら… # reboot△-f△-r
Linux-HA Japan Project
35

更に…Pacemaker の自動起動も、あんまり
お勧めしません



各ネットワーク、ちゃんと繋がってるか
共有ディスクとの接続、問題無いか
リソースの設定ファイル等がキチンと用意されてるか
 これらを保守運用者さんが確認してから起動しないと
ヘンなところで止まっちゃう…
 保守者は
Pacemaker を起動する前に、環境の確認を
行って下さい
Linux-HA Japan Project
36
Pacemaker を起動したのに、ずっと
OFFLINE のままで、クラスタメンバに
入ってきません!
大変です!
どうされましたか?
Linux-HA Japan Project
37

実は…
リストア手順を誤ると、クラスタに組みこまれない
 片系で正常稼働、もう片系を停止後、丸ごとリストア
 リストア後に
Pacemaker を起動すると、陥ります
 原因:/var/lib/heartbeat/hb_generation
(世代管理ファイル)の不一致によるもの

起動時に 1 上がります
 こうなると、リストアしたサーバを再起動するしかない
Linux-HA Japan Project
38

裏:簡単な再現方法(srv01 がリストアと想定)
 両系で正常稼働の状態にする
2 以上
Pacemaker を正常に停止
 片系(srv01)の世代管理ファイル内の数値を少なくして保存
 片系(srv01)の Pacemaker を起動
 片系(srv01)の
 srv01
のログ
450 からERROR
srv01 heartbeat: [XXXXX]: WARN: ¥
Message hist queue is filling up (376 messages in queue)
 srv02
のログ
500 まで
カウントアップ
srv02 heartbeat: [XXXXX]: ¥
ERROR: should_drop_message: attempted replay attack [srv01]? ¥
[gen = 1336642803, curgen = 1336642852]
Linux-HA Japan Project
39

裏:簡単な再現方法(srv01 がリストアと想定)
 両系で正常稼働の状態にする
2 以上
Pacemaker を正常に停止
 片系(srv01)の世代管理ファイル内の数値を少なくして保存
 片系(srv01)の Pacemaker を起動
 片系(srv01)の
 srv01
のログ
!注意!
450 からERROR
srv01 heartbeat: [XXXXX]: WARN: ¥
Message hist queue is filling up (376 messages in queue)
この手順を行うと、srv01 を
500 まで
 srv02再起動しなくてはいけません
のログ
カウントアップ
srv02 heartbeat: [XXXXX]: ¥
ERROR: should_drop_message: attempted replay attack [srv01]? ¥
[gen = 1336642803, curgen = 1336642852]
Linux-HA Japan Project
40

対策
 リストア前に世代管理ファイル等(※)を削除する
 もしくはリストア後(且つ
Pacemaker 起動前)に世代管理
ファイル等(※)を削除する


当ファイルが無い状態で起動するのは、問題ない
ちなみに以前よりも大きな値になっても、問題ない
 もし発生したら、リストアしたサーバを再起動させ、世代管理
ファイル等(※)を削除して Pacemaker を起動

リストアする運用には上記運用を徹底して下さい
※:
[srv01 ]# rm△-f△/var/lib/heartbeat/crm/*
[srv01 ]# rm△-f△/var/lib/heartbeat/hb_generation
Linux-HA Japan Project
41
本日のお話
①
フェイルオーバーに関する運用
②
Pacemaker の自動起動・停止・リストア
③
stonith について
Linux-HA Japan Project
42

stonith について大まかに触れておきます
 stonith
はスプリットブレイン回避のためのしくみ
発動契機1: リソース停止失敗
 発動契機2: インターコネクトLAN抜けてた

詳細は JPUG 勉強会資料等
を参照して下さい
Linux-HA Japan Project
43

stonith について大まかに触れておきます
 stonith
をグループにした時の大まかな動作
Pacemaker
grpStonith
どれかで
OKだったら
prmA
prmB
成功!
prmC
Linux-HA Japan Project
44

stonith について大まかに触れておきます
 stonith
をグループにした時の大まかな動作
Pacemaker
成功するまで
繰り返し!
grpStonith
全部NG
だったら
prmA
prmB
成功するまで
返りません!
prmC
Linux-HA Japan Project
45

たまに聞く質問:
stonith による相撃ちって、
起こりますか?
起こります!
待機系が生き残る可能性もあります!
回避しなくちゃいけませんよね?
どうしたらいいんでしょう?
stonith-helper を使います!
Linux-HA Japan Project
46

stonith-helper とは、どちらのサーバを生かすか
を判断するリソース!
①
インターコネクト
LAN 抜線!
SBY
ハードウェア制御ボード
Remote Access Controller とも呼ばれます
Linux-HA Japan Project
47

stonith-helper とは、どちらのサーバを生かすか
を判断するリソース!
②
You’er
It’s
ALIVE!
SBY
ACT
stonith-helper
stonith-helper
ping 両系応答
※対向の制御ボードにも ping
を行っている事が重要
Linux-HA Japan Project
48

stonith-helper とは、どちらのサーバを生かすか
を判断するリソース!
③
I’m ACT!
I’m SBY
SBY
ACT
stonith-helper
stonith-helper
ACT・SBY判定
Linux-HA Japan Project
49

stonith-helper とは、どちらのサーバを生かすか
を判断するリソース!
④
Shoot!
・・・
SBY
ACT
stonith-helper
stonith-helper
実行プラグイン
stonith 実行
Linux-HA Japan Project
50

更に聞く質問:
でも 制御ボードが変だった場合って
どうなるんですか?
その時は、やっぱり stonith-helper が
判断して、対向サーバが撃ちます!
Linux-HA Japan Project
51

stonith-helper とは、どちらのサーバを生かすか
を判断するリソース!
⑤
・・・
・・・
SBY
ACT
stonith-helper
stonith-helper
実行プラグイン
stonith 実行
応答なし
Linux-HA Japan Project
52

stonith-helper とは、どちらのサーバを生かすか
を判断するリソース!
⑥
・・・
Shoot!
ACT
SBY
stonith-helper
stonith-helper
実行プラグイン
実行プラグイン
stonith 実行
Linux-HA Japan Project
53

更に聞く質問:
でも 制御ボードが両系ともに変だった
場合ってどうなるんですか?
両系とも待つ状態になり、タイム
アウトでループし続けることに
なります。
ちょっとまずくないですか?
保守者介在してもらうため
meatware を使います!
Linux-HA Japan Project
54

meatware とは、保守者から Pacemaker へ
対向停止を報告する為のインタフェース!
⑦
・・・
・・・
SBY
ACT
stonith-helper
stonith-helper
実行プラグイン
実行プラグイン
stonith 実行
応答なし
Linux-HA Japan Project
55

meatware とは、保守者から Pacemaker へ
対向停止を報告する為のインタフェース!
⑧
・・・
・・・
ACT
stonith-helper
実行プラグイン
srv02
電源断
保
守
者
様
meatware
Linux-HA Japan Project
56

meatware とは、保守者から Pacemaker へ
対向停止を報告する為のインタフェース!
I’m
ACT!
⑨
・・・
ACT
stonith-helper
実行プラグイン
meatware
srv01
コマンド実行
保
守
者
様
[srv01 ]# meatclient△-c△srv02△-w
PROCEED? [yN] y
Linux-HA Japan Project
57

更に聞く質問:
でもこれって 制御ボード向けLANも
抜線されてると、まずくないです
か?
まずいです!!
stonith-helper で両系とも OK と判定
します!
回避しなくちゃいけませんよね?
どうしたらいいんでしょう?
最後の砦 sfex を使用します!
Linux-HA Japan Project
58

sfexリソースは、最後の砦!
⑩
You’er
Dead
I’m ACT!
ACT
ping 両系応答なし
両系ACT
ACT
stonith-helper
stonith-helper
srv01
Linux-HA Japan Project
59

sfexリソースは、最後の砦!
⑪
You’er
Dead
I’m ACT!
ACT
srv02
sfex-lock失敗
ACT
srv01
Linux-HA Japan Project
60

尚 sfex リソースの詳細は コミュニティ公開資料
を参考にして下さい!
詳細は JPUG 勉強会資料等
を参照して下さい
Linux-HA Japan Project
61
 まとめ



stonith に(最低限)stonith-helper 必須!
meatware が無いと、サーバの電源をコンセントから抜線!
下記リソース配置が現状では理想
Resource Group: grpStonith1
prmStonith1-1 (stonith:external/stonith-helper): Started srv01
prmStonith1-2 (stonith:external/実行プラグイン): Started srv01
prmStonith1-3 (stonith:meatware):
Started srv01

(共有ディスクがあるなら)sfex は必須!
Resource Group: grpDB
prmSFEX (ocf:heartbeat:sfex): Started srv01
・・・
Linux-HA Japan Project
62
 ちなみに…実行プラグインについて


実行プラグインは、ハードウェア制御ボードを直接制御します
2012年8月時点で Linux-HA Japan で検証している
実行プラグインと制御ボードの組み合わせは下記の通り
実行プラグ
イン名
ハードウェア制御ボード
ipmi
HP iLO3・DELL DRAC・IBM IMM
HP iLO2(ただしファームウェアがバージョン2以上)
(HP MicroServer 付属の制御ボードの制御も ipmi です)
riloe
HP iLO1・HP iLO2
ibmrsa-telnet
IBM RSA
以上です!
Linux-HA Japan Project
63
ご清聴、ありがとうございました
Linux-HA Japan Project
64
 クイズの答え

「-R」をつけないと…
別冊あんどりゅーくん(第2号)にて
提示されているノウハウです
[srv01 ~]# crm△resource△move△dummy△srv02△force
[srv01 ~]# tail△/var/log/messages
Jul DD SS:MM:SS srv01 ¥
crm_resource: [XXXXX]: info: Invoked: ¥
crm_resource -M -r dummy –node=srv02 –force

「-R」をつけると…
[srv01 ~]# crm△-R△resource△move△dummy△srv02△force
.EXT crm_resource -M -r ‘dummy’ –node=’srv02′ –force
[srv01 ~]# tail△/var/log/messages
Jul DD SS:MM:SS srv01 ¥
crm_resource: [XXXXX]: info: Invoked: ¥
crm_resource -M -r dummy –node=srv02 –force
Linux-HA Japan Project
65