とあるサーバでサイトの表示が不安定になる事象が発生。このサーバ問題が多くて非常に辛い。
サーバ構成 など
- 通常のLAMP構成(Linux,Apache,MySQL,PHP)
- WEB/DBは同一筐体の冗長構成、WEBはActive/Active、DBはActive/Standby
- MySQL内に画像を保管してて、PHPから呼び出している
- Apacheのmod_cacheは色々な理由から停止中
事象発生時の各状況
LoadAverage(4日間のグラフ)
・障害発生時は1000を超え出す
CPU(4日間のグラフ)
・全く大したことない
memory(4日間のグラフ)
・MySQLで確保してる分があったりするが、溢れているわけではない
・3日目から4日目で使用率が下がっているのは、根本対応+MySQLの再起動を実施したため
通信トラフィック(4日間のグラフ)
・LoadBalancerで振り分け量変えたりしたので、バラツキ有り
・トラフィックの単位はByte
・障害発生時にトラフィック急増となっているわけではない
Apache server-status
・障害発生時のタイミング
・「_」(待機中)や、「.」(未起動)が無く、W(SendingReply:応答中)で埋め尽くされてる
・MySQLが起動していないStandby側のWEBサーバでも発生
MySQL
・障害発生時のタイミング
・大量のSleepで埋め尽くされる
mysql> show processlist;
+------------+--------+----------------+-------+---------+------+--------+-------------------+
| Id | User | Host | db | Command | Time | State | Info |
+------------+--------+----------------+-------+---------+------+--------+-------------------+
| 1783245676 | root | localhost | NULL | Query | 0 | init | show processlist |
| 1786529853 | hoge | 10.0.0.1:26603 | fuga | Sleep | 385 | | NULL |
| 1786529933 | hoge | 10.0.0.1:26811 | fuga | Sleep | 385 | | NULL |
| 1786530176 | hoge | 10.0.0.1:26895 | fuga | Sleep | 383 | | NULL |
| 1786530435 | hoge | 10.0.0.1:26949 | fuga | Sleep | 383 | | NULL |
:
1000 rows in set (0.00 sec)
各種ログ
・割愛。コレ!と言えるようなものは無し
障害発生までの流れ
確定では無いが、状況証拠から以下のような状態になっていると推測
- 何かしらのアクセスがセッションを変な状態で終了させている
- 結果、MySQLに大量のSleep(接続されたまま何もしていない状態)が残る
- ApacheのプロセスがMySQLと接続したままになっているのでSendingReply状態となる
- MaxClientsに達し、LoadAverageが高くなる
- 何もしていない待ち状態の滞留なのでサーバ自体の負荷は高く無いが、障害となる
原因の特定
とりあえず先に結論、サーバが接続しているスイッチで一部パケットがDROPされていた
下記はサーバが接続しているスイッチのアップリンクポート
switch#show interfaces gigabitEthernet 1/0/23 counters errors
Port Align-Err FCS-Err Xmit-Err Rcv-Err UnderSize OutDiscards
Gi1/0/23 0 0 0 0 0 15200842
社内のネットワークマスターに聞いてみた
1Gbpsのポートでトラフィックが溢れなくてもdiscardが出てDROPされるものですか?
discardが起こる理由はいくつかある
そのうちの1つが流入したパケット量がスイッチの転送用ASICの容量を超えてしまったのでスイッチが捨てた、というケース
トラフィックが溢れなくても起こりえる
古いスイッチや転送用ASICのメモリ容量(=パケットバッファ)が小さいタイプで起こりうる
とりあえずだいぶ古いスイッチなので、可能性はだいぶ高そう。
事象が発生したタイミングでエラーカウントが上がったことを確認できたのでほぼ濃厚。
ということで、根本対応は高スペックスイッチへの振替。
結果、直ったー!!良かった良かった。
最後に
最初はBOTが濃厚じゃ無いかと思っていた。BOTが大量にアクセス(accessログ上は見つけられなかったが)して、セッションを変な状態で終了し、ApacheのプロセスをSendingReply状態、MySQLに大量のSleep放置。ApacheはMaxClientsに達して応答遅延の状態になっている。。。と。結局こういうケースは少ないのかな。googleとかのBOTがそんなことしてきたら困るんだが正規BOT君は大丈夫なのかな。
トラフィック溢れ、完全ダウン、現地作業によるloopなどを除いて、ネットワーク周りはあまり疑うことなかったので良い経験になった。
コメント