mokky14's IT diary

IT関係の仕事メモ、勉強会の感想など書いてます。

crm resource migrateの罠

Pacemakerのクラスタ切替方法調べててハマったのでメモ。

crm resource helpに以下の記載があるのを見つけた。

migrate,move migrate a resource to another node
unmigrate,unmove unmigrate a resource to another node

migrateならクラスタ切替出来るな、と思ったのが罠。

早速コマンドを実行。

# crm resource move vip
WARNING: Creating rsc_location constraint 'cli-standby-vip' with a score of -INFINITY for resource vip on host1
        This will prevent vip from running on host1 until the constraint is removed using the 'crm_resource -U' command or manually with cibadmin
        This will be the case even if 0270-host1 is the last node in the cluster
        This message can be disabled with -Q

WARNINGが出たが、目論見通り系切替が出来た。
(今見ると、このWARNINGの内容をちゃんと読んでおくべきだった。。)

が、その後、vipと同一グループのリソースにエラーが起きても、クラスタ切替が走らなくなった。
なぜだと思って色々調べていたら、crm configure showで見慣れない定義が追加されてたのを見つけた。

location cli-standby-vip vip \
        rule $id="cli-standby-rule-vip" -inf: #uname eq host1

この定義がある限り、vipはhost1には絶対に切り替わらない。(-infは"絶対に〜してはならない"という定義)
いつ追加された定義かを確認したら、crm resource moveを実行した時に追加されたことが分かった。

対処として

# crm resource unmigrate vip

を実行することで、上記のlocation定義は消えた。
(ちなみに、moveとmigrate、unmoveとunmigrateはそれぞれ同じ動作をするオプションになる)

とは言え、unmigrateをクラスタ切替後に実行したかは、crm_monの結果からは確認出来ないので、実行忘れが怖い。毎回crm configure showするのも非現実的だし。

クラスタ切替は

# crm node standby host1
# crm node online host1

という手順で、ACT側のノードを一旦standbyにすることでリソースを反対のサーバに移動させて、その後、standbyのノードをonlineにすることで実施することにした。

もう少し綺麗なクラスタ切替の方法はないんかなぁ。。