どうも、Corosync のことをコロちゃんって言える位に仲良くなりたいかっぱ (@inokara)です。
どうしてもログが出力されないんです…
きっかけは Corosync と Pacemaker が出力するログを /var/log/messages
以外に出力したくて以下のように設定ファイルを書きましたが…
corosync.conf
logging { fileline: off to_logfile: yes to_syslog: no debug: on logfile: /path/to/corosync.log debug: off timestamp: on logger_subsys { subsys: AMF debug: off } }
でも…いつまでたっても /path/to/corosync.log
に出力される毛はい、もとい、気配無し。あれやこれや通算で三日間位悩んだ挙句に問題発見…。その問題とは…
corosync.conf の…タイポ
しかも、ログの設定部分ではなく totem
の部分。
totem { version: 2 secauth: off interface { member { memberaddr: xxx.xxx.xxx.xx1 } member { memberaddr: xxx.xxx.xxx.xx2 } ringnumber: 0 bindnetaddr: xxx.xxx.xxx.xx1 mcastport: 5405 ttl: 1 } transport: udpu } }
そして、こっちが正しい。
totem { version: 2 secauth: off interface { member { memberaddr: xxx.xxx.xxx.xx1 } member { memberaddr: xxx.xxx.xxx.xx2 } ringnumber: 0 bindnetaddr: xxx.xxx.xxx.xx1 mcastport: 5405 ttl: 1 } transport: udpu }
この違い、お解りになりますでしょうか…、そう、そうなんです。transport: udpu
の下についた }
これが全ての元凶です。この記述があったが為に以降の設定をちゃんと読んでくれていなかったようです…なんと…。
既に corosync のメーリングリストにも同じようなことで悩んでいる方がいらっしゃいました。
なんでしょう、自分の typo を棚上げにして申し上げるのは恐縮ですが、この状態でも正常に起動してしまうのはいかがなもんかな…。
ちょっと調べる
以下の条件で corosync がどのレベルで corosync.conf
のチェックを行っているかを調べてみました。
- 設定パラメータに間違い
- パラメータの設定値に間違い
- 不正な文字列混入
手順としては条件を設定後に /etc/init.d/corosync restart
を実行して corosync が起動するかを確認。
パラメータ不正
条件
transport: udpu
をransport: udpu
に設定
結果
parse error in config
となり起動せず
パラメータの設定値不正
条件
transport: udpu
をtransport: dpu
に設定
結果
parse error in config
となり起動せず
不正な文字列混入
条件
以下のように混入させました。
結果
- 起動しました
- 但し、不正な文字以降の設定は読み込んでくれない挙動でした
ということで…
- corosync.conf 設定のチェックはちゃんと行われています
- パラメータやその値を条件判断して条件に合致しないものをエラーとして
parser_error
って関数に飛ばして処理しているようです - 但し、ファイルの全体的な解析は行っていないようで不正な文字列が行間に入っていてもそのまま起動してしまう挙動でした
ということで…
自分のタイポを棚に上げてすいませんでしたが…設定ファイルのシンタックスチェックの実装はアプリケーションによってマチマチなので気をつけましょうってことで引き続き宜しくお願いいたします。
ううむう…
元記事はこちらです。
「コロちゃんの corosync.conf シンタックスチェックが個人的にイマイチな件についてメモ」