どうも、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: udpuransport: udpu に設定
結果
  • parse error in config となり起動せず

パラメータの設定値不正

条件
  • transport: udputransport: dpu に設定
結果
  • parse error in config となり起動せず

不正な文字列混入

条件

以下のように混入させました。

corosync.conf に不正な文字列を含めて動作確認

結果
  • 起動しました
  • 但し、不正な文字以降の設定は読み込んでくれない挙動でした

ということで…

  • corosync.conf 設定のチェックはちゃんと行われています
  • パラメータやその値を条件判断して条件に合致しないものをエラーとして parser_error って関数に飛ばして処理しているようです
  • 但し、ファイルの全体的な解析は行っていないようで不正な文字列が行間に入っていてもそのまま起動してしまう挙動でした

ということで…

自分のタイポを棚に上げてすいませんでしたが…設定ファイルのシンタックスチェックの実装はアプリケーションによってマチマチなので気をつけましょうってことで引き続き宜しくお願いいたします。

ううむう…

元記事はこちらです。
コロちゃんの corosync.conf シンタックスチェックが個人的にイマイチな件についてメモ