ページ

2015年4月22日

Pacemakerのリソース定義って何が正解なんでしょう・・・



Qiitaの記事をそのままやってみたら・・・なんかちょっと気になることが




cibデータベースがちょっと気になりまして


Qiitaの記事で、
CentOS7 2台でレプリケーションを使ってみてちょっと疑問

op addすると、cibadmin -queryで出力したファイルを見ると2つの定義ができています。

動作的には問題ないのでしょうけど、見た目にちょっと違和感がありますね。

<引用>

cib create mysql ocf:heartbeat:mysql \
    binary=/usr/bin/mysqld_safe \
    pid=/var/run/mariadb/mariadb.pid

cib update mysql replication_user=repl
cib update mysql replication_passwd=tieP7iLu

cib op add mysql start interval=0 timeout=120s
cib op add mysql stop interval=0 timeout=120s

cib op add mysql monitor interval=20s timeout=30s
cib op add mysql monitor interval=10s role=Master timeout=30s
cib op add mysql monitor interval=30s role=Slave timeout=30s

cib op add mysql promote interval=0 timeout=120s
cib op add mysql demote interval=0 timeout=120s
cib op add mysql notify interval=0 timeout=90s

op addではなくて、op startの用に記述すると複数定義ようなcibファイルにならないです。


# pcs -f mysql_repl resource create mysql ocf:heartbeat:mysql \

を実行するとcibファイルには:


<op id="mysql-start-timeout-120" interval="0s" name="start" timeout="120" />
が生成されます。

ところがop addで追加すると


<op id="mysql-start-timeout-120" interval="0s" name="start" timeout="120" />
に加えて


<op id="mysql-name-start-interval-0-timeout-120" interval="0" name="start" timeout="120" />

が追加されます。

そこで、最初に追加されるinterval="0s" timeout="120"の設定で追加しようとすると:


Error: identical operation already exists for mysql

となります。

次に、op updateをつかうと

なにも変化しません。。。

そのため、pcs -f mysql_replで始まる行を一行で(改行を¥でエスケープ)記述すると:

<op id="mysql-start-timeout-120" ...はなくなり


<op id="mysql-start-interval-0s" interval="0s" name="start" timeout="120" />

が追加されます。

そこで、interval="0" timeout="100"として実行すると


<op id="mysql-start-interval-0" interval="0" name="start" timeout="100" />

と設定されます。

cibファイルの構造が何が正しいのかわかりませんが、一行で設定するのが良いように思います。


時間で記述するものなの?


次に、interval=やtimeout=で設定する値についてちょっと疑問:

設定コンディションの、「timeout=120s」って時間で記述するものなの?

Clusters from Scratchには、interval=0s, timeout=60だったりとS付けるべきかどうか迷ってしまいました。

pcsコマンドで生成されるcibファイルには、interval="0s"で生成されます。

/usr/lib/ocf/resource.d/heartbeat/mysqlを参照すると、interval="0", timeout="60"という記述するようなので記述はこちらに準拠することにしています。

どっちでも動くのでしょうけど・・・

ちなみに、ocf:heartbeat:mysqlで検索したWiKiの例では、S無し、””囲みで記述でした。