サービスの急成長は嬉しいお知らせですが、その反面機能追加時の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. バックアップを戻す
バックアップの設定を戻します。おそらくバックアップが実行されます
以上でおしまいです、おつかれさまです。