2020/12/9の障害に関する報告書

概要

昨日(12/9)午前10時過ぎぐらいからTLの遅延が発生し、18時過ぎごろから24時近くまで完全にサービス停止となる状態となりました。

なんかごめんなさい。

事象の経緯

なんかね。鯖缶工場(サーバ管理者のためのdiscordサーバ)でメンテナンス用コマンド tootctl maintenance fix-duplecates ってコマンドを見かけたんですよ。へーDBのindexを再構築するコマンドなんてあるんだなーって思って興味本位で打ったんですよね。それが間違いの始まりだったよね。

↑異変を感じ始めた僕 しばらく放っておいたら、だんだんsidekiqのキューが溜まってきて、まぁ時間かかるってあったし負荷かかるんだろうなーって思って余裕ぶっこいてました。 そしたら段々キューが積み重なるしTLのレスポンスも悪くなるし。 まぁでもWebアクセスまだ軽いから大丈夫かな。もうちょっと負荷かけてもいいかな。とか完全に舐めプしてました。 で、負荷も増えてきて、これは処理重いやつ止めたほうがいいんじゃねーかなって少し真面目になってきてトゥート検索用のElasticSearchを止めることにしました。 で、ストレージサーバ見たらディスクI/Oの負荷がやばいしsidekiqのキューも減らないしで、これはガチで真剣にやらないと解決しねーなって気持ちにようやくなってきました。 ログ見まくってると以下のようなエラーが結構出てました。 ``` 12月 05 19:53:09 abyss.fun bundle[14035]: 2020-12-05T10:53:09.767Z pid=14035 tid=49caz WARN: Mastodon::RaceConditionError: Mastodon::RaceConditionError ``` ググってみると、のえるさんの投稿が出てきまして。

へーduplecate出ると出るエラーなんだなーそういえばduplecate解消するためのtootctl回したよなー。。。

……あっ!index消したからPostgreSQLでSESELCTのタスクが負荷溜まってたのか!

みたいな感じで、ようやく気づいたのでした。

サービスを止めた状態で、再度 tootctl maintenance fix-duplecated を実行。すべて処理が終わるまで放置。

で、ようやく解消。ということです。

今回の事象における影響範囲

まずは常日頃abyss.funを利用していただいていたユーザ皆様方がアクセスできないことでご迷惑をおかけしました。
これはマジサーセンでした。

とりあえずサービス断するメンテをするときは事前告知するつもりで。今回はサービス断しないだろと高を括ってコマンド打ったらこの件だったので、もう見込み甘いですね。特に「なんで告知もないのに止まってんだよksかよ」って思いましたよね。わかる(わかる)

せめて、なにか作業するときは落ちない作業でもリアルタイム実況しといたほうがいいな。みたいなことを感じました。

リアルタイム実況するための環境を用意しといたほうがいいな。次にサーバ弄るときはそこで実況しといたほうがいいな。みたいなことを思いました。

あと、連合組んで頂いているサーバの方々に関しても、弊鯖との通信ができないことによる不便をおかけしました。

ユーザ単位で言えば、弊鯖に登録しているアカウントからの応答がないこと。
サーバ単位で言えば、40x、50xのHTTPステータスを送っていたこと。

迷惑とか心配とか色々かけましたよね。ほんとサーセン。

あと、ローカルの人にもう一つ、もうひとつ影響なんですが、sidekiqのキューが溜まったときにredisに溜まってた待機キューを削除しました。

どういうことかというと、障害が起きてた10時~24時の間の投稿の一部が消えてるということになります。

障害起こってたからあんまり投稿してないかもしれないですが、この件に関してはリモートから流れてくる&リモートに送る投稿も消失していることになります。なので通常の障害であれば、サービス断中に投稿されたリモートの投稿も復旧後に滝になってTLに流れ、後から読み返すこともできますが、今回の件に関しては見返すことができません。なんか見返したい投稿がこの時間帯にあったらごめんなさい。直接リモートの投稿を参照するようにしていただきたく思います。

復旧後の状況

12/9 23:30過ぎに復旧した後、数分間だけTLが滝になりましたがすぐに通常の流れに戻っています。

そしてこれは怪我の功名なんですが、インデックスを再構築したおかげで、タグTLのレスポンスが格段に改善されました。

タグTLの活用に重きをおいている弊鯖としては、これはとても喜ばしいことです。
いやサービス停止したので諸手を挙げて喜ぶことはできないのだけど。

ともかく、今まで以上に快適にサービスを利用することができるようになりました。

今回の事象に対する処分

今までもたまに短時間のサービス停止をしてサーセンしたことがありましたが、今回は告知なしで結構長い断を行ったので、流石にサーセンしといたほうがいいと思いました。

このことから対策を不十分に取らなかった僕( @guskma )に対し、明日(12/11)の自宅謹慎処分(喫煙禁止)の判断を下しました。

なお、自宅謹慎処分中も、当日はリモートワーク予定であるため、本来の僕の業務内容には全くといって影響はありません。

日頃Abyss.funを楽しみにしている皆様方に置かれましては、この度のサービス停止のためにご不便をおかけしたことを心よりお詫び申し上げます。

ごめんなさいでした。