Download - Zalando: Bootstrapping a Cassandra Cluster in a Dynamic Cloud Environment

Transcript
Page 1: Zalando: Bootstrapping a Cassandra Cluster in a Dynamic Cloud Environment

Bootstrapping Cassandra in a Dynamic Cloud Environment

Luis Mineiro - @voidmaze Thorbjörn Gruda - @ThorbyG

Page 2: Zalando: Bootstrapping a Cassandra Cluster in a Dynamic Cloud Environment

AgendaWho We Are and What We Do

How Do We Run a Tech Company

Cloud Infrastructure for Autonomous Teams

Cassandra in a Dynamic Cloud Environment

Page 3: Zalando: Bootstrapping a Cassandra Cluster in a Dynamic Cloud Environment

15 countries 3 fulfilment centers 15+ million active customers 2.2+ billion € revenue 2014 130+ million visits per month 8.000+ employees

ONE OF EUROPE’S LARGEST ONLINE FASHION RETAILERS

Visit us: tech.zalando.com

Tech hubs in Berlin, Dublin, Dortmund and Helsinki

Page 4: Zalando: Bootstrapping a Cassandra Cluster in a Dynamic Cloud Environment

#CassandraSummit

Zalando Technology

Page 5: Zalando: Bootstrapping a Cassandra Cluster in a Dynamic Cloud Environment

#CassandraSummit

Environment

Credits to our colleague Kolja Wilcke

Page 6: Zalando: Bootstrapping a Cassandra Cluster in a Dynamic Cloud Environment

#CassandraSummit

Environment

Credits to our colleague Kolja Wilcke

Page 7: Zalando: Bootstrapping a Cassandra Cluster in a Dynamic Cloud Environment

#CassandraSummit

Fashion Store Website

Page 8: Zalando: Bootstrapping a Cassandra Cluster in a Dynamic Cloud Environment

#CassandraSummit

Fashion Store Apps

iOSAndroid Windows Mobile

Page 9: Zalando: Bootstrapping a Cassandra Cluster in a Dynamic Cloud Environment

#CassandraSummit

Shoes in Space

http://thespaceshoe.com/

Page 10: Zalando: Bootstrapping a Cassandra Cluster in a Dynamic Cloud Environment

#CassandraSummit

Zalando Infrastructure

Based on https://flic.kr/p/bX5E4c

2 datacenters thousands of production instances

serving 15 countries

Page 11: Zalando: Bootstrapping a Cassandra Cluster in a Dynamic Cloud Environment

#CassandraSummit

RadicalAgility

Page 12: Zalando: Bootstrapping a Cassandra Cluster in a Dynamic Cloud Environment

#CassandraSummit

What’s That?

Radical Agility is Zalando Tech's approach to running a technology organization -

an approach based on the three pillars of autonomy, mastery and purpose

http://zln.do/ra-video

Page 13: Zalando: Bootstrapping a Cassandra Cluster in a Dynamic Cloud Environment

Compliance Innovation

#CassandraSummit

Page 14: Zalando: Bootstrapping a Cassandra Cluster in a Dynamic Cloud Environment

#CassandraSummit

STUPSA Cloud Infrastructure for Autonomous Teams

Page 15: Zalando: Bootstrapping a Cassandra Cluster in a Dynamic Cloud Environment

#CassandraSummit

What Is It?

“The STUPS platform is a set of tools and components to provide a convenient

and audit-compliant Platform-as-a-Service (PaaS) for multiple autonomous teams on top of Amazon Web Services (AWS)”

Learn more at https://stups.io

Page 16: Zalando: Bootstrapping a Cassandra Cluster in a Dynamic Cloud Environment

#CassandraSummit

A Platform on Top of AWS

Learn why at https://stups.io/why

Page 17: Zalando: Bootstrapping a Cassandra Cluster in a Dynamic Cloud Environment

#CassandraSummit

Relevant Requirements

All STUPS applications are Docker containers

We can only use audit-compliant AMIs

STUPS is dynamic. VPC is DHCP only

Page 18: Zalando: Bootstrapping a Cassandra Cluster in a Dynamic Cloud Environment

#CassandraSummit

Challenges Ahead

Page 19: Zalando: Bootstrapping a Cassandra Cluster in a Dynamic Cloud Environment

#CassandraSummit

Docker Container

Plenty of options out there

None was created specifically for STUPS

They should be immutable

Page 20: Zalando: Bootstrapping a Cassandra Cluster in a Dynamic Cloud Environment

#CassandraSummit

Audit-Compliant AMI

We can’t use DataStax’s AMIs

Cloud Engineering team publishes audit-compliant AMIs - Taupage

Taupage has its own bootstrapping process

Page 21: Zalando: Bootstrapping a Cassandra Cluster in a Dynamic Cloud Environment

#CassandraSummit

Dynamic Environment

Clusters require special nodes - Seeds

EC2 instances get a random IP address

EC2 instances come and go

Page 22: Zalando: Bootstrapping a Cassandra Cluster in a Dynamic Cloud Environment

#CassandraSummit

How can I help you?

Page 23: Zalando: Bootstrapping a Cassandra Cluster in a Dynamic Cloud Environment

#CassandraSummit

I’d like to bootstrap Cassandra

Page 24: Zalando: Bootstrapping a Cassandra Cluster in a Dynamic Cloud Environment

#CassandraSummit

YADCYet Another Docker Cassandra

• Kept the best options from the other

recipes out there

• Added STUPS specific options

Page 25: Zalando: Bootstrapping a Cassandra Cluster in a Dynamic Cloud Environment

#CassandraSummit

and then…?

Page 26: Zalando: Bootstrapping a Cassandra Cluster in a Dynamic Cloud Environment

#CassandraSummit

Run Container in Taupage

With this Cassandra container

we should be ready to run in our

audit-compliant AMI - Taupage

Page 27: Zalando: Bootstrapping a Cassandra Cluster in a Dynamic Cloud Environment

#CassandraSummit

You wish!

Page 28: Zalando: Bootstrapping a Cassandra Cluster in a Dynamic Cloud Environment

#CassandraSummit

I’d like to discover seed nodes dynamically

Page 29: Zalando: Bootstrapping a Cassandra Cluster in a Dynamic Cloud Environment

#CassandraSummit

Discovery

STUPS makes use of etcd to register EC2 instances

Applications can use etcd for discovery and distributed locking

Page 30: Zalando: Bootstrapping a Cassandra Cluster in a Dynamic Cloud Environment

#CassandraSummit

and then…?

Page 31: Zalando: Bootstrapping a Cassandra Cluster in a Dynamic Cloud Environment

#CassandraSummit

Custom SeedProviderWe created the EtcdSeedProvider

seed_provider: - class_name: org.zalando.cassandra.locator.EtcdSeedProvider parameters: - url: http://example.org/v2/keys/cassandra/my-cluster-name/seeds

Dynamically updates list of seed nodes from etcd

Page 32: Zalando: Bootstrapping a Cassandra Cluster in a Dynamic Cloud Environment

#CassandraSummit

and then…?

Page 33: Zalando: Bootstrapping a Cassandra Cluster in a Dynamic Cloud Environment

#CassandraSummit

Senza TemplateWe use the STUPS senza tool

to instrument AWS’ CloudFormation Bootstraps a Cassandra Cluster

with one simple command

$ senza create https://goo.gl/qyTy7b \ my-new-cluster \ etcd.example.org

Page 34: Zalando: Bootstrapping a Cassandra Cluster in a Dynamic Cloud Environment

#CassandraSummit

STUPS Appliance

CloudFormation

Cluster Details Name: my-new-cluster Size: 3

etcd.example.org

Page 35: Zalando: Bootstrapping a Cassandra Cluster in a Dynamic Cloud Environment

#CassandraSummit

STUPS Appliance

CloudFormation

Cluster Details Name: my-new-cluster Size: 3

etcd.example.org

Auto Scaling Group

Min, Max, Desired = 3

Page 36: Zalando: Bootstrapping a Cassandra Cluster in a Dynamic Cloud Environment

#CassandraSummit

STUPS Appliance

CloudFormation

Cluster Details Name: my-new-cluster Size: 3

etcd.example.org

Auto Scaling Group

Min, Max, Desired = 3

SeedNode #1

Page 37: Zalando: Bootstrapping a Cassandra Cluster in a Dynamic Cloud Environment

#CassandraSummit

STUPS Appliance

CloudFormation

Cluster Details Name: my-new-cluster Size: 3

etcd.example.org

Auto Scaling Group

Min, Max, Desired = 3

SeedNode #1

Node #2

Page 38: Zalando: Bootstrapping a Cassandra Cluster in a Dynamic Cloud Environment

#CassandraSummit

STUPS Appliance

CloudFormation

Cluster Details Name: my-new-cluster Size: 3

etcd.example.org

Auto Scaling Group

Min, Max, Desired = 3

SeedNode #1

Node #2

Node #3

Page 39: Zalando: Bootstrapping a Cassandra Cluster in a Dynamic Cloud Environment

#CassandraSummit

STUPS OpsCenterCluster discovers and registers into OpsCenter while bootstrapping

Page 40: Zalando: Bootstrapping a Cassandra Cluster in a Dynamic Cloud Environment

#CassandraSummit

What about operations?

Page 41: Zalando: Bootstrapping a Cassandra Cluster in a Dynamic Cloud Environment

#CassandraSummit

Appliance Operations

First release focused only on initial bootstrapping

Some things Just Work™

Page 42: Zalando: Bootstrapping a Cassandra Cluster in a Dynamic Cloud Environment

#CassandraSummit

Adding NodesJust adjust your Auto Scaling Group

Or trigger CloudWatch ScaleUp actions

Page 43: Zalando: Bootstrapping a Cassandra Cluster in a Dynamic Cloud Environment

#CassandraSummit

Useless piece of sh*t

Page 44: Zalando: Bootstrapping a Cassandra Cluster in a Dynamic Cloud Environment

#CassandraSummit

Upcoming FeaturesBetter distribution of seed nodes per AZ

Scheduled backups

HTTP Health check

JMX metrics and instrumentation over HTTP

Replacement of dead nodes

Page 45: Zalando: Bootstrapping a Cassandra Cluster in a Dynamic Cloud Environment

#CassandraSummit

All of this is open source

Page 46: Zalando: Bootstrapping a Cassandra Cluster in a Dynamic Cloud Environment

#CassandraSummit

We Want to Hear From You

https://github.com/zalando/stups-cassandra

https://github.com/zalando/stups-opscenter

https://github.com/zalando/cassandra-etcd-seed-provider

Try it out

Help us find issues

Send us pull requests

Page 47: Zalando: Bootstrapping a Cassandra Cluster in a Dynamic Cloud Environment

Thank you for listeningCheck out our blog https://tech.zalando.com

Our many open source products https://github.com/zalando The STUPS stack https://stups.io

Got more questions? You can reach us on twitter @ZalandoTech

We’re hiring!

Special thanks to Jessie Dude. No Continuum Transfunctioners were harmed during the production of these slides.