LoginSignup
18
17

More than 5 years have passed since last update.

サービスが急成長してRDSで困ってる君へ8000万件のテーブルをダウンタイム1時間でALTERするよ!

Posted at

サービスの急成長は嬉しいお知らせですが、その反面機能追加時のALTERがどんどん大変に。普通にALTERを行うと、メンテナンス時間何時間とったら、良いのかわからないですよね。1時間程度のメンテナンス時間で、RDS上のデカイテーブルをALTERする方法を紹介します。

戦略

1.リードレプリカを追加する
2.オンラインでリードレプリカにALTER文を実行
3.レプリケーションがおいつたタイミングで、アプリケーションの向き先をリードレプリカに変更
4.リードレプリカをマスターに昇格させる

手順

1.リードレプリカに書き込み権限を与える

デフォルトの状態では、「Parameter Groups」のread_onlyが{TrueIfReplica}になっているので、これを「0」にします。この変更は再起動なしで各インスタンスに適用されるのでで、間違って「1」にしてMasterへの書き込みが止まらないように注意しましょう。

2.リードレプリカを作成

AWSコンソールから、マスターとなるインスタンスを選択し、インスタンス操作から、リードレプリカを作成をクリックします。マスターを作成する時と同じように、インスタンス、SSDの容量等を入力します

3.ALTER文実行

リードレプリカに対して時間のかかるクエリを実行します

4.レプリケーションの同期を待つ

スレーブにし対して、「SHOW SLAVE STATUS」を実行し、「slave behind master」が0になるのを待ちます。

5. メンテナンス & マスター切り替え

レプリケーションが追いついたら、メンテナンスに入れてアプリケーションの向き先を、リードレプリカにします。

6. マスター昇格

・AWSコンソールから、スレーブを選択し、「Promote Read Replica」を選択します。
・確認画面の後の画面でバックアップを無効にします。
(無効にしないと、昇格の時にバックアップが実行され、ひたすら待たされます)

7. Muti-AZ有効に

マスター昇格が終わったら、MultiAZを有効にします。検証した感じでは、ダウンタイムなしでできますが、メンテ中に行うと安心です

8. メンテナンスを開ける

Muti-AZが有効になったら、メンテナンスをあけましょう

9. バックアップを戻す

バックアップの設定を戻します。おそらくバックアップが実行されます
以上でおしまいです、おつかれさまです。

18
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
17