AWSにおいてサーバの冗長構成をとるための様々な手法の中の一つとして、ENIを移動させることでIPを移動させる方法もあるかと思います。
そのENIの付け替えにかかる時間が最近異様に素早くなってきている気がしたので、すごく雑に測ってみました。及び素早く付け外しするコツも記載してあります。
手動でENIを付け替えたバージョンと、grabeniでENIを付け替えたバージョンの両方があります。
なお、grabeniとは、ちょうど今日書かれた以下エントリにも登場している、go製のENI操作CLIツールです。keepalivedとgrabeniを組み合わせて冗長構成をとるなど、最近便利に使ってます。 developer.hatenastaff.com
結論
- 手でもツールを使っても、30秒以内くらいでENIを付け替えられそうな感じ
- 昔はもっと時間がかかっていた気がするけど昔のデータはないので比較できない。次回に期待
- 昔は2〜3分かかってた気がするという証言が得られた
昔は2,3分かかってた気がしますが、最近すごく速いですね / “最近AWSのENIの付け替え速度がチョッパヤになってる気がしたので測ってみた - でこてっくろぐ ねお” https://t.co/Y9lEnUxAXl
— tatsuru (@tatsuru) 2016年3月24日
- 昔は2〜3分かかってた気がするという証言が得られた
- grabeni便利
測り方や環境等
- pingを打ちながらENIを外して別サーバにつけ、pingが失敗していた秒数を測る
- pingが疎通していない時間の長さで時間を測る
- 「だいたい何秒くらい」という情報がわかっていればそれである程度十分だし、特に手でつけたり外したりするの結構面倒なので、それぞれ1回勝負。平均をとったりはしない
- allow-hotplugの設定をしているため、ENIを付与するだけで勝手にインターフェースが上がってくる環境
手動バージョンの測定
26秒です。
AWSのマネジメントコンソールから手でつけ外しした場合。 EC2サーバが大量に存在する環境にて素早く付け外しするコツがある。そのコツとは、外したENIを付与する際は、ENIからattachするEC2サーバを探すのではなく(サーバが多い環境だと大量のEC2サーバがリストに表れて非常に探しづらい)、attachするEC2サーバにて"ネットワーキング" -> "ネットワークインターフェース" の順で操作することによって、現在使われていないENI(大抵EC2サーバの数より少ないのではないかと思っているがどうでしょうか)から選べば良くなるため、圧倒的に早く済むというものである。
pingの状況
64 bytes from xx.xx.xx.xx: icmp_seq=98 ttl=59 time=xxxx ms Request timeout for icmp_seq 99 Request timeout for icmp_seq 100 Request timeout for icmp_seq 101 Request timeout for icmp_seq 102 Request timeout for icmp_seq 103 Request timeout for icmp_seq 104 Request timeout for icmp_seq 105 Request timeout for icmp_seq 106 Request timeout for icmp_seq 107 Request timeout for icmp_seq 108 Request timeout for icmp_seq 109 Request timeout for icmp_seq 110 Request timeout for icmp_seq 111 Request timeout for icmp_seq 112 Request timeout for icmp_seq 113 Request timeout for icmp_seq 114 Request timeout for icmp_seq 115 Request timeout for icmp_seq 116 Request timeout for icmp_seq 117 Request timeout for icmp_seq 118 Request timeout for icmp_seq 119 Request timeout for icmp_seq 120 Request timeout for icmp_seq 121 Request timeout for icmp_seq 122 Request timeout for icmp_seq 123 Request timeout for icmp_seq 124 64 bytes from xx.xx.xx.xx: icmp_seq=125 ttl=59 time=xxxx ms
grabeni使用バージョンの測定
18秒。
1回勝負の測定結果なので、優位な差があるかと言われるとそんなにないと思うが、まぁ、手でやるよりはやはり早いよねという結果になった。
なお、その時に打ったgrabeniコマンドは以下のとおりである。ENIを付与したいサーバ上で以下1コマンドを叩くだけでよく大変便利。オプションの-i 1
の部分が重要で、grabeniはループ内でiオプションの秒数だけsleepしながらENIのdetachを待ち、detachが完了したらattachするという動きになっているため、この数を減らすことによって、ENIの付け替えを高速化させることができる。デフォルト値は2となっているが、私はいつも1で使っている。
$ grabeni grab -d 1 -i 1 -n 40 eni-xxxxxxxxx
pingの状況
64 bytes from xx.xx.xx.xx: icmp_seq=10 ttl=59 time=xxxx ms Request timeout for icmp_seq 11 Request timeout for icmp_seq 12 Request timeout for icmp_seq 13 Request timeout for icmp_seq 14 Request timeout for icmp_seq 15 Request timeout for icmp_seq 16 Request timeout for icmp_seq 17 Request timeout for icmp_seq 18 Request timeout for icmp_seq 19 Request timeout for icmp_seq 20 Request timeout for icmp_seq 21 Request timeout for icmp_seq 22 Request timeout for icmp_seq 23 Request timeout for icmp_seq 24 Request timeout for icmp_seq 25 Request timeout for icmp_seq 26 Request timeout for icmp_seq 27 Request timeout for icmp_seq 28 64 bytes from xx.xx.xx.xx: icmp_seq=29 ttl=59 time=xxxx ms
感想
- 昔はもっと遅かった気がするけどどうだっけなぁ。
- grabeni便利。
- この前やった時は10秒くらいで出来た気がしたんだけど勘違いかなぁ。当時のログが残っていない。