フロムスクラッチ開発者ブログ

from scratch Engineers' Blog

運用中のRedshiftを旧世代から最新世代に移行する方法

はじめまして。

フロムスクラッチでエンジニアをしている山崎と申します。
普段はAWSを用いたインフラの運用・構築、およびコスト管理を担当しています。

今後私からは、AWSを用いたインフラに関わる「技術」「コスト管理」について、他社の方もご興味ありそうなトピックを共有させて頂ければ幸いです。

 

さて1回目のテーマは、「運用中のRedshiftを旧世代から最新世代に移行する方法」です。

2017年10月にアナウンスがあり、Redshiftにて第二世代のdc2を冠した性能を選ぶことができるようになりました。

 

Amazon Redshiftに新世代のDC2ノードが追加 – 価格はそのままで最大2倍の性能向上

https://aws.amazon.com/jp/blogs/news/amazon-redshift-dc2/

 

価格はそのままで性能が向上するなら、そりゃdc1からdc2に移行したくなるのは当然ですね。問題は”どうやってサービス影響が最も小さくなるように移行するか”ということになります。

 

移行方法のアイディアは2つあります。

 

(1)dc1のRedshiftクラスタをリサイズしてdc2にする。

(2)dc1のRedshiftクラスタの更新を止め、スナップショットを取得して復元。その後名前を入れ替える。

 

具体的に中身を見ていきます。

(1)について

こちらはシンプルですね。以下の通り、クラスタの性能をdc2にそのまま変えるだけです。

 

Redshiftダッシュボード>クラスター>対象クラスタを選択>クラスター>サイズ変更>ノードの種類をdc2にする>サイズ変更 

f:id:daisuke-yamasaki:20180301170946p:plain

f:id:daisuke-yamasaki:20180301172324p:plain

 

ただし、リサイズ中はクラスタが”Read-Only”になるので注意しましょう。で、問題はリサイズにどのくらいの時間がかかるか。2017年11月に検証した時の情報ですが、非常に時間がかかりました。具体的には、約430GBのデータがあり3ノードで運用しているクラスタのdc1→dc2のリサイズに392分の時間がかかりました。とてもじゃないですが、この間”Read-Only”にしておけません。



(2)について

こちらは若干作業に手間がかかりますが、作業時間が読めるのでお勧めします。作業時間は約1時間、うちクラスタへの接続断時間は約2分程度でした。
ただし、クラスタのエンドポイントは移行前後で同じですが、クラスタのIPアドレスは変わると推測されるので、クラスタのIPアドレスを指定して接続するシステムの場合は作業前に充分な検討をしてください。

 

1.移行対象クラスタ(名前=クラスター識別子をAとする)への更新を止める。

 

2.クラスタ(A)のスナップショットを取得する。スナップショット識別子は分かり易い名前にしましょう。

f:id:daisuke-yamasaki:20180301172422p:plain

f:id:daisuke-yamasaki:20180301172425p:plain

 

3.2で取得したスナップショットを、「ノードタイプ:dc2、クラスター識別子:スナップショット取得元と別名(Bとする)、その他の設定:同じ」で復元する。

f:id:daisuke-yamasaki:20180301172630p:plain

f:id:daisuke-yamasaki:20180301172723p:plain

 

4.Aのクラスター識別子をCにする。

f:id:daisuke-yamasaki:20180301172901p:plain

f:id:daisuke-yamasaki:20180301172904p:plain

 

5.Bのクラスター識別子をAにする。

 

6.Aへのアプリからの接続がOKであることを確認する。

 

7.Cを削除する。

f:id:daisuke-yamasaki:20180301173037p:plain

 

8.Aへの更新を開始する。




以上、「運用中のRedshiftを旧世代から最新世代に移行する方法」について書いてきました。本内容はあくまで弊社で試した内容になりますので、実施する際は必ず事前検証をお願い致します。ご覧頂きありがとうございました。