2025/10/29 23:06 Matrix: Post-mortem of the September 2 outage

ロボ子、大変なのじゃ!matrix.orgのホームサーバーが24時間も停止したらしいぞ!

それは大変ですね、博士。原因は何だったんですか?

ディスク容量を増やすための定期メンテナンス中に、プライマリデータベースが故障したらしいのじゃ。それでセカンダリに切り替えたまでは良かったんだけど…

そのあと、何か問題が?

元のプライマリを復元しようとしたら、セカンダリまで失って、完全に利用不能になったらしいのじゃ!

それは、かなり深刻な状況ですね…。

S3ストレージから復元する必要があったみたいだけど、データセットのサイズが51TBもあったから、復元に時間がかかったみたいだぞ。

51TB…!想像を絶する大きさですね。データ損失はなかったのでしょうか?

そこは不幸中の幸いじゃな。データ損失はなかったみたいじゃ。

データベースの構成はどうなっていたんですか?

数百のワーカーを持つメインのSynapseインスタンスと、2台のマシンで構成される単一の論理Postgresクラスタでバックアップされていたらしいぞ。プライマリデータベースは、ストリーミングレプリケーションを介してセカンダリの読み取り専用インスタンスに複製される仕組みじゃ。

なるほど。RAID構成はどうなっていたんでしょう?

Postgresデータベースサーバーは、独自の論理RAID 10アレイを使用していたみたいじゃな。

バックアップ体制は万全だったんですね。週ごとの完全バックアップ、日ごとの増分バックアップ、WALの継続的なアーカイブを実施していたと。

そうみたいじゃな。でも、データベースサイズが約51TB(ディスク容量の90%)に達していたから、ディスクを追加することになったのが、今回の騒動の発端じゃ。

ディスク追加作業中に、プライマリデータベースサーバーのRAIDアレイから既存のドライブが1つ消失したんですね。

そうなんじゃ。RAID 10を使用していたから機能は維持されたけど、劣化モードで実行されることになったみたいじゃ。

それで、セカンダリデータベースへのフェイルオーバーを決断したんですね。

ところが、新しいプライマリは、アーカイブスクリプトの問題で、WALをS3にアーカイブしなかったらしいのじゃ!

それは痛いですね…。

さらに悪いことに、db-02の真新しい空のセカンダリでPostgresを最新のパッチバージョンにアップグレードした後、データ復元を試みた際に、コマンドの実行場所を誤って、プライマリdb-01のデータディレクトリを誤って削除してしまったらしいのじゃ!

ええっ!?それは…。

db-01とdb-02が両方とも停止したから、オフサイトバックアップから復元するしかなかったみたいじゃ。

原因をまとめると、大規模なデータベース、不十分なセーフガード、不十分なツール、そして人的ミスが重なったということですね。

その通りじゃ。データベースサーバーの名前が混乱の原因となっていたことも、見逃せない点じゃな。

今回の件から、私たちは何を学ぶべきでしょうか?

バックアップ体制の重要性は言うまでもないけど、フェイルオーバーの手順や、復旧ツールの使い方を、もっとしっかり確認しておくべきじゃな。あと、サーバーの名前は分かりやすく統一することも重要じゃぞ。

そうですね。今回の教訓を活かして、より堅牢なシステムを構築していきたいです。

しかし、データディレクトリを誤って削除してしまうとは… 私も気をつけないと、うっかり研究室を爆破してしまうかもしれん…!

博士、それは笑い事じゃありませんよ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
