15

I'm currently running a site which uses Redis through Elasticache. We want to move to a larger instance with more RAM since we're getting to around 70% full on our current instance type.

Is there a way to scale up an Elasticache instance in the same way a RDS instance can be scaled?

Alternative, I wanted to create a replica group and add a bigger instance to it. Then, once it's replicated and running, promote the new instance to be the master. This doesn't seem possible through the AWS console as the replicas are created with the same instance type as the primary node.

Am I missing something or is it simply a use case which can't be achieved. I understand that I can start a bigger instance and manually deal with replication then move the web servers over to use the new server but this would require some downtime due to DNS migration, etc.

Thanks!, Alan

aclelland
  • 153
  • 1
  • 1
  • 4

4 Answers4

12

Elasticache feels more like a cache solution in the memcached sense of the word, meaning that to scale up, you would indeed fire up a new cluster and switch your application over to it. Performance will degrade for a moment because the cache would have to be rebuilt, but nothing more.

For many people (I suspect you included), however, Redis is more of a NoSQL database solution in which data loss is unacceptable. Amazon offers the read replicas as a "solution" to that problem, but it's still a bit iffy. Of course, it offers replication to reduce the risk of data loss, but it's still nowhere near as production-safe (or mature) as RDS for a Redis database (as opposed to a cache, for which it's quite perfect), which offers backup and restore procedures, as well as well-structured change management to support scaling up. To my knowledge, ElastiCache does not support changing the instance type for a running cluster. This suggests that it's merely an in-memory solution that would lose all its data on reboot.

I'd go as far as saying that if data loss concerns you, you should look at a self-rolled Redis solution instead of simply using ElastiCache. Not only is it marginally cheaper to run, it would enable you to change the instance type like you would on any other EC2 instance (after stopping it, of course). It would also enable you to use RDB or AOF persistence.

Jaap Haagmans
  • 5,752
  • 1
  • 23
  • 29
  • Thanks! You're correct that we're using Redis as a quasi-database solution, we're actually planning on having 2 redis servers running, one which acts like a traditional cache in front of our database. It's the second server which the data needs to be kept across up-scaling which we're concerned about. We're now looking at using Scalr.com to manage our Redis servers as they offer read replicas and what appears so far to be very fast failover. The advantage is that we can scale up to what ever AWS instance type we want. Thanks!, Alan – aclelland Mar 13 '14 at 09:25
  • To address the last point made, ElastiCache Redis does allow RDB snapshots and AOF: "The Redis slave can be used to generate RDB snapshots and / or AOF append logs as needed, and you may transfer these files to S3 for durability." From https://aws.amazon.com/elasticache/faqs/#redis-features – cldwalker Jun 01 '14 at 18:45
  • Yes, of course, I might have taken it a step too far. Scaling up by tearing down the instance and building another based on a snapshot would of course have solved the immediate problem here. However, I do stand by what I said: I would not recommend using ElastiCache as a database. And I doubt Amazon itself would either. – Jaap Haagmans Jun 03 '14 at 14:25
2

You can now scale up to a larger node type while ElastiCache preserves:

https://aws.amazon.com/blogs/aws/elasticache-for-redis-update-upgrade-engines-and-scale-up/

Thomas H.
  • 21
  • 1
  • 1
    Whilst this may theoretically answer the question, [it would be preferable](//meta.stackoverflow.com/q/8259) to include the essential parts of the answer here, and provide the link for reference. – Enamul Hassan Apr 02 '16 at 16:45
  • 1
    Worth noting that this works only for Redis clusters but not for memcached. – Vitali Jul 05 '16 at 12:07
1

Yes, you can instantly scale up a running Elasticache instance type to a larger size. I've tested it and experienced very little actual downtime (I think a few seconds at first, but very quickly it's back online, even while the Console will show the process taking roughly a few minutes to actually finish.) I went from a t2.micro to a m3.medium with no problem.

legel
  • 1,895
  • 2
  • 20
  • 21
0

You can scale up or down

  • Go to Elasticache service

  • Select the cluster

  • From Actions menu in top, choose Modify

  • Modify Node Type as shown below

enter image description here

If you have a cluster, you can add more shards, decrease number of shards, rebalance slot distributions, or add more read replicas. just click on the cluster itself, you should be see something like this

enter image description here

Be aware when you delete shards, it will automatically redistribute data to other existing shards so it will affect on traffic and overloading other shards, when you try to delete a shard you would get a warning like this

enter image description here

Still need more help, please feel free to leave a comment and I would be more than happy to help.

Muhammad Soliman
  • 14,761
  • 4
  • 84
  • 60