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にすることで実施することにした。
もう少し綺麗なクラスタ切替の方法はないんかなぁ。。