ANAのシステム障害の話

今回は自分用のメモ的な記事なので、多分読んでもよく分からないと思います。


22日にANAの国内旅客システムの障害があって国内線で148便が欠航するインシデントが発生した。
http://news.livedoor.com/article/detail/11356776/

システム障害の原因はネットワーク中継器の故障だという。
http://www.itmedia.co.jp/news/articles/1603/31/news123.html

ネットの記事だけでは何が起きたのかさっぱり分からなかった(冗長化されていてもプライマリーが中途半端に生きていてフェイルオーバーしないことはよくあるが)。ので、個人的に色々調べてみた。
システムを構築したベンダーは日本ユニシスということで何か手がかりがないか探ってみる。

技報があった。
http://www.unisys.co.jp/tec_info/tr118/118abs.htm

その中でも使用しているプラットフォームについて記載されている箇所を発見。
http://www.unisys.co.jp/tec_info/tr118/11807.pdf

ana_db_1

DBサーバの構成。
本システム規模での4ノードでのSLVM(論理ボリューム)のミラー構成の導入実績はない旨が記載。ちなみにこの技報が発行されているのは2013年。
他の箇所を参照するとOracleRACを使っていると書いているので、物理的には4ノードだが、論理的に1ノードのクラスタ構成を組んでいることが分かる。

SLVMのミラー構成もそうだが、OracleRACでの4ノード構成も個人的にはあまり見た事がない。
OracleRACで縮退運用になったときは結局1ノードでの運転になる事が多い。(実際に今回の障害でも再起動したDBサーバは1ノード時しかうまく動作しなかった)
OracleRACの売りはDBサーバが1ノードずつ死んでいってもデータ整合性がとれるので、システムとしては稼働が担保されるというものだが、個人的な経験だとDBサーバがそんなに綺麗に死んでくれる事はあんまりない。
というのはOracleRACで縮退運転に追い込まれるのケースとしてインターコネクト障害が多いからだ。インターコネクト障害でスプリットブレイン(他のDBサーバから見て死んでいるように見える障害発生中のDBサーバが実は生きている状態)が生じると、論理IPで1つのIPで運用されていたDBサーバでIPの重複が発生してしまい、DBサーバと繋がっているAPサーバがDBサーバと通信できなくなる。
スプリットブレイン時にはOracleRACはデータ整合性を維持するために、シャットダウンを始める。スプリットブレインの障害事由が解消されるまでは複数ノードの運転ではデータ整合性がとれなくなる可能性が高いので、DBサーバをシャットダウンしてから1ノード構成で再起動してやる必要がある。

ということで、OracleRACで4ノード構成にする意味はあんまりないのでは、と個人的に思っている。
どれほどのトランザクションを処理しなければいけなかったのかは分からないが、サーバを4台買うコストに見合ったメリットが得られるかどうかは疑問だ。

スイッチばかりがクローズアップされるが、根本としてはスプリットブレインに弱い4台構成でのOracleRACを採用した点が大きいと思う。

じゃあここでニュースで報じられているようにスイッチの障害がどのようにDBサーバに影響を及ぼしたのかをまとめていきたいと思う。
OracleRACでクラスター構成を組むときはDBサーバ間をL2スイッチで接続してやる必要がある。

ana_db_2

前述の技報へ吹き出しを追記。
このL2スイッチは技報でも言及されているが、下記ニュースによるとCisco Catalyst4948Eとのこと。
http://itpro.nikkeibp.co.jp/atcl/news/16/033000936/?rt=nocnt

記事によると4948が故障シグナルを発信しなかったため、待機系のスイッチへ切り替わらなかったと記載がある。
恐らく故障シグナルはSNMPトラップの事と思われる。
SNMPトラップはUDPで通信されている。TCPとは違って一方通行の通信なので信頼性が低い。多分スイッチの故障検知はSNMPだけだったんじゃないかな、と思う。Cisco側は世界初のバグだとか言ってるが、SNMP以外の故障検知を採用していれば防げたはずだ。

というわけでまとめると本障害の問題点は、
 ・DBサーバのクラスタ構成に脆弱性
 ・DBサーバ間をまたがるL2スイッチに対する故障検知の仕組不足

という2点に絞られるんじゃないだろうか。

……偉そうな事を言ってるが、自分は同じようなNW構成でCatlyst4948で故障検知はSNMPトラップしかないという導入を結構やっており、
なんか似たような事が起きたりしないかなぁ、と結構ヒヤヒヤしていたりする。

コメントを残す

メールアドレスが公開されることはありません。

Protected with IP Blacklist CloudIP Blacklist Cloud