ablog

不器用で落着きのない技術者のメモ

ElastiCache(Redis) のレプリケーションラグを計測してみた

ドキュメントの説明

Q: アクティブなリードレプリカの状態はどのように把握できますか?

デプロイ済みのすべてのキャッシュクラスター (リードレプリカを含む) のリストを取得するには、標準の DescribeCacheClusters API を使用するか、Amazon ElastiCache マネジメントコンソールの [Cache Clusters] タブをクリックします。

Amazon ElastiCache では、リードレプリカのレプリケーション状態を監視し、何らかの理由でレプリケーションが停止した場合は、[Replication State] フィールドが [Error] に更新されます。Redis エンジンによってスローされた、対応するエラーの詳細を確認するには、[Replication Error (レプリケーションエラー)] フィールドを調べます。この情報に基づいて、回復のための適切な措置をとります。レプリケーションの問題を解決する方法の詳細については、Amazon ElastiCache ユーザーガイドの「Troubleshooting a Read Replica problem」セクションをご覧ください。レプリケーションエラーが解決すると、[Replication State (レプリケーションステータス)] は [Replicating (レプリケーション中)] に変化します。

Amazon ElastiCache では、AWS マネジメントコンソールまたは Amazon CloudWatch API を介して Amazon CloudWatch メトリクス (「Replica Lag」) を使用し、リードレプリカがプライマリからどのくらい遅れているかを確認できます。

よくある質問 - Amazon ElastiCache | AWS
メトリクス 説明 単位
ReplicationLag このメトリクスは、リードレプリカとして実行中のノードにのみ適用できます。レプリカのプライマリノードからの変更適用の進行状況を秒で表します。Redis エンジンバージョン 5.0.6 以降の場合、ラグはミリ秒単位で測定できます。 Seconds
Redis のメトリクス - Amazon ElastiCache for Redis

負荷をかける

$ chmod u+x ycsb_redis.sh
$ ./ycsb_redis.sh

f:id:yohei-a:20210903140244p:plain

  • ElastiCache(Redis)は3シャード、1シャードあたり2レプリカの構成。

f:id:yohei-a:20210903140612p:plain

bash スクリプトと YCSB の workload 設定

  • ycsb_redis.sh
#!/bin/bash -x

export LC_ALL=C
cd YCSB

ENDPOINT=${ENDPOINT:-redis-cluster-no-auth2.******.clustercfg.apne1.cache.amazonaws.com}
WORKLOAD=${WORKLOAD:-workloads/workload_redis}
PORT=${PORT:-6379}
CLUSTER_MODE=${CLUSTER_MODE:-true}

while :
do
	./bin/ycsb load redis -s -P $WORKLOAD} -p "${ENDPOINT}" -p "redis.port=${PORT}" -p "redis.cluster=${CLUSTER_MODE}"
done
  • YCSB/workloads/workload_redis
recordcount=100000
operationcount=1000000
workload=com.yahoo.ycsb.workloads.CoreWorkload

readallfields=true

readproportion=0.5
updateproportion=0.5
scanproportion=0
insertproportion=0

requestdistribution=zipfian