ElastiCache for Redis 単一AZ→マルチAZ化の作業手順


作業イメージ

1シャード分だけ抜き出して考えています。同じことを繰り返せばシャードが何個になっても実質同じです。

当たり前ですが、マルチAZにするために別AZのサブネットを用意する必要があります。

手順

やることは2つだけです。

  • ap-northeast-1aのNodeを削除する
  • ap-northeast-1cにNodeを作成する

マネコンでもCLIでも作業可能ですが、今回は両方紹介します。

ap-northeast-1aのReplica Nodeを削除する

  • マネコン (2022/01/19現在)の場合

ElastiCache for Redisのダッシュボードからシャードを選択
→削除したいノードを選択
→「アクション」から「ノードの削除」を選択
→削除

  • CLIの場合
❯ aws elasticache decrease-replica-count --replication-group-id <your-id> --replicas-to-remove <your-id>-0001-003 --apply-immediately

消すのは実際結構怖いので、マネコンで確認しながらやるのが良いかなと思います。

ap-northeast-1cにReplica Nodeを作成する

  • マネコン (2022/01/19現在)の場合

ElastiCache for Redisのダッシュボードからシャードを選択
→「ノードの追加」を選択
→新しいレプリカ数に「現在のレプリカ数+1」を入力、アベイラビリティゾーンの選択で新たにnodeを追加したいAZを選択
→追加

  • CLIの場合
❯ aws elasticache increase-replica-count --replication-group-id <your-id> --replica-configuration \
    NodeGroupId=0001,NewReplicaCount=2,PreferredAvailabilityZones=ap-northeast-1a,ap-northeast-1a,ap-northeast-1c \
    --apply-immediately

これで上図と同じ状態になります。PreferredAvailabilityZonesPrimary, Replica1, Replica2の並びですね。以下図解。

なお、あまり無さそうなケースですが、マルチAZ→単一AZ化する場合はこの逆を行えば良いです。

MultiAZenabledについて

この記事を書く前はMultiAZenabledをtrueにさえすれば上図のように勝手にnodeが分散されると思っていましたが、このパラメータはそういう意味ではなく、 「元々nodeが複数AZに分散しているときに偏りを防ぐかどうかを決める」 ためのパラメータのよう。
なので、元々単一AZの場合はtrueにしても意味が無いですし、そもそもエラーが出るはずです。
(エラー文例:Cannot enable Multi-AZ unless there are nodes across two or more Availability Zones in Node Groups.)
偏らせようとしても防ぐための検証についてこちらの記事が詳しいです。

この設定を変更したい場合、おそらくマネコンではenabledにできないので、CLIでmodifyする必要があります。

aws elasticache modify-replication-group --replication-group-id <your-id> --no-multi-az-enabled