Chronyとは
Chronyとは、NTPサーバ及びNTPクライアントの実装の1つで、読み方は「クローニー」である。Chronyは元々、Richard Curnow氏によって開発され、現在はMiroslav Lichvar氏が管理している。ライセンスはGNU GPL v2(GNU General Public License version 2)の下で公開され、Linux、FreeBSD、NetBSD、macOS、Solaris等、様々な各OSで動作する。
NTPサーバ(Network Time Protocol Server)とは、インターネット上で現在時刻の情報を配信するサーバでローカルな検証環境を構築するために必要となる。NTP(Network Time Protocol)とは、コンピュータ上の1 秒以下の誤差をms(ミリ秒)、us(マイクロ秒)単位で識別して時刻を修正し、正しい時刻に同期するプロトコルである。上記の仕組みがある事で、最終的に正確な時間を維持することが可能となる。Chronyは、CentOS7やRed Hat Enterprise Linux7以降、NTPサーバ及びNTPクライアントのデフォルトになっており、CentOS8、Rocky Linux、AlmaLinuxなどの後継のRHELクローンでもChronyが標準である。CentOS7より前はChronyの代わりにntpdが利用されていた。Chronyはntpdとは異なる時刻同期アルゴリズムを採用し、より効率良く正確な時刻同期を提供することが可能となる。この記事では、Chronyの特徴やChronyの仕様についてまとめている。
Chronyと時刻同期
時刻同期の重要性
では、時刻同期がなぜ重要であるかというと、システムを起動し、管理するに当たって信頼できる基準の一つが時刻であるためである。時刻がずれてしまうと、例えばメールであれば、相手の時刻が誤って正しい時刻よりも先に進んでいた時、こちらに届くメールは未来からのメールとなってしまう。そのため、メールが届いた時刻を正確に把握する事ができず、業務に支障をきたす可能性がある。また、複数のサーバのログを調査する場合にも、クライアント側とサーバ側で違った時刻が記録されていると、その時刻の状況やどの通信で障害が起きているのかを調べることが困難となり、解決するのに時間を要してしまう。
このように世界中のネットワークと共有して接続する中で、必ず共通して重要なことは正しい時刻が設定されていることである。時刻はクライアント側とサーバ側の両方のシステムを関連づける重要な基準となる。時刻を合わせることは、コンピュータ間の信頼につながるため、時刻同期は必須となる。時刻合わせを手動で設定することは手間である。NTPサーバを利用することで自動化でき、サーバの時刻の精度を高め、正確な時刻の設定を保つことが可能となる。
NTPサーバの仕組み
CentOS7やRed Hat Enterprise Linux7以降、ntpdに代わりNTPサーバとNTPクライアントのデフォルトとなっている。NTPは、ネットワークにアクセスを許可された機器の時刻同期を行うためのプロトコルである。インターネット上には、時刻が正確なNTPサーバがいくつも公開・運用されている。これらのサーバにNTPクライアントが接続し時間情報を確認して取得することで、サーバやPC内部の時刻を正しい時刻に調整することができる。取得した時刻の情報は、さらに他のサーバやPCから参照することができる。NTPサーバはstratumという階層構造になって、最上位のサーバは原子時計やGPSから正確な時刻を取得している。下位のサーバは上位のサーバに時刻の問い合わせを定期的におこなっているが、この時刻同期を行っているのがChronyである。
Chronyの特徴
ntpdと比べたときの特徴は以下である。
- 常に高速で正確に時刻同期ができる
- 様々な条件で適切に機能する
例えばコンピュータの電源が切れる、ネットワークが頻繁に切断される、時刻同期が継続的に実行されない、仮想マシンで実行されるシステムなど、様々な条件下でも適切に機能するように設計されている。しかし、ntpdの場合には、時間参照のための定期的なポーリングが必要になる。
- 環境の変化でもすばやく適応する
ntpdは環境の変化で、落ち着くまで時間がかかる場合があるが、Chronyは温度が変わるといった変化でも素早く対応できる。
- 仮想マシンのようなシステムクロックが正確でない環境でも、柔軟に時間調整することができる
- NTPバージョン3(RFC1305)を使用している
chronydはNTPバージョン3(RFC 1305)、ntpdはNTPバージョン4(RFC 5905)を使用している。バージョン3はバージョン4と完全互換性がある。
- NTPサービスが停止することがない
ntpdは、時間のずれが大きくなると調整をすることができず、NTPサービスが停止してしまう場合がある。しかし、Chronyには大きな時間のずれが生じても、適切に対応して時刻を同期する機能があるためNTPサービスが停止することがない。
Chronyの仕様
クライアントとサーバの両方の役割を持っている。クライアントからサーバへ時刻を問い合わせすること以外にもサーバからクライアントへ正確な時刻を伝えることができる。
ユーザスペースで実行されるデーモンのchronydと、chronydの状態を閲覧したり様々なオペレーティングパラメーターを実行中に変更することに使用できるコマンドラインプログラムchronycから構成されている。それぞれ、NTPクライアントの機能をchronyc、NTPサーバの機能をchronydと呼ぶが、設定ファイルに違いはなく、設定ファイルは/etc/chrony.confの1つのみである。confファイルにrtcsyncという設定で、ハードウェアクロックとの同期が可能となっている。また、minsourcesでは、時刻同期に必要な最低限のNTPサーバの数を指定できる。
Chronyのデメリット
適切に時刻を同期する機能を持つChronyだが、以下のデメリットがある。
- マルチキャストによる時刻同期をサポートしていない
- RCFC5906で定義された高度な認証スキームをサポートしていない
- ブロードキャストクライアントとして動作することができない
chronycを利用した同期確認
では、ここでchronycを利用した同期確認を検証する。chronycコマンドにsourcesサブコマンドを指定して入力する方法で、NTPサーバとの同期確認を行うことができる。ソースを実行してみると以下のような出力結果が表示される。
# chronyc sources 210 Number of sources = 4 MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^- y.ns.gin.ntt.net 2 10 377 634 +6622us[+6439us] +/- 93ms ^- sh11.paina.net 2 9 365 1066 +1767us[+1586us] +/- 74ms ^- kuroa.me 2 9 377 432 -1646us[-1830us] +/- 56ms ^* ntp-a2.nict.go.jp 1 10 377 91 -893us[-1080us] +/- 6677us
NTPサーバはstratumという階層構造になっており、最上位のサーバは原子時計やGPSから正確な時刻を取得している。最上位のNTPサーバは「stratum 1」であり、階層が下がるごとにstratumの値が上がる。
以上の結果からchronycコマンドにある「Stratum(階層数)」の項目を確認すると、「ntp-a2.nict.go.jp」という名前のサーバが最上位のNTPサーバであることを示している。また、「ntp-a2.nict.go.jp」の左側に「*(アスタリスク)」がついていることから、このNTPサーバと同期をとっていることを特定できる。
デージーネットの取り組み
デージーネットでは、CentOSなどのLinuxディストリビューションの設定や使い方についての書籍を多数出版している。これらの本には、NTPサーバの作成、設定、管理についても記載されている。また、デージーネットでネットワークサーバを設定する際には、原則としてNTPサーバの設定を行っており、ほとんどの場合にはChronyを使っている。最後にデージーネットで設定したサーバーでは、Open Smart Assistanceサービスというサポートサービスを利用することができる。このサービスでは、システム全体が安定稼動するようにサポートを提供している。Q&Aの対応やセキュリティ情報提供、障害調査を行っている。運用オプションでは、システムの定期点検やセキュリティのアップデート作業を行うことも可能である。
【カテゴリ】:ネットワークインフラ  オープンソースソフトウェア  
【Webセミナー】自社でOSSを採用しよう!今更聞けないOSSの基本セミナー
日程: | 11月22日(金)Webセミナー「BigBlueButton」を使用します。 |
内容: | OSSを導入したいけど、どこから手をつければいいかわからない方必見! |
ご興味のあるかたはぜひご参加ください。 |