确认Amazon ElastiCache for Redis服务更新时连接中断的时间(停机时间)
目标
- ElastiCache for Redis のサービス更新通知が来た。AWS社(公式)の説明によると、サービス更新実施時の影響は数秒程度の断とのこと。本当にそうなのか?と心配なため、検証環境にて実際の接続断時間(ダウンタイム)を確認する。
2. 给予学习机会
- AWS社(公式)による説明はこちら。接続断時間に関する記載部分を引用。
当客户或Amazon ElastiCache对一个或多个Redis集群进行服务更新时,每次只会在每个分片内应用一个节点的更新,直到选择的所有集群都被更新为止。节点的更新可能会导致几秒钟的停机时间,但其他Redis集群将继续处理流量。
以前のアップデートの際に、既に実機確認している記事が何個かあり、AWSの言う通り、数秒程度の接続断の様子。
ElastiCache for Redis サービス更新適用時のダウンタイムを調べてみた
ElastiCache Redisのサービス更新時のダウンタイムを調査した
Amazon ElastiCache (Redis) のservice updateをやってみた / elasticache-20210615-002 の適用
既に二番煎じ以降ではあるものの、環境や設定などによって動作も変わる可能性もあるため、改めて自分で確認してみることにする。
3. Redis的ElastiCache环境
-
- 今回アップデートを適用する環境は以下の通り。
モード: Redis
エンジンバージョン: 5.0.6
ノード数: 2
ノードタイプ: cache.r5.large
クラスターモード: 無効
適用する「サービスの更新」(パッチみたいなもの): elasticache-20230315-001
ノード数1のシングル構成だったり、クラスターモードが有効になっていたりすると、また挙動が違うかもしれない。
4. 检查连接断开时间的方法
-
- ElastiCache for Redisと同一VPC内に、Redisクライアント(redis-cli)をインストールしたインスタンスを用意する。
- アップデート作業中、ElastiCache for Redis のプライマリエンドポイントに対し、1秒間隔でキー(mykey1)の値のインクリメント、および読み出しアクセスを行うスクリプトを実行する。(実際には、キー名だけ変えたスクリプトを念のため計3本並行で実施)
#!/bin/bash
mykey="mykey1"
host="XXXXXXXXXXXXXXXXXX.apne1.cache.amazonaws.com" # プライマリエンドポイント
redis-cli -h ${host} set ${mykey} "1"
for i in $(seq 1 3600); do
date
redis-cli -h ${host} incr ${mykey}
redis-cli -h ${host} get ${mykey}
sleep 1
done
- 平常時のスクリプト実行ログは以下のようになる。アップデート適用中に接続断が発生した場合、redis-cliコマンドが応答待ちになり、1秒間隔での実行ができなくなる。スクリプトの出力する時刻の値が1秒以上に開くことで接続断時間を検出できる。
Wed Apr 12 12:37:51 JST 2023
125
125
Wed Apr 12 12:37:52 JST 2023
126
126
Wed Apr 12 12:37:53 JST 2023
127
127
Wed Apr 12 12:37:54 JST 2023
128
128

5. 确认更新操作和断开连接时间
5.1 更新操作(概述)
-
- アップデート動作の流れは大まかには以下の通り(今回は1~4まで所要約30分)。
対象のクラスター、及び適用するサービスの更新(今回は「elasticache-20230315-001」)を選択し、「今すぐ適用」を実行すると、アップデートが開始される。
まずreplica側のノードがアップデートされる。
replicaとprimaryが切り替わる。(作業前にreplicaだったノードがprimaryになる)
新しくreplicaになったノードがアップデートされ、作業完了。
5.2 核查连接中断时间
-
- アップデート適用中にスクリプトをずっと流していたが、今回は接続断は検出されなかった(スクリプト内のredis-cliコマンドの応答が遅延することはなかった)。そのため、1秒以上の接続断は発生していなかったと判断する。
- 旧replicaノードがprimaryに昇格するタイミングで接続先ノードが切り替わるため、その際の接続断を想定していたが、今回の確認方法(1秒間隔でのチェック)では接続断は検出されなかった。
5.3 更新操作说明(详细)


- 該当の「elasticache-20230315-001」を選択すると、未適用のクラスター一覧が表示される。今回作業対象のクラスターを選択し、「今すぐ適用」を実行する。ここからは全て自動でアップデート処理が実行される。

- 作業対象のクラスターの更新ステータスが、「Waiting-to-start」⇒「In-progress」と推移する。


- ノードのステータスが「Available」⇒「Modifying」に推移したのち、primaryとreplicaが入れ替わる。(元々002がreplicaだったが、primaryに昇格)


- primaryとreplicaの入れ替わり後、引き続き新replica(ノード001)の更新が行われている(と思われる)。

- 適用が完了すると、該当クラスターの「サービスの更新」(elasticache-20230315-001)のステータスが「In-progress」から「Complete」に変化する。

- また、 クラスターの更新ステータスの画面にて、ノードが2台とも更新完了(2/2)と表示される。

6. 触动之处
- 今回の構成においては、接続断時間が無し、もしくは非常に短い(1秒未満)であることが確認できた。作業実施の判断のため、作業影響を事前把握することは重要なため、なるべく正確な確認ができるよう心掛けていきたい。