Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

サービスの急成長は嬉しいお知らせですが、その反面機能追加時の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. バックアップを戻す

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away