10
Clustering RabbitMQ using Consul Valentin Fadeev DevOps Engineer @ Student.com @ValFadeev HashiCorp Meetup, London 20 Jun 2017 1 / 10

London Hug 20/6 - Clustering RabbitMQ using Consul

Embed Size (px)

Citation preview

Page 1: London Hug 20/6 - Clustering RabbitMQ using Consul

Clustering RabbitMQ using Consul

Valentin Fadeev

DevOps Engineer @ Student.com

@ValFadeev HashiCorp Meetup, London 20 Jun 2017 1 / 10

Page 2: London Hug 20/6 - Clustering RabbitMQ using Consul

Clustering in RabbitMQ

A RabbitMQ broker is a logical grouping of one or several Erlang nodes,each running the RabbitMQ application and sharing users, virtual hosts,queues, exchanges, bindings, and runtime parameters. Sometimes we referto the collection of nodes as a cluster1.

1https://www.rabbitmq.com/clustering.html@ValFadeev HashiCorp Meetup, London 20 Jun 2017 2 / 10

Page 3: London Hug 20/6 - Clustering RabbitMQ using Consul

Autocluster Plugin1

automated clustering

declarative configuration

pluggable backends

1https://github.com/rabbitmq/rabbitmq-autocluster@ValFadeev HashiCorp Meetup, London 20 Jun 2017 3 / 10

Page 4: London Hug 20/6 - Clustering RabbitMQ using Consul

Startup Sequence v1

start with a random delay

discover registered nodes

choose a node to cluster with and join

register with the backend

begin updating own health check

@ValFadeev HashiCorp Meetup, London 20 Jun 2017 4 / 10

Page 5: London Hug 20/6 - Clustering RabbitMQ using Consul

Startup Sequence v2

acquire startup lock

discover registered nodes

choose a node to cluster with and join

register with the backend

begin updating own health check

release startup lock

@ValFadeev HashiCorp Meetup, London 20 Jun 2017 5 / 10

Page 6: London Hug 20/6 - Clustering RabbitMQ using Consul

Why Consul?

DNS-based service discovery

decentralised health checking

configuration store

synchronisation primitives

event propagation

@ValFadeev HashiCorp Meetup, London 20 Jun 2017 6 / 10

Page 7: London Hug 20/6 - Clustering RabbitMQ using Consul

Locking in Consul1

create a session associated with a node

begin refreshing session TTL

try to acquire the session for a key in KV store

if lock is held by someone else watch for changes

acquire session

release session

1https://www.consul.io/docs/guides/leader-election.html@ValFadeev HashiCorp Meetup, London 20 Jun 2017 7 / 10

Page 8: London Hug 20/6 - Clustering RabbitMQ using Consul

Plugin Enhancements

use long node names

allow health checks in warning status

use start up locking instead of randomized delay

@ValFadeev HashiCorp Meetup, London 20 Jun 2017 8 / 10

Page 9: London Hug 20/6 - Clustering RabbitMQ using Consul

Deployment

Consul Server

Consul ServerConsul ServerRabbitMQ Consul Client

RabbitMQ Consul Client

RabbitMQ Consul Client

@ValFadeev HashiCorp Meetup, London 20 Jun 2017 9 / 10

Page 10: London Hug 20/6 - Clustering RabbitMQ using Consul

DNS Configuration

Docker Bridge

BIND

ConsulApp

Host network

Container network

@ValFadeev HashiCorp Meetup, London 20 Jun 2017 10 / 10