2015年2月27日金曜日

時刻同期先が2台の場合のntpdの設定方法

別記事でnptdの設定方法について調べた結果を記載したが、もう少し考慮が必要だった。具体的には時刻同期先の上位サーバーが2台の場合、特別な設定が必要だったことがわかった。

事象

ntpdは仕組みとして、同期先のサーバーの時刻の信頼性を見る仕組みがある。具体的には、万が一参照先の時刻が何らかの理由で時刻がずれた際に、その影響を受けることを回避するため、その時刻の信頼性を低いと見なして同期先候補から外すという動きをする。

その際に、「多数決」で同期先を選定する仕組みがあるのだが、同期先が2台の場合は多数決ができずに、全ての同期先を信頼性が低いと見なしてしまい、同期ができなくなる、ということが問題になる。
※RHELでは4台以上を同期先にすることを推奨している
※正確には単純な多数決ではない同期先決定のアルゴリズムがあるが、私も理解できていないので詳細は省略

回避策

それでも社内のNTPサーバーが2台しかない、等あればどうにかするしか無い。回避策は2つ。

trueオプションを付ける

これはRHELの推奨方法。ntp.confのserverのオプションで"true"と付けてやれば良い。なお、似たようなオプションに"prefer"がある。これらの違いは、ntp.confのmanページの記載を見れば書いてある。
prefer
このサーバを優先します。すべての他の要素が等しくても、このホストが同期のために選ばれます。 詳しくは 緩和ルールと prefer キーワード のページを参照ください。 このオプションは server と peer コマンドでのみ有効です。

true
このアソシエーションを正確な状態であると仮定します。つまり、選択アルゴリズムとクラスタリング アルゴリズムで必ず生き残ります。このオプションはどのアソシエーションでも有効ですが、 シリアルポート上の大きなジッターや精度 pulse-per-second (PPS) 信号をもつ参照クロックにとっては 最も有益です。
微妙にわかりづらい表現で書いてある。私の理解では、"prefer"は同期先候補のNTPサーバが複数あった場合に、このオプションを付けたサーバーを優先して同期先とする設定、"true"はそのサーバーの時刻を参照できる限り、そのサーバーを同期先とする設定となる。

同期先は2台の場合は全てのNTP同期先を正しいと判断できずに同期先候補から外すことが問題なので、"prefer"オプションではなく、"true"の設定が正しい。

同期先を1つにする

シンプルに同期先を1つにしてしまうということも一つの手だと思う。上位NTPサーバーの稼働率が良好で、時刻のずれも発生しないような環境であれば、特に問題ないと割り切る。


参考URL

2 台の NTP サーバーを、「プライマリ」および「バックアップ」に指定して使用することはできますか?
https://access.redhat.com/ja/node/441873