💽

[TIPS]RDS から手軽かつダウンタイムを限りなく少なく Aurora へ移行する方法

1 min read

こんにちは、 @hirosys_ です。
今回は、既存の (割と大容量な)RDS から Amazon Aurora へ移行したいが手軽かつダウンタイムを限りなく少なくしたい場合のTIPSです。
RDS のエンジンが MySQL か PostgreSQL の場合に有効です。
エンジンが異なる場合は、 DMS を使うなどやり方が変わってきますのでご注意ください。

本記事では、 DB エンジンとして MySql を選択し、 Aurora は MySql 互換のものとします。

簡単な流れ

  1. Aurora リードレプリカを作成する
  2. メンテナンスウィンドウのタイミングでレプリカラグがゼロになったらアプリを止める
  3. 1で作った Aurora リードレプリカを昇格させる
  4. 必要に応じてアプリ側がアクセスしやすいようにして、アプリの稼働再開
  • 以下、例。お好みのもので対応する
    • アプリの定義ファイルなどで指定しているのなら、接続先を書き換える
    • 昇格した Aurora クラスタの名前を変更する
    • 元々の RDS の DNS レコードの値に Aurora クラスタのエンドポイントに切り替える
  1. 問題がないことがわかったら、元の RDS DB インスタンスを削除する

Aurora リードレプリカを作成する

対象の RDS DB インスタンスを選択してアクションメニューから Aurora リードレプリカの作成を選択する。

各種パラメータを指定して、 Aurora リードレプリカを作成する。

レプリカラグの確認の仕方

mysql コマンドを使って、リードレプリカにアクセスします。

mysql -u <ユーザー名> -h <リードレプリカライターインスタンスのエンドポイント> 

以下のコマンドを実行し、レプリカラグ(レプリカがどれだけ遅延しているか)を確認する。ゼロになっていれば遅延なし(同期している)の状態。Seconds_Behind_Masterが1以上の値になっていると、その値の秒数だけ遅延していることになる。

MySQL [(none)]> show slave status \G
〜省略〜
        Seconds_Behind_Master: 0
〜省略〜

Aurora リードレプリカを昇格させる

遅延がないことが確認できたら、アプリからのアクセスを止めます。
アクセスが止まったのち、Aurora リードレプリカを昇格させます。

対象の Aurora リードレプリカを選択し、アクションメニューから昇格を選択します。

「リードレプリカの昇格」ボタンをクリックする

あとは、適宜アプリケーション側の接続設定を見直したり、必要い応じて DNS の設定を見直したりして、サービス再開を行います。

Discussion

ログインするとコメントできます