アクセス数にて約10000/dayのサイトのサーバ移転をやることになった。コンテンツの移行に際してはphpやmysqlのバージョンなどで大変だったが、この記事ではDNSの浸透期間について記録しておきたい。というのも、DNSの浸透について書かれたサイトは数あれど、具体的な数字を載せているところはあまりない印象があるからだ。ちなみに『浸透』という言葉にやたら拒否反応を抱く面倒くさい方も一部いるみたいだが、実際にttl通りでは説明がつかない事象(中には技術的な間違いも多々あるが)はよく起こるし、別に言葉の正しさを極めたいわけではないので、あえて名称が適切かという話題はスルーで。
DNSの浸透期間について少し解説
※理解を整理するためメモ。初心者向けの内容なので読み飛ばしOK。
サイト移転のため古いサーバと新しいサーバを用意したとき、両者のグローバルIPが違うことがよくある。じつはIPこそが、インターネット上にひとつしかない(≒ユニークな)住所なのだ。IPというこの世にひとつしかない住所があるおかげで、我々は広大なインターネットで目的のサーバまでたどり着くことができる。
IPはドメインに紐付いている。我々がサイトにアクセスするとき、ドメインをIPに変換してアクセスしている。ドメインというのは仮のアクセス先で、本体のアクセス先はIPなのである。だからじつは、サーバのIPを直接アドレスバーに入力しても、サイトにたどり着けることは多い。たとえばgoogleにいきたい場合、そのサーバIPの216.58.197.3をアドレスバーに入力してもたどりつけるだろう。
google.co.jpにアクセスするときを考えてみよう。
1 2 3 4 5 |
google.co.jp ↓ (ドメイン名:google.co.jpをIP:216.58.197.3に変換) ↓ 216.58.197.3にアクセス |
ブラウザでは上記のような流れでサイトにアクセスしている。このドメインをIPに変換する仕組みを、DNS(Domain Name System)という。
DNSによってドメインはIPと紐付いているが、紐付けは変えることができる。しかしながら、DNSの紐付けを変えたからといって、広大なインターネットですぐ認知されるわけではない。少しずつ時間をかけてあたらしい紐付けが認知されていくのだ。この『時間をかけて』の部分が、一般的にDNSの浸透期間と言われているようだ。
結論、2日で99%が完了
単刀直入に結論から言おう。(DNS切替から)2日でアクセスの99%は新しいサイトをみるようになった。このときの条件は、
- 移行一週間前からttl=300を設定。
- 移行日の正午に切り替えを実施。
それでもやはり2日はかかってしまうことがわかった。1日だと七割強である(切替時間が正午のため、ここでの一日は12時間)。
古いサーバのアクセスログから集計したユニークアクセスの動きは以下である。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
一日目(切替日) 4894 二日目 1959 三日日 8 四日目 8 五日目 21 六日目 12 七日目 19 八日目 7 九日目 2 十日目 3 十一日目 4 十二日目 3 十三日目 6 十四日目 8 十五日目 4 十六日目 7 十七日目 0 十八日目 0 十九日目 1 二十一日目 0 二十二日目 1 二十三日目 0 二十四日目 1 二十五日目 1 二十六日目 0 二十七日目 1 二十八日目 0 二十九日目 0 三十日目 2 三十一日目 1 |
三日目以降のアクセスについて
二日で99%のアクセスが新しいサーバに行くことはわかった。では三日目以降も古いサーバにきているアクセスはいったいなんなのだろうか?ログから一部抜粋してみる。
普通のアクセス?
1 2 3 4 5 6 7 |
"GET /index.html HTTP/1.1" 200 3691 "-" "curl/7.17.1 (mips-unknown-linux-gnu) libcurl/7.17.1 OpenSSL/0.9.8i zlib/1.2.3" "GET /index.html HTTP/1.1" 200 3691 "-" "Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko" "GET / HTTP/1.1" 301 247 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36" "GET /index.html HTTP/1.1" 200 3691 "-" "Mozilla/5.0 (Windows NT 5.1; rv:9.0.1) Gecko/20100101 Firefox/9.0.1" |
わざわざIPを指定してアクセスする人
1 2 3 4 5 |
"GET /index.html HTTP/1.1" 200 3691 "http://xxx.46.163.31:80/" "Go-http-client/1.1" "GET /index.html HTTP/1.1" 200 3691 "http://xxx.46.163.31:80/" "Mozilla/5.0 zgrab/0.x" "GET / HTTP/1.1" 301 247 "http://xxx.46.163.31:80" "Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.1)" |
Linux系
1 |
"GET / HTTP/1.1" 301 249 "-" "curl/7.17.1 (mips-unknown-linux-gnu) libcurl/7.17.1 OpenSSL/0.9.8i zlib/1.2.3" |
中国、ブラジルやアメリカからが多い
1 2 |
xxx.153.236.109 - - [18/Sep/2017:06:06:08 +0900] "GET /kn/top.html HTTP/1.1" 302 1000 "http://www.xxx.jp/kn/top.html" "Mozilla/5.0 (Windows NT 6.1; W OW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36; 360Spider" |
・権威DNSサーバのttlに従わないキャッシュDNSサーバを参照してアクセスしている
・/etc/hostsなどであえてグローバルIPを設定してからアクセスしている
・自作っぽいクローラーでグローバルIPを予め指定した上できている
(DNS問い合わせ時間を省くため?)
イマイチ理由についてはよくわからなかったが、いずれにせよ外国からのアクセスがほとんどなので気にする必要はないだろう。二日でほぼすべての浸透が終わると考えて良さそうだ。
2018/8/19 追記 DNS浸透についてその後
本件についてその後調べてみた(けれど追記するのを忘れていた)のだが、どうもNSサーバの挙動が関係している可能性がある。
というのは、DNSキャッシュサーバの方で旧NSレコードがキャッシュされていて、旧権威サーバに問い合わせを行っていた可能性が高い。
で、前職のようにサービス業者のサーバ(Web、DNS)を使っている場合、これを解決するのはほぼ不可能(本件については、なぜかやる気に溢れた上司がそのあたり交渉していたので細かい事情は不明だが)だと思われる。なぜならこういった業者は、DNSの細かい部分の設定は一切イジらせてくれないことが多い。それも当然の話で、顧客に去られるサービス業者が親身になって定型外の対応をするメリットはない。そういうわけで、サーバ移転でDNSを一緒に引っ越す際は注意しよう。