88
Corpus collapsum Partition tolerance of Galera put to test RICON 2014 Raghavendra Prabhu [email protected] Percona [email protected] randomsurfer wnohang.net rdprabhu ronin13

Corpus collapsum: Partition tolerance of Galera put to test

Embed Size (px)

DESCRIPTION

This is the talk given at RICON 2014 (ricon.io) on partition tolerance testing of Galera with docker and netem. Video: https://www.youtube.com/watch?v=xRD6A8TY_Uw Link to the talk: http://ricon.io/event-details/index.html#corpus-collapsum

Citation preview

Page 1: Corpus collapsum: Partition tolerance of Galera put to test

Corpus collapsumPartition tolerance of Galera put to test

RICON 2014

Raghavendra Prabhu [email protected]

Percona [email protected] randomsurfer wnohang.net rdprabhu ronin13

Page 2: Corpus collapsum: Partition tolerance of Galera put to test

The Title?

Page 3: Corpus collapsum: Partition tolerance of Galera put to test

Our Cluster

Page 4: Corpus collapsum: Partition tolerance of Galera put to test

Split brain

Page 5: Corpus collapsum: Partition tolerance of Galera put to test

Introduction

Seed quotes..

“ ’Network is reliable’ - a fallacy of the distributedsystem. ”

“ A distributed system is one in which the failure of acomputer you didn’t even know existed can render your owncomputer unusable. ” - Leslie Lamport

“ Never attribute to malice that which is adequatelyexplained by stupidity. ” - Hanlon’s Razor

“ Never attribute to Byzantine failure which can beexplained by an ill node(s) ” - Me

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 5 / 58

Page 6: Corpus collapsum: Partition tolerance of Galera put to test

Introduction

Seed quotes..

“ ’Network is reliable’ - a fallacy of the distributedsystem. ”

“ A distributed system is one in which the failure of acomputer you didn’t even know existed can render your owncomputer unusable. ” - Leslie Lamport

“ Never attribute to malice that which is adequatelyexplained by stupidity. ” - Hanlon’s Razor

“ Never attribute to Byzantine failure which can beexplained by an ill node(s) ” - Me

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 5 / 58

Page 7: Corpus collapsum: Partition tolerance of Galera put to test

Introduction

Seed quotes..

“ ’Network is reliable’ - a fallacy of the distributedsystem. ”

“ A distributed system is one in which the failure of acomputer you didn’t even know existed can render your owncomputer unusable. ” - Leslie Lamport

“ Never attribute to malice that which is adequatelyexplained by stupidity. ” - Hanlon’s Razor

“ Never attribute to Byzantine failure which can beexplained by an ill node(s) ” - Me

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 5 / 58

Page 8: Corpus collapsum: Partition tolerance of Galera put to test

Introduction

Seed quotes..

“ ’Network is reliable’ - a fallacy of the distributedsystem. ”

“ A distributed system is one in which the failure of acomputer you didn’t even know existed can render your owncomputer unusable. ” - Leslie Lamport

“ Never attribute to malice that which is adequatelyexplained by stupidity. ” - Hanlon’s Razor

“ Never attribute to Byzantine failure which can beexplained by an ill node(s) ” - Me

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 5 / 58

Page 9: Corpus collapsum: Partition tolerance of Galera put to test

20000 feet view

Page 10: Corpus collapsum: Partition tolerance of Galera put to test

Introduction

Actors

▶ Database - WSREP/PXC▶ Plugin - Galera▶ Traffic control

♦ Traffic Control - tc♦ NetEm

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 7 / 58

Page 11: Corpus collapsum: Partition tolerance of Galera put to test

Introduction

Actors

▶ Database - WSREP/PXC▶ Plugin - Galera▶ Traffic control

♦ Traffic Control - tc♦ NetEm

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 7 / 58

Page 12: Corpus collapsum: Partition tolerance of Galera put to test

Introduction

Actors

▶ Database - WSREP/PXC▶ Plugin - Galera▶ Traffic control

♦ Traffic Control - tc♦ NetEm

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 7 / 58

Page 13: Corpus collapsum: Partition tolerance of Galera put to test

Introduction

Actors

▶ Containers - Docker▶ Load

♦ Generators - Sysbench, RQG▶ Network

♦ Dnsmasq♦ nsenter

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 8 / 58

Page 14: Corpus collapsum: Partition tolerance of Galera put to test

Introduction

Actors

▶ Containers - Docker▶ Load

♦ Generators - Sysbench, RQG▶ Network

♦ Dnsmasq♦ nsenter

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 8 / 58

Page 15: Corpus collapsum: Partition tolerance of Galera put to test

Introduction

Actors

▶ Jenkins♦ Build flow and CI

▶ Storage♦ Why

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 9 / 58

Page 16: Corpus collapsum: Partition tolerance of Galera put to test

Details

But why

▶ The ‘P’ in CAP▶ WAN scalability▶ Real Reason - fun!▶ Tolerance to latency variance

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 10 / 58

Page 17: Corpus collapsum: Partition tolerance of Galera put to test

Details

But why

▶ The ‘P’ in CAP▶ WAN scalability▶ Real Reason - fun!▶ Tolerance to latency variance

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 10 / 58

Page 18: Corpus collapsum: Partition tolerance of Galera put to test

Details

But why

▶ The ‘P’ in CAP▶ WAN scalability▶ Real Reason - fun!▶ Tolerance to latency variance

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 10 / 58

Page 19: Corpus collapsum: Partition tolerance of Galera put to test

Details

But why

▶ The ‘P’ in CAP▶ WAN scalability▶ Real Reason - fun!▶ Tolerance to latency variance

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 10 / 58

Page 20: Corpus collapsum: Partition tolerance of Galera put to test

Details

But why

▶ Failures in warehouses.▶ Not quorum, but consensus.▶ Real world networks and synchronous replication

- Delay- Partition

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 11 / 58

Page 21: Corpus collapsum: Partition tolerance of Galera put to test

Galera

Page 22: Corpus collapsum: Partition tolerance of Galera put to test

Details

Galera

▶ Data-centric approach▶ EVS▶ Causality and Synchronous▶ Latency

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 13 / 58

Page 23: Corpus collapsum: Partition tolerance of Galera put to test
Page 24: Corpus collapsum: Partition tolerance of Galera put to test
Page 25: Corpus collapsum: Partition tolerance of Galera put to test
Page 26: Corpus collapsum: Partition tolerance of Galera put to test

Where did it start

Page 27: Corpus collapsum: Partition tolerance of Galera put to test

Details

Where did it start

▶ Bug! https://bugs.launchpad.net/galera/+bug/1274192▶ Loss of PC▶ Crash▶ HA goal

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 18 / 58

Page 28: Corpus collapsum: Partition tolerance of Galera put to test

One can bring the wholedown

Page 29: Corpus collapsum: Partition tolerance of Galera put to test

The Flow

Page 30: Corpus collapsum: Partition tolerance of Galera put to test

Details

Basic Flow

Jenkins Build images Start Dnsmasq Bootstrap

Load/SysbenchSST/OthersPre-sanitynsenter/netem

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 21 / 58

Page 31: Corpus collapsum: Partition tolerance of Galera put to test

Details

Basic Flow

Jenkins Build images Start Dnsmasq Bootstrap

Load/SysbenchSST/OthersPre-sanitynsenter/netem

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 21 / 58

Page 32: Corpus collapsum: Partition tolerance of Galera put to test

Details

Basic Flow

Jenkins Build images Start Dnsmasq Bootstrap

Load/SysbenchSST/OthersPre-sanitynsenter/netem

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 21 / 58

Page 33: Corpus collapsum: Partition tolerance of Galera put to test

Details

Basic Flow

Jenkins Build images Start Dnsmasq Bootstrap

Load/SysbenchSST/OthersPre-sanitynsenter/netem

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 21 / 58

Page 34: Corpus collapsum: Partition tolerance of Galera put to test

Details

Basic Flow

Jenkins Build images Start Dnsmasq Bootstrap

Load/SysbenchSST/OthersPre-sanitynsenter/netem

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 21 / 58

Page 35: Corpus collapsum: Partition tolerance of Galera put to test

Details

Basic Flow

Jenkins Build images Start Dnsmasq Bootstrap

Load/SysbenchSST/OthersPre-sanitynsenter/netem

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 21 / 58

Page 36: Corpus collapsum: Partition tolerance of Galera put to test

Details

Basic Flow

Jenkins Build images Start Dnsmasq Bootstrap

Load/SysbenchSST/OthersPre-sanitynsenter/netem

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 21 / 58

Page 37: Corpus collapsum: Partition tolerance of Galera put to test

Details

Basic Flow

Jenkins Build images Start Dnsmasq Bootstrap

Load/SysbenchSST/OthersPre-sanitynsenter/netem

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 21 / 58

Page 38: Corpus collapsum: Partition tolerance of Galera put to test

Details

Basic Flow

RR sysbench

Detach/Keep

Sanity check Reconciliation

Post sanity Core trace

Cleanup Collect logs

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 22 / 58

Page 39: Corpus collapsum: Partition tolerance of Galera put to test

Details

Basic Flow

RR sysbench

Detach/Keep

Sanity check Reconciliation

Post sanity Core trace

Cleanup Collect logs

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 22 / 58

Page 40: Corpus collapsum: Partition tolerance of Galera put to test

Details

Basic Flow

RR sysbench

Detach/Keep

Sanity check Reconciliation

Post sanity Core trace

Cleanup Collect logs

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 22 / 58

Page 41: Corpus collapsum: Partition tolerance of Galera put to test

Details

Basic Flow

RR sysbench

Detach/Keep

Sanity check Reconciliation

Post sanity Core trace

Cleanup Collect logs

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 22 / 58

Page 42: Corpus collapsum: Partition tolerance of Galera put to test

Details

Basic Flow

RR sysbench

Detach/Keep

Sanity check Reconciliation

Post sanity Core trace

Cleanup Collect logs

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 22 / 58

Page 43: Corpus collapsum: Partition tolerance of Galera put to test

Details

Basic Flow

RR sysbench

Detach/Keep

Sanity check Reconciliation

Post sanity Core trace

Cleanup Collect logs

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 22 / 58

Page 44: Corpus collapsum: Partition tolerance of Galera put to test

Details

Basic Flow

RR sysbench

Detach/Keep

Sanity check Reconciliation

Post sanity Core trace

Cleanup Collect logs

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 22 / 58

Page 45: Corpus collapsum: Partition tolerance of Galera put to test

Details

Basic Flow

RR sysbench

Detach/Keep

Sanity check Reconciliation

Post sanity Core trace

Cleanup Collect logs

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 22 / 58

Page 46: Corpus collapsum: Partition tolerance of Galera put to test

Details

Cluster Resilience

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 23 / 58

Page 47: Corpus collapsum: Partition tolerance of Galera put to test

Details

Parameters

▶ Sysbench▶ Segment▶ Reconciliation period▶ Loss nodes

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 24 / 58

Page 48: Corpus collapsum: Partition tolerance of Galera put to test

Details

Parameters

▶ Sysbench▶ Segment▶ Reconciliation period▶ Loss nodes

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 24 / 58

Page 49: Corpus collapsum: Partition tolerance of Galera put to test

Details

Parameters

▶ Sysbench▶ Segment▶ Reconciliation period▶ Loss nodes

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 24 / 58

Page 50: Corpus collapsum: Partition tolerance of Galera put to test

Details

Parameters

▶ Sysbench▶ Segment▶ Reconciliation period▶ Loss nodes

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 24 / 58

Page 51: Corpus collapsum: Partition tolerance of Galera put to test

Details

Parameters

▶ NetEm▶ Detach loss▶ Fsync▶ Shutdown

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 25 / 58

Page 52: Corpus collapsum: Partition tolerance of Galera put to test

Details

Parameters

▶ NetEm▶ Detach loss▶ Fsync▶ Shutdown

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 25 / 58

Page 53: Corpus collapsum: Partition tolerance of Galera put to test

Details

Parameters

▶ NetEm▶ Detach loss▶ Fsync▶ Shutdown

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 25 / 58

Page 54: Corpus collapsum: Partition tolerance of Galera put to test

Details

Parameters

▶ NetEm▶ Detach loss▶ Fsync▶ Shutdown

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 25 / 58

Page 55: Corpus collapsum: Partition tolerance of Galera put to test

Containers!

Page 56: Corpus collapsum: Partition tolerance of Galera put to test

Details

Docker

▶ Why not virtualize♦ Occam♦ Namespaces

▶ Simplicity♦ Network♦ One application per node

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 27 / 58

Page 57: Corpus collapsum: Partition tolerance of Galera put to test

Details

Docker

▶ Portability- See same qualitative behavior that I do.

▶ Reproducibility- Makes it determinstic

▶ Configurable and CI- Byproducts

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 28 / 58

Page 58: Corpus collapsum: Partition tolerance of Galera put to test

Details

Docker

▶ QEMU and Docker▶ Scalability

♦ Performance♦ Feature

▶ Abstraction of channels

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 29 / 58

Page 59: Corpus collapsum: Partition tolerance of Galera put to test

Details

Container Networking

▶ Linking didn’t help▶ Dnsmasq to rescue!

♦ Hosts file and volumes♦ SIGHUP and refresh

▶ More elegant methods- Swarm

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 30 / 58

Page 60: Corpus collapsum: Partition tolerance of Galera put to test

Details

Noise

▶ Initial setup- Bridge- Egress only- IFB

▶ Present state▶ NetEm

- tc qdisc buckets- packet loss, delay, corruption, duplication, reordering- nsenter

▶ Future- Docker exec

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 31 / 58

Page 61: Corpus collapsum: Partition tolerance of Galera put to test

Testing methods

Page 62: Corpus collapsum: Partition tolerance of Galera put to test

Details

Method I

▶ Qdisc is detached after load▶ Objective

- Time to recover of full cluster▶ Done with a larger subset

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 33 / 58

Page 63: Corpus collapsum: Partition tolerance of Galera put to test

Details

Method II

▶ Qdisc is kept till the end▶ Objective

- Formation of primary component▶ Comparatively smaller set

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 34 / 58

Page 64: Corpus collapsum: Partition tolerance of Galera put to test

Details

Observations

▶ Post sanity types- Why

▶ Which method is more pertinent▶ State transfer issues

- Beginning- During re-emergence

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 35 / 58

Page 65: Corpus collapsum: Partition tolerance of Galera put to test

Details

Observations

▶ Direct load to affected nodes▶ Logs

- journalctl- Streaming?

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 36 / 58

Page 66: Corpus collapsum: Partition tolerance of Galera put to test

Details

Other noises

▶ Aim▶ Fsync

- libeatmydata- Variance

▶ Correlation with network▶ How with Docker

- LD_PRELOAD

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 37 / 58

Page 67: Corpus collapsum: Partition tolerance of Galera put to test

System Load

Page 68: Corpus collapsum: Partition tolerance of Galera put to test

Details

Load generation

▶ Sysbench- Generation- Reconnect on partition

▶ Sockets chosen- Load on affected nodes

▶ Distribution of Load- RR with socat- Native sysbench support- HAProxy?

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 39 / 58

Page 69: Corpus collapsum: Partition tolerance of Galera put to test

Details

Load generation

▶ Nature of data/load- DDL

▶ RQG in future- Fuzz testing

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 40 / 58

Page 70: Corpus collapsum: Partition tolerance of Galera put to test

The Fix

Page 71: Corpus collapsum: Partition tolerance of Galera put to test

Strike Out!

Page 72: Corpus collapsum: Partition tolerance of Galera put to test

Details

Eviction

▶ STONITH▶ Permanent eviction▶ ’N’ strikes & out!

- Timers - evs parameters- wsrep_evs_delayed and wsrep_evs_evict_list

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 43 / 58

Page 73: Corpus collapsum: Partition tolerance of Galera put to test

Details

Eviction

▶ Aim▶ Quorum required

- Why? - Not shoot each other- Non-PC nodes also.

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 44 / 58

Page 74: Corpus collapsum: Partition tolerance of Galera put to test

Details

Eviction

▶ Aim▶ Quorum required

- Why? - Not shoot each other- Non-PC nodes also.

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 44 / 58

Page 75: Corpus collapsum: Partition tolerance of Galera put to test

Details

Eviction

▶ EVS version and upgrade▶ TODO!

- Ingress only- Follow here.

▶ Credits to Teemu Ollakka, Yan Zhang and Alex Yurchenko fromcodership.

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 45 / 58

Page 76: Corpus collapsum: Partition tolerance of Galera put to test

Details

Coredumps with Docker

▶ Breakdown of abstraction▶ Lack of isolation▶ What was done

- Volumes- core_pattern & sysctl- suid and ulimit

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 46 / 58

Page 77: Corpus collapsum: Partition tolerance of Galera put to test

Details

WAN Segments

▶ How they work▶ Random allocation▶ Joiner starvation▶ Simulates data center▶ Donor selection

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 47 / 58

Page 78: Corpus collapsum: Partition tolerance of Galera put to test

Epilogue

The code

▶ Github: https://github.com/percona/pxc-docker▶ Jenkins:

http://jenkins.percona.com/job/PXC-5.6-netem/▶ Contributions/testing welcome!▶ Dependencies

- Sysbench

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 48 / 58

Page 79: Corpus collapsum: Partition tolerance of Galera put to test

Epilogue

Code: todo

▶ Docker automated builds▶ Orchestration▶ Docker

♦ Injection♦ Signal proxying

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 49 / 58

Page 80: Corpus collapsum: Partition tolerance of Galera put to test

Epilogue

Code: todo

▶ Use Hoare’s channels - Go!▶ Run it bare - CoreOS▶ Overlay with etcd/fleet/libswarm

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 50 / 58

Page 81: Corpus collapsum: Partition tolerance of Galera put to test

Future work

Page 82: Corpus collapsum: Partition tolerance of Galera put to test

Epilogue

Future work

▶ Fault injection♦ Memory

- Poisoned memory♦ Disk

- libeatmydata- Opposite- ENOSPC

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 52 / 58

Page 83: Corpus collapsum: Partition tolerance of Galera put to test

Epilogue

Fault injection

▶ CPU- NUMA?- Hotplug

▶ More network- corruption, duplication, reordering, rate-limit- Better distribution- Other shaping

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 53 / 58

Page 84: Corpus collapsum: Partition tolerance of Galera put to test

More Chaos

Page 85: Corpus collapsum: Partition tolerance of Galera put to test

Epilogue

Future work

▶ Disturb cluster more!- Membership changes* Manual eviction* Pull the cord!- Corrupt nodes

▶ Consistency voting

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 55 / 58

Page 86: Corpus collapsum: Partition tolerance of Galera put to test

Epilogue

Further Reading

▶ Byzantine fault tolerance- Reaching agreement in presence of faults

▶ The Network is Reliable▶ NetEm▶ Latency: The New Web Performance Bottleneck▶ Galera Cluster Documentation▶ Auto eviction code▶ Don’t Settle for Eventual Consistency▶ Extended Virtual Synchrony

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 56 / 58

Page 87: Corpus collapsum: Partition tolerance of Galera put to test

Epilogue

About

▶ /me: Raghavendra Prabhu, Product Lead, Percona XtraDBCluster, Percona.

▶ Slides will be at slideshare.net/slidunder and owncloud▶ About.me: raghavendra.prabhu▶ Keybase.io: rdprabhu▶ Presentation under CC BY-SA 4.0

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 57 / 58

Page 88: Corpus collapsum: Partition tolerance of Galera put to test

Epilogue

Image Credits▶ http://galeracluster.com/documentation-webpages/▶ http://www.thelastdragontribute.com/40th-anniversary-death-of-bruce-lee/▶ https://upload.wikimedia.org/wikipedia/commons/6/60/Corpus_callosum.png▶ http://www.thebarrow.org/Neurological_Services/Epilepsy/204354▶ https://flic.kr/p/9J6GNu▶ https://secure.flickr.com/photos/brewbooks/7780990192▶ https://www.flickr.com/photos/kwerfeldein/2649294869▶ https://secure.flickr.com/photos/mindmob/51951632▶ https://secure.flickr.com/photos/arenamontanus/2227769907▶ https://www.flickr.com/photos/markop/477199204▶ https://www.flickr.com/photos/gcwest/281385801▶ https://www.flickr.com/photos/29233640@N07/13466208953▶ https://www.flickr.com/photos/bob_in_thailand/9782777742/

Raghavendra Prabhu (Percona) Corpus collapsum 28 October, 2014 58 / 58