Do you need to run RAID 10 on Mongo when using Provisioned IOPS on Amazon EBS?


I’m trying to setup a production mongo system on Amazon to use as a datastore for a realtime metrics system,

I initially used the MongoDB AMIs[1] in the Marketplace, but I’m confused in that there is only one data EBS. I’ve read that Mongo recommends RAID 10 on EBS storage (8 EBS on each server). Additionally, I’ve read that the bare minimum for production is a primary/secondary with an arbiter. Is RAID 10 still the recommended setup, or is one provisioned IOPS EBS sufficient?

Please Advise. We are a small shop, so what is the bare minimum we can get away with and still be reasonably safe?

[1] MongoDB 2.4 with 1000 IOPS – data: 200 GB @ 1000 IOPS, journal: 25 GB @ 250 IOPS, log: 10 GB @ 100 IOPS


So, I just got off of a call with an Amazon System Engineer, and he had some interesting insights related to this question.

  1. First off, if you are going to use RAID, he said to simply do striping, as the EBS blocks were mirrored behind the scenes anyway, so raid 10 seemed like overkill to him.
  2. Standard EBS volumes tend to handle spiky traffic well (it may be able to handle 1K-2K iops for a few seconds), however eventually it will tail off to an average of 100 iops. One suggestion was to use many small EBS volumes and stripe them to get better iops throughput.
  3. Some of his customers use just the ephemeral storage on the EC2 images, but then have multiple (3-5) nodes in the availability set. The ephemeral storage is the storage on the physical machine. Apparently, if you use the EC2 instance with the SSD storage, you can get up to 20K iops.
  4. Some customers will do a huge EC2 image w/ssd for the master, then do a smaller EC2 w/ EBS for the secondary. The primary machine is performant, but the failover is available but has degraded performance.
  5. make sure you check ‘EBS Optimized’ when you spin up an instance. That means you have a dedicated channel to the EBS storage (of any kind) instead of sharing the NIC.

  6. Important! Provisioned IOPS EBS is expensive, and the bill does not shut off when you shut down the EC2 instances they are attached to. (this sucks while you are testing) His advice was to take a snapshot of the EBS volumes, then delete them. When you need them again, just create new provisioned IOPS EBS volumes, restore the snapshot, then reconfigure your EC2 instances to attache the new storage. (it’s more work than it should be, but it’s worth it not to get sucker punched with the IOPS bill.

Leave a Reply