[アップデート] Amazon ElastiCache for Memcached がスケールアップをサポートしました
いわさです。
Amazon ElastiCache の中で Memcached はこれまでスケールアップを行うことが出来ず、ノードタイプを変更したい場合はクラスターを再作成しアプリケーション側で設定エンドポイントを変更する必要がありました。
が、先日のアップデートでスケールアップをサポートするようになりました。
エンドポイントの変更なしにスケールアップさせることが出来ます。
ただし、Memcached なのでスケールアップ前のデータはクリアされてしまうのでそこは注意が必要です。
コンソールからのスケールアップ方法
まず前提からですが、今回のスケールアップ機能はクラスターのエンジンバージョンが 1.5.10 以降である必要があります。
条件を満たしていないクラスターの場合は引き続き次のようにノードタイプの変更が出来ません。
エンジンバージョンがサポート外の既存クラスターについても、エンジンバージョンをアップグレードできればノードタイプの変更ができるようになります。
次はサポートされているエンジンバージョンの場合で、ノードタイプが変更できるようになっていることが確認できます。
1~2 ノードの最小のクラスターで、マネジメントコンソールからスケールアップを試してみたところ、ノードの更新まで 5 ~ 10 分程度かかりました。
スケールアップ中のクライアント側の様子を観察してみた
今回は簡単に検証したかったので同一ネットワーク上の EC2 インスタンスから telnet で接続を行いました。
[ec2-user@ip-172-31-37-25 ~]$ telnet hoge0412mem3.vidsun.cfg.apne1.cache.amazonaws.com 11211
Trying 172.31.39.112...
Connected to hoge0412mem3.vidsun.cfg.apne1.cache.amazonaws.com.
Escape character is '^]'.
set hoge 0 3600 8
hogehoge
STORED
get hoge
VALUE hoge 0 8
hogehoge
END
この状態でスケールアップを行い、接続性や保存したキャッシュの状態がどうなるのか観察しました。
このスケールアップ、マネジメントコンソールからは細かいパラメータの指定が出来ないのですが、API 経由だと複数ノードをどういう分布でスケーリングするかバッチサイズ的な指定ができます。
scale-percentage
で各バッチで同時にスケーリングするノード割合を指定し、scale-interval-minutes
で各バッチ間のインターバルを分単位で指定します。
まず、ノードタイプ変更操作後も引き続き接続中ノードの操作は行うことが出来ました。その間のデータは保持されています。
ただ、5 ~ 10 分程度経過するとノードへの接続が切断されました。
:
get hoge
VALUE hoge 0 8
hogehoge
END
get hoge
VALUE hoge 0 8
hogehoge
END
Connection closed by foreign host.
[ec2-user@ip-172-31-37-25 ~]$
接続直後、再接続が可能です。アプリケーション側で再接続処理が入っていればここはほとんどダウンタイム無しで再接続できると思います。
ただし、再接続後にキャッシュを取得しようとするとクリアされていることを確認しました。1 台のクラスターで試したり、ノードのエンドポイントへ直接接続したりしてみても変わらなかったのでやはりスケールアップの過程でデータは一度失われるようです。
[ec2-user@ip-172-31-37-25 ~]$ telnet hoge0412mem3.vidsun.cfg.apne1.cache.amazonaws.com 11211
Trying 172.31.37.168...
Connected to hoge0412mem3.vidsun.cfg.apne1.cache.amazonaws.com.
Escape character is '^]'.
get hoge
END
ただ、従来と異なりクラスターを作り直したり、接続エンドポイント自体の変更が発生してアプリケーション側の変更が必要にはならないので Memcached の特性を理解して作られているアプリケーションであれば問題ないと思います。
さいごに
本日は Amazon ElastiCache for Memcached がスケールアップをサポートしたので試してみました。
スケールアップ中にデータが保持されるわけではないのですが、クラスターの再作成が不要になりました。
旧エンジンバージョンをお使いの方も、アップグレードすることで使えるようになるのでお試しください。