【RDS】何もしてないのにRDS/MySQLが落ちたお話

  • 2024年6月16日
  • 2024年10月12日
  • AWS, IT
AWS

こんにちはますのです。
内部で利用しているRDS/MySQLに30分ほど接続出来ない状態が発生しました。
特に何も変更は加えておらず、何もしてないけど壊れた状態でアワアワしておりました。

原因を調べる必要が出て調査したためメモを残します。

構成と概要

  • RDS/MySQLを利用
  • シングルAZ構成
  • 運用管理者向けのWebサーバ用のDBとして利用
  • ダウンしても24時間くらいで復旧出来れば影響なし

大きな影響が出ないRDSだったため、シングルAZ構成で停止も気楽にできるRDSでした。ある意味ラッキーです。

発生したこと

  • DBへの書き込みプロセスが高負荷になっているアラートが発生
  • しばらくしてからRDSに接続できないログがアラートとして飛んでくる
  • Webサーバ自体にはアクセス出来る
  • RDSが勝手に再起動され復旧する

RDSのログを確認する

取り急ぎ、AWSマネジメントコンソールからログを確認しました。
何やらRecoveryされたような記述があります。

RDS > ログとイベント:

[TimeStamp] (UTC+09:00) Recovery of the DB instance has started. Recovery time will vary with the amount of data to be recovered.
[TimeStamp] (UTC+09:00) DB instance restarted
[TimeStamp] (UTC+09:00) Recovery of the DB instance is complete.

該当ログを色々調べてみると、AWS側の基盤でトラブルが発生した場合に記載されることがありそう。

該当ログに関する記事

引用:Amazon RDS と Amazon Aurora のパフォーマンスとイベントの可視性を高める

Cool fact 1: イベント「Recovery of the DB instance has started. Recovery time will vary with the amount of data to be recovered. (DB インスタンスの復旧がスタートされました。復旧時間は、復旧するデータの量に応じて変わります。) 」これは、インスタンスのハードウェアが復旧中であることを意味します。Amazon RDS の復旧は、新しい Amazon Elastic Compute Cloud (Amazon EC2) ホストに移行して、ハードウェアを交換することによって行われます。リカバリにかかる時間は場合によって異なりますが、以下の 2 つの理由によります。まず、新しいホストのプロビジョニングには時間がかかります。次に、新しいホストが作成され、データベースプロセスが起動すると、プロセスがクラッシュリカバリを開始します。クラッシュリカバリは、リカバリ前の状況に応じて、短時間で完了する場合もあれば、時間がかかる場合もあります。エンジンはそれぞれ異なっており、クラッシュリカバリに関するデータベースエンジンのマニュアルを確認することをお勧めします。

引用:RDS/MySQL のインスタンスのリカバリーが 突然 開始された

インスタンスが稼働しているホストのハードウェアなどに問題が発生するとこのような状況になる事があります。
ある程度まではサポートケースを起票すると状況確認することが可能だと思います。
以下、英語ですが同様の問い合わせの例です。

Unexplained: “Recovering DB Instance”
https://forums.aws.amazon.com/thread.jspa?messageID=415143

引用:Amazon RDS event categories and event messages

recovery:RDS-EVENT-0020:Recovery of the DB instance has started. Recovery time will vary with the amount of data to be recovered.

原因:AWS側の基盤障害が発生していた

ある程度調べましたが、原因は掴めず。
先ほどの記事もあった通りAWSサポートへ起票したところ、AWS側の影響であることが分かりました。

・DB インスタンスが動作しているホストマシンにて問題が発生。
・回復のため
リカバリを実施

無事に調査完了です。自身だけでは解決出来ない問題もあるため、AWSサポートへの加入は必須ですね。

AWS基盤障害は発生するものとして運用すること

クラウドを利用していると、AWS基盤障害は発生するものとして考えることが重要です。
過信、ダメ絶対。

ある日突然1時間のDB停止が発生して困るよう場合は、素直にマルチAZ化で安心を買うほうがベターです。

・リソースにコストを割いて安心を買う
・コストを削減して突然の障害を許容する

非機能要件を固めて合意し、ドキュメントに記載して万が一の際に備えると幸せになれるかもしれません。

障害発生時に調査や運用コストを割くことは変わらないですが、非機能要件が記載されているドキュメントがあるだけでも救われる命があると信じております。
詰められても返せる武器を残しておくと、運用保守エンジニアとしては大変にありがたいと感じる今日このごろ。
最新情報をチェックしよう!