ElastiCacheでRedisクラスタを作成する際の設定

awsredis

CacheClusterとReplicationGroup

コンソールでは意識することがないが、CloudFormationでElastiCacheクラスターを構築する場合は CacheClusterReplicationGroupという概念が存在する。 プライマリノードとリードレプリカノードは別のCacheClusterに作成され、それらをカプセル化したのがReplicationGroup。

Cluster Mode

有効にすると最大90までシャードを増やせるようになる。作成後にCluster Modeを有効にはできない。

シャードには1つのPrimary Nodeと0-5つのReplica Nodeが含まれる。 Replica NodeはPrimary NodeのデータをレプリケーションするRead Onlyなノード。手動でPrimary Nodeに昇格させたり、NodeやAZの障害時に自動で昇格したりする。

CloudFormationではシャード数はReplicationGroupのNumNodeGroupsで、レプリカノードの数はReplicasPerNodeGroupで設定できる。

リクエストはキーから計算されるハッシュスロットによって各シャードに分散され、 ClUSTER SLOTSコマンドでハッシュスロットとノードのマッピングが取れる。 go-redisのようなCluster対応クライアントは内部でこのマッピングと計算したハッシュスロットからリクエストを送るノードを決定している。

Node Size

少なくとも総アイテムサイズをシャード数で割った分がメモリに乗るようにする。 これに加えてスナップショットを作成する際にフォークしたプロセスで実行されるBGSAVEや、フェイルオーバーで使うメモリが必要。 reserved-memory-percentパラメータ(以前のバージョンではreserved-memoryだった)でmaxmemoryの25%を予約することが推奨されており、デフォルトは25になっている。

Subnet Group

クラスタに設定するVPCのサブネットの集合。クラスタ作成後には変更できない

Subnet Groupの作成