ある日、いつも通りにOpenStackをイジイジしていると突然、社内ネットワークがダウンしました。
結果的には無知だった私が悪いのですが、OpenStackの怖い話として遺しておきたいと思います。
障害時の心境
,. -‐””'””¨¨¨ヽ
(.___,,,… -ァァフ| あ…ありのまま 今 起こった事を話すぜ!
|i i| }! }} //|
|l、{ j} /,,ィ//| 『おれは openvswitch を restart したと思ったら
i|:!ヾ、_ノ/ u {:}//ヘ いつのまにか社内ネットワークが停止していた』
|リ u’ } ,ノ _,!V,ハ |
/´fト、_{ル{,ィ’eラ , タ人 な… 何を言ってるのか わからねーと思うが
/’ ヾ|宀| {´,)⌒
_/`丶 /:::::::::::::::::::::::::: ̄`ー-{:::... イ OpenStackの恐ろしさの片鱗を味わったぜ…
(.___,,,… -ァァフ| あ…ありのまま 今 起こった事を話すぜ!
|i i| }! }} //|
|l、{ j} /,,ィ//| 『おれは openvswitch を restart したと思ったら
i|:!ヾ、_ノ/ u {:}//ヘ いつのまにか社内ネットワークが停止していた』
|リ u’ } ,ノ _,!V,ハ |
/´fト、_{ル{,ィ’eラ , タ人 な… 何を言ってるのか わからねーと思うが
/’ ヾ|宀| {´,)⌒
/ |<ヽトiゝ おれも 何をされたのか わからなかった…
,゙ / )ヽ iLレ u' | | ヾlトハ〉
|/_/ ハ !ニ⊇ '/:} V:::::ヽ 頭がどうにかなりそうだった…
// 二二二7'T'' /u' __ /:::::::/`ヽ
/'´r -―一ァ‐゙T´ '"´ /::::/-‐ \ 設定ミスだとか操作ミスだとか
/ // 广¨´ /' /:::::/´ ̄`ヽ ⌒ヽ そんなチャチなもんじゃあ 断じてねえ
ノ ' / ノ:::::
ー-、___/:::::// ヽ }_/`丶 /:::::::::::::::::::::::::: ̄`ー-{:::... イ OpenStackの恐ろしさの片鱗を味わったぜ…
環境
Debian Wheezy に Grizzly をパッケージで構築し、Open vSwitch+VLAN で Quantum を設定してありました。
ネットワークは、fixed ipは完全に独立したネットワークでしたが、floating ip兼・管理アドレスは、社内ネットワークに普通にぶら下げてありました。
経緯
Grizzlyで遊んでいると、DHCPを筆頭にネットワーク周りがおかしくなったので、解決すべく色々と再起動したり設定を変更していました。そんな中、ある設定を変更して /etc/init.d/openvswitch-switch restart すると、いきなり私のSSHプロンプトが切断され、偶然に社内ネットワークに異変が起きたというにはあまりのタイミングの良さに、脇汗がドバっと放出されました。
・・・そう、私が落としたのです。
対応
私はOpenStackで遊んでいただけなので、全く悪くないはずなのですが、エンジニアの勘ですぐさまネットワーク管理者に連絡した上で、原因調査をしました。障害内容が内容なのですぐ復旧すべく、コンソールでいじらずにOpenStackサーバのLANケーブルを1本ずつ抜いてみたところ・・・管理アドレス用のケーブルを抜くと障害が解消されました。念のため、もう1回挿して、openvswitch restart をするとやはり再発したため、信じたくない確信を持って、ケーブルを抜去。その上で、社内ネットワークに全く影響のないよう完全に隔離した構成に変更して検証を始めました。
原因
直前にいじっていた設定は2つ3つだったのですぐ問題の設定値が判明しました。/etc/quantum/plugins/openvswitch/ovs_quantum_plugin.ini
1 2 |
tenant_network_type = gre enable_tunneling = True |
GREの環境でもないのに有効にしたことが原因となります。
GREについては今も全然自信がないので以下、推測も含みますが・・・
Quantum関連が起動している状態で openvswitch restart をすると・・・デフォルトのトンネルブリッジである br-tun 経由で対向に接続しようとしますが、br-tun なんてトンネルは作成していないので、DefaultG/Wに通信が飛ぶことになりました。その際の tcpdump は
1 2 3 4 5 6 |
# パターン1 16:47:42.294700 IP 192.168.140.15 > 192.168.140.15: GREv0, key=0x0, length 110: IP 192.168.140.15.22 > 192.168.140.29.40716: Flags [P.], seq 3261227352:3261227400, ack 3394027781, win 72, length 48 16:47:42.294732 IP 192.168.140.15 > 192.168.140.15: GREv0, key=0x0, length 110: IP 192.168.140.15.22 > 192.168.140.29.40716: Flags [P.], seq 0:48, ack 1, win 72, length 48 # パターン2 16:50:17.009201 IP 192.168.140.15 > 192.168.140.15: GREv0, key=0x0, length 848: IP 192.168.140.15 > 192.168.140.15: GREv0, key=0x0, length 806: IP 192.168.140.15 > 192.168.140.15: GREv0, key=0x0, length 764: IP 192.168.140.15 > 192.168.140.15: GREv0, key=0x0, length 722: IP 192.168.140.15 > 192.168.140.15: GREv0, key=0x0, length 680: IP 192.168.140.15 > 192.168.140.15: GREv0, key=0x0, length 638: IP 192.168.140.15 > 192.168.140.15: GREv0, key=0x0, length 596: IP 192.168.140.15 > 192.168.140.15: GREv0, key=0x0, length 554: IP 192.168.140.15 > 192.168.140.15: GREv0, key=0x0, length 512: IP 192.168.140.15 > 192.168.140.15: GREv0, key=0x0, length 470: IP 192.168.140.15 > 192.168.140.15: GREv0, key=0x0, length 428: IP 192.168.140.15 > 192.168.140.15: GREv0, key=0x0, length 386: IP 192.168.140.15 > 192.168.140.15: GREv0, key=0x0, length 344: IP 192.168.140.15 > 192.168.140.15: GREv0, key=0x0, length 302: IP 192.168.140.15 > 192.168.140.15: GREv0, key=0x0, length 260: IP 192.168.140.15 > 192.168.140.15: GREv0, key=0x0, length 218: IP 192.168.140.15 > 192.168.140.15: GREv0, key=0x0, length 176: IP 192.168.140.15 > 192.168.140.15: GREv0, key=0x0, length 134: IP 192.168.140.15 > 192.168.140.15: GREv0, key=0x0, length 92: IP 192.168.140.15 > 192.168.140.15: GREv0, key=0x0, length 50: ARP, Reply 192.168.140.15 is-at 90:e6:ba:36:32:35, length 28 |
こんなのが秒間数百以上もG/Wに飛び、それによってG/Wサーバが高負荷になり、ネットワーク障害が発生する運びになりました。
必ずしもopenvswitch restartで起きるのではなく、Quantumがきっちり動いていないと発生しなかったり、
設定を vlan に戻して restart した後に修復したと思っても、通信確認で管理アドレスに ping 打ったらまた上記通信が大量発生したりと、正直よく条件がわかっていませんが、再現はわりと簡単に出来ました。
感想戦
異常が発生した当初は、G/Wに影響あるということで、IPアドレスを直接重複させたり、VRRPの邪魔したり、VLANとか、NameSpace内のDHCPがまさかーとか色々可能性を考えましたが、完全独立のテスト環境を用意してG/Wでtcpdumpしてたらすぐわかったので、本番で使う前に経験できてよかったとしておきたいと思います。ただGREを利用する予定はないものの、GRE自体を理解していないと非常にマズいと思ったのでこの辺は見ておきました。
そもそも理解していない設定を使うなって話ではありますが、それにしても最初の接続通信とか数秒に1回の頻度にしてくれればいいものを、殺しにかかるような通信にしなくてもいいじゃないかこの野郎!! ・・・って文句は Quantum に言えばいいのかな・・・Open vSwitch は送ってる本人ではないから違うよね・・・もはやそれすら自信ない。
ネットワークが一番自信ないとこなので、もっと勉強しなきゃなのですが、
いかんせん、なんかネットワークって身体の一部になるように修得できないっていうか
苦労のわりに全然楽しくないっていうか・・・まぁもっと精進しますです、はい。