Understanding Elastic Block Store Availability and Performance

33
Jafar Shameem Business Development Manager Eric Anderson CTO and Co-Founder, CopperEgg Understanding Amazon EBS Availability and Performance

description

Depending on your application needs, Elastic Block Store’s volumes can be configured for optimal performance and higher availability.  In this session, we will present the different design characteristics of EBS Standard and Provisioned IOPS volumes, provide technical insights on how to think about EBS performance and availability, and share best practices to achieve higher availability and performance.  

Transcript of Understanding Elastic Block Store Availability and Performance

Page 1: Understanding Elastic Block Store Availability and Performance

Jafar Shameem

Business Development Manager

Eric Anderson

CTO and Co-Founder, CopperEgg

Understanding Amazon EBS Availability and Performance

Page 2: Understanding Elastic Block Store Availability and Performance

Agenda

• Overview of Elastic Block Store

• Some key concepts

• Performance

• Availability

Page 3: Understanding Elastic Block Store Availability and Performance

Storage Options on AWS

Block Storage (Elastic Block Store)

Object Storage (S3, Glacier)

Use for: • Access to raw

unformatted block level storage

• Persistent Storage

Use for: • Pictures, videos,

highly durable media storage

• Cold storage for long-term archive

Page 4: Understanding Elastic Block Store Availability and Performance

Amazon Elastic Block Store (EBS) Elastic Block Storage: Persistent Storage for EC2

Feature Details

High performance file system

Mount EBS as drives and format as required

Flexible size Volumes from 1GB to 1TB in size

Secure Private to your instances

Available Replicated within an Availability Zone

Backups Volumes can be snapshotted for point in time restore

Monitoring Detailed metrics captured via Cloud Watch

Page 5: Understanding Elastic Block Store Availability and Performance

What are some of our customers doing with EBS?

Enterprises

Enterprise workloads are built on block

storage

Oracle, SAP, Microsoft

Applications

Convenient, cost-effective,

reliable file server

Gaming/Social/ Mobile/Education

Very high performance

and consistent IO

for NoSQL and relational

DBs

Marketing / Analytics

Fast sequential IO

access

Page 6: Understanding Elastic Block Store Availability and Performance

Key EBS concepts

• Standard and Provisioned IOPS

Volumes

• Block Size

• Queue Depth

• Snapshots

Page 7: Understanding Elastic Block Store Availability and Performance

Standard and Provisioned IOPS Volume Types

Standard Volumes Provisioned IOPS Volumes

Optimized for Workloads with low or moderate IOPS needs and occasional bursts.

Transactional workloads requiring consistent IOPS.

Volume Attributes

Up to 1 TB, average 100 IOPS per volume. Best effort performance. Can be striped together for larger size and higher IOPS.

Up to 1TB, 2,000 IOPS per volume. Consistent IOPS. Can be striped together for larger size and higher IOPS.

Workloads File server, Log processing, Websites, Analytics, Boot, etc.

Business applications, MongoDB, SQL server, MySQL, Postgres, Oracle, etc.

Page 8: Understanding Elastic Block Store Availability and Performance

Block Size

Page 9: Understanding Elastic Block Store Availability and Performance

Queue Depth

Maintain a number of pending I/O requests to get the most out of your Provisioned IOPS volume. The volumes must maintain an average queue length of 1 (rounded up to the nearest whole number) for every 200 provisioned IOPS in a minute

Page 10: Understanding Elastic Block Store Availability and Performance

Snapshots

• Create snapshots (backups) of any Amazon EBS volume.

• The volume need not be attached to a running instance in order to take a

snapshot.

• These snapshots can be used to create multiple new Amazon EBS volumes,

expand the size of a volume, or move volumes across Availability Zones.

• The snapshots can be shared with specific AWS accounts or made public.

• You can use this functionality to increase the size of an existing volume, rapidly

replicate development and testing environments, or use Snapshot Copy to copy

snapshots to another region for disaster recovery or regional expansion.

Page 11: Understanding Elastic Block Store Availability and Performance

Performance

• Architecting for Performance

– Avoid throughput saturation

– Striping

• Achieving Consistent Performance

– Pre-warm Provisioned IOPS volumes

– Plan for snapshot

• Snapshot Performance

Page 12: Understanding Elastic Block Store Availability and Performance

Architecting for Performance: Use EBS Optimized Instances

Page 13: Understanding Elastic Block Store Availability and Performance

Architecting for Performance: Avoid Throughput Saturation

• Example:

– Cluster Compute instance types have 2Gb/s bandwidth to EBS, more than 6 PIOPS volumes at 2000 IOPS each will saturate 2 Gb/s network

– EBS Optimized M3.2Xlarge instance has 1 Gb/s bandwidth dedicated to EBS, more than 12 PIOPS volumes at 500 IOPS each will saturate the 1 GB/s network

Page 14: Understanding Elastic Block Store Availability and Performance

Architecting for Performance: Striping

sudo mdadm --verbose --create /dev/md0 --level=10 --chunk=256 --raid-

devices=4 /dev/sdh1 /dev/sdh2 /dev/sdh3 /dev/sdh4

Page 15: Understanding Elastic Block Store Availability and Performance

Achieving Consistent Performance: Pre-warm Provisioned

IOPS volumes

• There is a 5 to 50 percent performance reduction in IOPS when you first access the data on a Provisioned IOPS volume.

• Write to all blocks on volumes before first use

– $ dd of=/dev/md0 if=/dev/null

Page 16: Understanding Elastic Block Store Availability and Performance

Achieving Consistent Performance: Plan for Snapshot

To minimize the impact of snapshots on performance of a master node:

– create snapshots from a read replica of your data

– Plan snapshots during off-peak usage

Page 17: Understanding Elastic Block Store Availability and Performance

Snapshot Performance

• To improve snapshot performance

– Increase the frequency of snapshots

Page 18: Understanding Elastic Block Store Availability and Performance

Benchmarking performance

• http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSPerformance.html

#benchmark_piops

• fio

• Linux, Windows • For benchmarking I/O performance. (Note that fio has a dependency on libaio-devel.)

• Oracle ORION • Linux, Windows • For calibrating the I/O performance of storage systems to be used with Oracle databases.

• SQLIO • Windows • For calibrating the I/O performance of storage systems to be used with Microsoft SQL Server.

Page 19: Understanding Elastic Block Store Availability and Performance

Testing random 4K reads

• One Volume: ~200 MongoOPS with some variability, <1mb/s

• Loaded instance: ~ 1000 MongoOPS with some variability <10mb/s

PIOPS

+

EBS

• One Volume: 2000 MongoOPS with <1% variability, 3mb/s • Loaded Instance: 20000 MongoOPS with <1% variability, 60mb/s

SSD • Hi1.4xlarge ephemeral: ~64,000 MongoOPS with low variability, ~245mb/s

Page 20: Understanding Elastic Block Store Availability and Performance

Stab

le Testing random 4K reads

EBS

PIOPS

+ SSD PIOPS

+

Stab

le

Page 21: Understanding Elastic Block Store Availability and Performance

Availability

• RAID

• Snapshots

Page 22: Understanding Elastic Block Store Availability and Performance

RAID

• RAID 10: provides increased redundancy

– Replace EBS volume without application downtime

– Increases read throughput

– However, 50% reduction of provisioned aggregate write performance

– E.g., MongoDB optimized around the benefits of RAID 10

• RAID 0:

– All EBS volumes are replicated in the same AZ

– Increased throughput

Page 23: Understanding Elastic Block Store Availability and Performance

Snapshots

Page 24: Understanding Elastic Block Store Availability and Performance

CopperEgg: EBS Use Case

• How CopperEgg uses EBS

• EBS vs Provisioned IOPS EBS

• EBS and RAID

• Backup/Snapshot best practices

• Filesystem selection and tuning

• Monitoring/Migrations/Planning

Page 25: Understanding Elastic Block Store Availability and Performance

How CopperEgg uses EBS

• Real-time monitoring (every 5s) – System information

– Processes

– Synthetic HTTP/TCP/etc

– Application metrics

– Tons more..

• Requirements: – Store many terabytes of data

– Persist the data over long periods of time

– Backups (use snapshots)

– High IO: 50-60k+ ops/s per node • SSD + Provisioned IOPS EBS

– Consistent IO behavior (non-spikey)

Page 26: Understanding Elastic Block Store Availability and Performance

EBS vs Provisioned IOPS EBS

• Standard EBS

– Good for low IO volume

– Bursty workloads may be a good

fit: do the math

• Provisioned IOPS EBS

– Great for steady IO patterns that

need consistency

– Not always more expensive than

standard!

– Be sure to use the IOPS you

provision!

Page 27: Understanding Elastic Block Store Availability and Performance

EBS and RAID

• Which RAID? – Depends on your use case, but:

• We use stripes (RAID 0) for most things – Good performance, we build our fault tolerance at a different level

• RAID 10 (stripe of mirrors) – Good RAID0 performance, but increase in fault tolerance due to mirrors

– Twice the cost of RAID 0

• RAID 0+1 (mirror of stripes) – Don’t do this – same performance, worse fault tolerance

• RAID 5 (stripe with parity) – Could be dangerous: software RAID 5 can be bad if you have any write caching enabled.

– Maybe RAID 6 (dual parity) is an option..

• Block size – Use an appropriate stripe size for best results

• We use 64kb – but you need to test various configs to get the best fit for your application

Page 28: Understanding Elastic Block Store Availability and Performance

Backup/Snapshot best practices

• Snapshot regularly – At least once per day, more if you can

– First snapshots take a while, subsequent are faster

– Schedule for when your IO load is lowest to reduce impact • We do it at around 9pm CST

• Use consistent naming for snapshots – {hostname}-{raid device}-{device}-{timestamp}

• Use the API for creation – Faster kickoff, more likely to be consistent (script it!) – ec2-create-snapshot –d “{hostname}-{raid device}-{device}-{timestamp}” vol-d726382

• Move older snapshots to S3/Glacier for long-term storage

• RAID makes this a bit more complex: – Make sure you unmount/snapshot/remount your file system, or use fsfreeze to keep

consistent snapshots!

Page 29: Understanding Elastic Block Store Availability and Performance

Choosing a good file system

• We like ext3/4, but we love XFS

– High performance, consistent

– Robust and lots of options for tweaking/adjusting as needed

• Our favorite mount options: (your mileage may vary) – inode64, noatime, nodiratime, attr2, nobarrier, logbufs=8, logbsize=256k, osyncisdsync, nobootwait, noauto

– Yields great performance, reduces unnecessary writes, stable

• We like ZFS a lot too, but we want to see more runtime on linux first

– But FreeBSD/ZFS would be a fine choice

• However: test your workload!

– File systems behave differently under different workloads

Page 30: Understanding Elastic Block Store Availability and Performance

EBS/File system performance tuning

• Tuning file systems:

– Set the scheduler to use ‘deadline’ (for each disk in RAID array/EBS): • [as root] echo deadline > /sys/block/[disk device]/queue/scheduler

– Adjust how aggressively the cache is written to disk. Tune these back if you are

bursty in write IO:

• vm.dirty_ratio=30

• vm.dirty_background_ratio=20

• Track what you change!

– Before changing anything, monitor it

– After you make the change, monitor it

– Then: KEEP monitoring it – things can change over time in unexpected ways

Page 31: Understanding Elastic Block Store Availability and Performance

Monitoring

• Observing: – iostat –xcd –t 1

• Watch the sum of r/s and w/s – this is your IOPS metric. For PIOPS, you want it close to the provisioned amount. We monitor this using CopperEgg custom metrics, and alert if it goes low, or high.

– grep –A 1 dirty /proc/vmstat • If nr_dirty approaches nr_dirty_threshold, you need to tune down vm.dirty to flush writes more often.

• Reference: http://docs.neo4j.org/chunked/stable/linux-performance-guide.html

• Useful stats to capture: – In /proc/fs/xfs/stat

• xs_trans* -> transactions

• xs_read/write* -> read/write operations stats

• xb_* -> buffer stats

• Ignore SMART - does not work for EBS

• Watch the console log – Use the AWS API to look for warning signs of EBS issues

Page 32: Understanding Elastic Block Store Availability and Performance

Migrations and Capacity Planning

• Using PIOPS? – Plan on a data migration path if you need to increase PIOPS

• You can’t (yet) increase IOPS on the fly

• Migration steps from an EBS backed RAID: 1. Snapshot 1hr before, then again, and again – each time it takes less time

2. Stop all services

3. Unmount the filesystem

4. Stop the RAID (mdadm –stop /dev/md0)

5. Take final snapshot

6. Create new volumes based on last snapshot

7. RAID attach new volumes – mdadm should detect the array and magically make it work.

8. Mount the filesystem

9. Restart services

Page 33: Understanding Elastic Block Store Availability and Performance

Resources & Questions

• Jafar Shameem | [email protected] | @rafaj

• http://aws.amazon.com/ebs/

• Amazon Provisioned IOPS

– http://copperegg.com/amazon-provisioned-iops-ebs/

• Benchmarking EBS performance:

– http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSPerformance.html

• Stratalux: Putting Amazon’s Provisioned IOPS to the test

– http://www.stratalux.com/2012/08/09/putting-amazon’s-provisioned-iops-to-the-test/

• MongoDB on AWS: – http://docs.mongodb.org/ecosystem/platforms/#amazon-web-services-ec2