hypermkt blog

サーバー時刻を自動的に補正する方法

January 12, 2014

サーバー時刻はあまり正確ではなく、少しずつずれていき、年間で約10分ずれます。時刻がずれるとアプリやAIの動作に影響があるので必ず正確な時刻に補正しましょう。

今回はntpdを利用して自動的に補正します。##サーバー時刻がずれていることの問題点

サーバー時刻がずれているといろいろヤバイです

過去に自分が経験した事例としては

  • 正確なログ調査ができない。

  • 複数台化構成で時刻がずれてるとデータの並び替えにずれが起きる(レコードのcreate_dateをnow()ではなく、アプリ側で日付を作り登録する仕様だとこうなります。)

  • 5〜10分近くずれるとAPIでエラーが起こることもある(前にRoute53で登録に失敗したことがあったような)

などなど、とにかく単にログだけではなくアプリの動作にも影響する可能性もありますので、必ず正確な時刻に合わしておく必要があります。

Chefでntpを入れよう

cookbooks/ntp/recipes/default.rb

%w{ ntp }.each do |package| package package do action :install end end

template “ntp.conf” do path “/etc/ntp.conf” owner “root” group “root” mode 0644 source “ntp.conf.erb” notifies :restart, “service[ntpd]” end

service “ntpd” do action [ :enable, :start] supports :status => true, :restart => true, :reload => true end

cookbooks/ntp/templates/default/ntp.conf.erb NTPサーバーは日本標準時刻にあわせるため、日本のサーバーを使用します。

Permit time synchronization with our time source, but do not

permit the source to query or modify the service on this system.

restrict default kod nomodify notrap nopeer noquery restrict -6 default kod nomodify notrap nopeer noquery

Permit all access over the loopback interface. This could

be tightened as well, but to do so would effect some of

the administrative functions.

restrict 127.0.0.1 restrict -6 ::1

Hosts on local network are less restricted.

#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

Use public servers from the pool.ntp.org project.

Please consider joining the pool (http://www.pool.ntp.org/join.html).

server -4 ntp.nict.jp server -4 ntp1.jst.mfeed.ad.jp server -4 ntp2.jst.mfeed.ad.jp server -4 ntp3.jst.mfeed.ad.jp

#broadcast 192.168.1.255 key 42 # broadcast server #broadcastclient # broadcast client #broadcast 224.0.1.1 key 42 # multicast server #multicastclient 224.0.1.1 # multicast client #manycastserver 239.255.254.254 # manycast server #manycastclient 239.255.254.254 key 42 # manycast client

Undisciplined Local Clock. This is a fake driver intended for backup

and when no outside source of synchronized time is available.

server 127.127.1.0 # local clock fudge 127.127.1.0 stratum 10

Drift file. Put this in a directory which the daemon can write to.

No symbolic links allowed, either, since the daemon updates the file

by creating a temporary in the same directory and then rename()‘ing

it to the file.

driftfile /var/lib/ntp/drift

Key file containing the keys and key identifiers used when operating

with symmetric key cryptography.

keys /etc/ntp/keys

Specify the key identifiers which are trusted.

#trustedkey 4 8 42

Specify the key identifier to use with the ntpdc utility.

#requestkey 8

Specify the key identifier to use with the ntpq utility.

#controlkey 8

初回は手動で補正しよう

ntpdは時間がずれ過ぎているといきなり補正しないしようとのことなので、初回は手動で補正するのが早いです

/etc/rc.d/init.d/ntpd stop ntpdate ntp.nict.jp /etc/rc.d/init.d/ntpd start


都内で働くWebアプリケーションエンジニア。主にサーバーサイド。最近はRuby/Railsでコードを書くのが楽しい。