Breaking a riak cluster

60
Consistency or Bust Breaking a Riak Cluster Sunday, July 31, 11

description

slides from OSCON data 2011 workshop Consistency or Bust: Breaking a RIak Cluster

Transcript of Breaking a riak cluster

Page 1: Breaking a riak cluster

Consistency or BustBreaking a Riak Cluster

Sunday, July 31, 11

Page 2: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Jeff Kirkellemail: [email protected]: @jeffkirkell

Sunday, July 31, 11

Page 3: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

NoSQL Primer

Sunday, July 31, 11

Page 4: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Riak Sales Pitch Dynamo inspired AP of CAP key / value store scales consistently fault tolerance true high availability built-in replication lot’s of clients simple to implement low $$$ to use multiple license options

Sunday, July 31, 11

Page 5: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Riak Deep Dive

Sunday, July 31, 11

Page 6: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Cluster Defined cluster # nodes 64 / # nodes vnodes

Sunday, July 31, 11

Page 7: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Important Bits gossiping hintful handoff n # copies of data r # nodes that must respond for read w # nodes that must respond for write dw # replicas written on write for success rw # replicas deleted for success

Sunday, July 31, 11

Page 8: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Tools of the Trade terminal curl rebar rekon

Sunday, July 31, 11

Page 9: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

The Workshopsetup instructions for cluster

https://github.com/jkirkell/riak_workshop

Sunday, July 31, 11

Page 10: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Start Your Engines$ ./dev/dev1/bin/riak start$ ./dev/dev2/bin/riak start$ ./dev/dev3/bin/riak start$ ./dev/dev4/bin/riak start$ ./dev/dev5/bin/riak start$ps aux | grep erl

Sunday, July 31, 11

Page 11: Breaking a riak cluster

$ ./dev/dev2/bin/riak-admin join [email protected]$ ./dev/dev3/bin/riak-admin join [email protected]$ ./dev/dev4/bin/riak-admin join [email protected]$ ./dev/dev5/bin/riak-admin join [email protected]$ ./dev/dev3/bin/riak-admin status

Consistency or Bust: Breaking a Riak Cluster

Come Together

Sunday, July 31, 11

Page 12: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Default Settings

quorum = floor(5 / 2 + 1) = 3

Sunday, July 31, 11

Page 13: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Add Data$ curl -v -d 'inserted data' -H "Content-Type: text/plain" http://127.0.0.1:8091/riak/default

Sunday, July 31, 11

Page 14: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Confirm Data Exists$ curl -i http://127.0.0.1:8091/riak/default?keys=true

Sunday, July 31, 11

Page 15: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Find Your Data$ find ./dev/dev*/data/bitcask/*/*.data

Sunday, July 31, 11

Page 16: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Stop Primary Node$ dev[n]/bin/riak stop

$ curl -i http://127.0.0.1:8091/riak/default/[key]

Sunday, July 31, 11

Page 17: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Stop Another Primary Node$ dev[n]/bin/riak stop

$ curl -i http://127.0.0.1:8091/riak/default/[key]

Sunday, July 31, 11

Page 18: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Query Again$ curl -i http://127.0.0.1:8091/riak/default/[key]

Sunday, July 31, 11

Page 19: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Check What’s Happening$find ./dev/dev*/data/bitcask/*/*.data

$ ./dev/dev[n]/bin/riak-admin transfers

Sunday, July 31, 11

Page 20: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Update Data$ curl -v -d 'updated data' -H "Content-Type: text/plain" http://127.0.0.1:8091/riak/defaults/[key]

Sunday, July 31, 11

Page 21: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Start Node $ dev[n]/bin/riak start

$ ./dev/dev[n]/bin/riak-admin transfers

Sunday, July 31, 11

Page 22: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Review Logs$ less ./dev2/log/*.1

$ less ./dev5/log/*.1

Sunday, July 31, 11

Page 23: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Start Other Node$ dev[n]/bin/riak start

$ curl -i http://127.0.0.1:8091/riak/default/[key]

Sunday, July 31, 11

Page 24: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Summary consistently fail 1st read with 2 node down 2 node outage max. hintful-handoff takes time default settings good for general use

Sunday, July 31, 11

Page 25: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Clean Your Cluster$ dev1/bin/riak stop$ dev2/bin/riak stop$ dev3/bin/riak stop$ dev4/bin/riak stop$ dev5/bin/riak stop$ cd .. && rm -rf ./dev/*$ make devrel$ dev1/bin/riak start$ dev2/bin/riak start$ dev3/bin/riak start$ dev4/bin/riak start$ dev5/bin/riak start

Sunday, July 31, 11

Page 26: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Low Value Data

n = 2, r = 1, w = 1

Sunday, July 31, 11

Page 27: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Set Bucket Properties$ curl -v -X PUT -H "Content-Type: application/json" -d '{"props":{"n_val":2,"r":1,"w":1}}' http://127.0.0.1:8091/riak/low_value

Sunday, July 31, 11

Page 28: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Add Data$ curl -v -d 'inserted data' -H "Content-Type: text/plain" http://127.0.0.1:8091/riak/low_value

Sunday, July 31, 11

Page 29: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Confirm Data Exists$ curl -i http://127.0.0.1:8091/riak/low_value?keys=true

Sunday, July 31, 11

Page 30: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Find Your Data$ find ./dev/dev*/data/bitcask/*/*.data

Sunday, July 31, 11

Page 31: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Stop Primary Node$ dev[n]/bin/riak stop

$ curl -i http://127.0.0.1:8091/riak/default/[key]

Sunday, July 31, 11

Page 32: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Find Your Data Again$ find ./dev/dev*/data/bitcask/*/*.data

Sunday, July 31, 11

Page 33: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Stop Another Primary Node$ dev[n]/bin/riak stop

$ curl -i http://127.0.0.1:8091/riak/default/[key]

Sunday, July 31, 11

Page 34: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Query Again$ curl -i http://127.0.0.1:8091/riak/default/[key]

Sunday, July 31, 11

Page 35: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Check What’s Happening$find ./dev/dev*/data/bitcask/*/*.data

$ ./dev/dev[n]/bin/riak-admin transfers

Sunday, July 31, 11

Page 36: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Add More Data$ curl -v -d 'new data' -H "Content-Type: text/plain" http://127.0.0.1:8091/riak/low_value

Sunday, July 31, 11

Page 37: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Confirm Data Exists$ curl -i http://127.0.0.1:8091/riak/low_value?keys=true

Sunday, July 31, 11

Page 38: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Start Down Nodes$ dev[n]/bin/riak start

$ dev[n]/bin/riak start

$ ./dev/dev1/bin/riak-admin transfers

Sunday, July 31, 11

Page 39: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Confirm Data Exists$ curl -i http://127.0.0.1:8091/riak/low_value?keys=true

Sunday, July 31, 11

Page 40: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Summary hintful-handoff does not happen * 1 node outage max for reads 4 node outage max for writes great for fire and forget data like logs

Look at the logs for the nodes you brought down. It will show data transfer from hand-off even though the available nodes do not serve the read requests. This may or may not happen randomly due to Eventual Consistency. One other note is that R + W = N cannot guarantee consistency.

*

Sunday, July 31, 11

Page 41: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Clean Your Cluster$ dev1/bin/riak stop$ dev2/bin/riak stop$ dev3/bin/riak stop$ dev4/bin/riak stop$ dev5/bin/riak stop$ cd .. && rm -rf ./dev/*$ make devrel$ dev1/bin/riak start$ dev2/bin/riak start$ dev3/bin/riak start$ dev4/bin/riak start$ dev5/bin/riak start

Sunday, July 31, 11

Page 42: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Mission Critical Data

n = 5, r = 1, w = 5, dw = 5

Sunday, July 31, 11

Page 43: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Set Bucket Properties

Sunday, July 31, 11

Page 44: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Set Bucket Properties$ curl -v -X PUT -H "Content-Type: application/json" -d '{"props":{"n_val":5,"r":1,"w":5,"dw":5}}' http://127.0.0.1:8091/riak/high_value

Sunday, July 31, 11

Page 45: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Add Data$ curl -v -d 'inserted data' -H "Content-Type: text/plain" http://127.0.0.1:8091/riak/high_value

Sunday, July 31, 11

Page 46: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Confirm Data Exists$ curl -i http://127.0.0.1:8091/riak/high_value?keys=true

Sunday, July 31, 11

Page 47: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Find Your Data$ find ./dev/dev*/data/bitcask/*/*.data

Sunday, July 31, 11

Page 48: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Stop Any 2 Nodes$ dev[n]/bin/riak stop

$ dev[n]/bin/riak stop

$ curl -i http://127.0.0.1:8091/riak/high_value/[key]

Sunday, July 31, 11

Page 49: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Check What’s Happening$find ./dev/dev*/data/bitcask/*/*.data

$ ./dev/dev[n]/bin/riak-admin transfers

Sunday, July 31, 11

Page 50: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Stop Another Node$ dev[n]/bin/riak stop

$ curl -i http://127.0.0.1:8091/riak/high_value/[key]

Sunday, July 31, 11

Page 51: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Check What’s Happening$find ./dev/dev*/data/bitcask/*/*.data

$ ./dev/dev[n]/bin/riak-admin transfers

Sunday, July 31, 11

Page 52: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Update Data$ curl -v -d 'updated data' -H "Content-Type: text/plain" http://127.0.0.1:8091/riak/high_value/[key]

Sunday, July 31, 11

Page 53: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Query Data$ curl -i http://127.0.0.1:8091/riak/high_value/[key]

Sunday, July 31, 11

Page 54: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Start Down Nodes$ dev[n]/bin/riak start

$ dev[n]/bin/riak start

$ dev[n]/bin/riak start

$ ./dev/dev1/bin/riak-admin transfers

Sunday, July 31, 11

Page 55: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Confirm Data Exists$ curl -i http://127.0.0.1:8091/riak/high_value?keys=true

Sunday, July 31, 11

Page 56: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Summary data will duplicate on available nodes to ensure 5 copies 4 node outage max for reads 4 node outage max for writes slower due to all data writes great for high availability data

Sunday, July 31, 11

Page 57: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Total Destruction

Sunday, July 31, 11

Page 58: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Total Destruction

Sunday, July 31, 11

Page 59: Breaking a riak cluster

Consistency or Bust: Breaking a Riak Cluster

Summary easy to get up and going scales as you need it flexible configuration for consistency sake eventual consistency doesn’t always do what you expect just scratched the surface

Sunday, July 31, 11