OSDC 2014: Jochen Lillich - Dynamic infrastructure orchestration

Post on 06-May-2015

405 Views

Category:

Software

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

Getting Configuration Management in place is a big step in the direction of infrastructure automation. Chef, Puppet and Co. replace error-prone manual changes with periodic system convergence runs controlled by a central database. Even with Puppet’s exported resources and Chef’s search capabilities, the weakness of this approach is that it is rather static. In situations where we need to propagate information quickly, handle failure detection, or tolerate network partitions, other tools might offer better solutions. In this talk, I’m going to present some of these alternatives (e.g. serf, etcd) and how they can be used to allow for more dynamic configuration changes.

Transcript

freistil.it

Dynamic Infrastructure Orchestration

Jochen Lillich

Jochen Lillich

@geewiz

Sysadmin since 1993

CEO of freistil IT

freistilbox: PaaS for Drupal & WordPress

Config Management

Elimination of manual changes

Consistent configuration

Single source of truth

DRY

Weaknesses

Periodic convergence runs

Central database

Orchestration

Perform changes quickly

Handle failure

Tolerate network partitions

serf

Basics

Cluster communication tool

Developed by Hashicorp

Simple binary, written in Go

Gossip protocol

serf node 1$ serf agent -node=node1 -bind=srv1

==> Starting Serf agent...

==> Starting Serf agent RPC...

==> Serf agent running!

Node name: 'srv1'

Bind addr: '192.168.0.11:7946'

==> Log data will now stream in as it occurs:

2014/04/09 16:05:51 [INFO] agent: Serf agent starting

2014/04/09 16:05:51 [INFO] serf: EventMemberJoin: node1 192.168.0.11

2014/04/09 16:05:52 [INFO] agent: Received event: member-join

serf node 2

$ serf agent -node=node2 -bind=srv2

$ serf join srv1

Successfully joined cluster by contacting 1 nodes.

$ serf members

node2 192.168.0.12:7946 alive

node1 192.168.0.11:7946 alive

Membership

Cluster management

Service configuration

Failure detection

Detects failure quickly

Notifies other nodes

Executes handler scripts

Eventsmember-join

member-leave

member-failed

member-update

member-reap

user

query

User events

Deploy application

Perform convergence run

Query information from the cluster

Example handler

#!/bin/bash

!

echo

echo "New event: ${SERF_EVENT}. Data follows..."

while read line; do

printf "${line}\n"

done

User event

$ serf event deploy-app

!

2014/04/09 17:06:32 [INFO] agent: Received event: user-event: deploy-app

etcd

Basics

HA key-value store

Developed by CoreOS

Written in Go

Raft consensus algorithm

Pure HTTP API

Key-value store

/release = 9607bcfeb48905d26db8f

/cluster

/cluster/node1 = node1.example.com

/cluster/node2 = node2.example.com

Quorum

Available

Quorum

Available

Quorum

Available

Quorum

Unavailable

Writing$ etcdctl set /message Hello

Hello

$ curl -L -X PUT \ http://127.0.0.1:4001/v2/keys/message \ -d value=“Test"

{"action":"set","node":{"key":"/message","value":"Test","modifiedIndex":15,"createdIndex":15},"prevNode":{"key":"/message","value":"Hello","modifiedIndex":2,"createdIndex":2}}

Reading

$ etcdctl get /message

Hello

$ curl -L \ http://127.0.0.1:4001/v2/keys/message

{"action":"get","node":{"key":"/message","value":"Test","modifiedIndex":15,"createdIndex":15}

Deleting

$ etcdctl rm /message

$ curl -L -X DELETE \ http://127.0.0.1:4001/v2/keys/message

Waiting

$ curl -L http://127.0.0.1:4001/v2/keys/release\?wait\=true

Waiting

$ curl -L http://127.0.0.1:4001/v2/keys/release\?wait\=true

{"action":"set","node":{"key":"/release","value":"9607bcfe","modifiedIndex":16,"createdIndex":16},"prevNode":{"key":"/release","value":"18512199","modifiedIndex":14,"createdIndex":14}}

Applications

Locking

Leader election

Database master

Elastic IP

Leader election

etcd

App

Leader election

etcd

AppDB?

Leader election

etcd

AppDB?

Nope.

Leader election

etcd

AppDB?

Nope.

I’ll wait.

Leader election

etcd

App

Leader election

etcd

App DB X

Leader election

etcd

App DB XMaster me!

Leader election

etcd

App DB XMaster me!

Ok!

Leader election

etcd

App DB X

DB X is master.

Leader election

etcd

App DB X

DB X is master.

Leader election

etcd

App DB X

DB X is master.

Leader election

etcd

App DB X

Leader election

etcd

App DB X

DB Y

Leader election

etcd

App DB X

DB Y

Master me!

Leader election

etcd

App DB X

DB Y

Master me!

No, DB X is.

Leader election

etcd

App DB X

DB Y

Leader election

etcd

App

DB Y

Leader election

etcd

App

DB Y

Leader election

etcd

App

DB Y

Leader election

etcd

App

DB Y

You da master!

Leader election

etcd

App

DB YDB Y is master now.

Leader election

etcd

App

DB Y

Summary

Thanks!

@geewiz

jochen@freistil.it

top related