SlideShare a Scribd company logo
1 of 72
Download to read offline
PostgreSQL High-Availability and
Geographic Locality using consul
Sean Chittenden
Engineering, HashiCorp
@SeanChittenden
sean@hashicorp.com
https://keybase.io/seanc
Quick Demo
Consul Consul
dc2dc1
PostgreSQL
Follower
PostgreSQL
Leader
PostgreSQL
Follower
CONSUL
HASHICORP
HASHICORP
Key Value Store
HTTP API
Host & Service
Level Health
Checks
Datacenter Aware
Consul solves four central challenges with SOA
Service
Discovery
HTTP + DNS
HASHICORP
Consul Installation
HASHICORP
Overview
1. Introduction to Consul
2. Review of Consul
a. Architecture
b. Agent Functionality
c. Agent Configuration
d. Features
3. Further Reading
HASHICORP
Introduction
HASHICORP
Consul powers runtime orchestration
CONSUL
HASHICORP
1. Service discovery
2. Service registry
3. Key/value store
4. Health checks
HASHICORP
Glossary
Agent - Long-running daemon on every member of the Consul
cluster. The agent is able to run in either client or server mode.
Client - Agent that forwards all RPCs to a server and
participates in the LAN gossip pool.
Server - Agent that maintains cluster state, responds to RPC
queries, exchanges WAN gossip with other datacenters, and
forwards queries to leaders of remote datacenters.
Consensus - Agreement upon the elected leader
HASHICORP
Glossary
Gossip - Random node-to-node communication primarily over
UDP that provides membership, failure detection, and event
broadcast information to the cluster. Built on Serf. Consul has
both LAN and WAN Gossip.
Datacenter - Networking environment that is private, low latency,
and high bandwidth. A Consul cluster is run per datacenter, so its
important to have low latency for the gossip protocol.
HASHICORP
Consul vs. Other Software
- Opinionated framework for service discovery using DNS
or HTTP
- Scalable gossip system that links server nodes and clients
- Distributed health checking with edge triggered updates
- Globally aware with multi-datacenter support
- Operationally simple
- Incorporation into the HashiCorp ecosystem
HASHICORP
Architecture
HASHICORP
Single Datacenter
CLIENT CLIENT CLIENT CLIENT CLIENT CLIENT
SERVER SERVER SERVER
REPLICATION REPLICATION
RPC
RPC
LAN GOSSIP
HASHICORP
Multi-Datacenter
CLIENT CLIENT CLIENT CLIENT CLIENT CLIENT
SERVER SERVER SERVER
REPLICATION REPLICATION
RPC
RPC
LAN GOSSIP
SERVERSERVER SERVER
REPLICATION REPLICATION
WAN
GOSSIP
HASHICORP
Raft Introduction
~/src/raft/thesecretlivesofdata/raft
open index.html
~/src/raft/raftscope
open index.html
HASHICORP
TCP and UDP Ports
Client HTTP RPC
TCP/8500
DNS
TCP/8600
UDP/8600 LAN Gossip
TCP/8301
UDP/8301
LAN Gossip
TCP/8301
UDP/8301
RPC
TCP/8400
RPC
TCP/8400
WAN Gossip
TCP/8301
UDP/8301
Clients consul1.dc1
Client RPC
(HTTP)
DNS
TCP/8600
UDP/8600
Server RPC
TCP/8300
consulN.dc2 consul2.dc1
HASHICORP
Agent functionality (client or server)
- RPC, HTTP, DNS APIs
- Health Checks
- Event Execution
- Gossip Participation
- Membership
- Failure detection
HASHICORP
Agent functionality (server)
- State replication
- Query Handling
- Leader election
- WAN Gossip
HASHICORP
Failover via DNS
HASHICORP
DNS Failover
• Works across L3 boundaries
in LAN environments
• Works across L3 boundaries
in WAN environments
• Small TTLs
• Workload Distribution
• Clients cache DNS data
• Not subject to spanning-tree
• Requires TCP connections
be reset on failover
• Clients can cache stale DNS
data
Pro Con
HASHICORP
Consul Installation
HASHICORP
consul Server 1/3
% cat config.json
{
"acl_datacenter": "lab1",
"acl_default_policy": "deny",
"acl_master_token": "rootToken",
"addresses": {
"dns": "0.0.0.0",
"http": "unix:///tmp/.consul.http.sock",
"https": "0.0.0.0",
"rpc": "unix:///tmp/.consul.rpc.sock"
},
"bootstrap_expect": 3,
"datacenter": "lab1",
"data_dir": "./svc/data",
"disable_remote_exec": true,
HASHICORP
Consul Server 2/3
"dns_config": {
"allow_stale": true,
"max_stale": "10080m",
"node_ttl": "60s",
"service_ttl": {
"*": "5s",
"stable-service": "86400s"
}
},

"encrypt": "[ random mime encoded data ]",
"log_level": "debug",
"ports": {
"https": -1
},
"server": true,
"unix_sockets": {
"mode": "0700"
}
}
HASHICORP
Consul Server 3/3
% cat svc/run
#!/bin/sh --
set -e
exec 2>&1
exec 
/usr/bin/env -i 
./bin/consul agent 
-config-file=./config.json 
-config-dir=./conf.d/
% cat svc/log/run
#!/bin/sh —
set -e
set 2>&1
exec chpst -u _log:_log svlogd ./main
HASHICORP
Consul Cluster
% consul members
Node Address Status Type Build Protocol DC
vm1 172.16.139.140:8301 alive server 0.7.0dev 2 lab1
% consul join 172.16.139.139 172.16.139.138
Successfully joined cluster by contacting 2 nodes.
% consul members
Node Address Status Type Build Protocol DC
vm1 172.16.139.140:8301 alive server 0.7.0dev 2 lab1
vm2 172.16.139.138:8301 alive server 0.7.0dev 2 lab1
vm3 172.16.139.139:8301 alive server 0.7.0dev 2 lab1
HASHICORP
Consul Cluster
% consul info
agent:
check_monitors = 0
check_ttls = 0
checks = 0
services = 1
build:
prerelease = dev
revision = 'fa26d5f
version = 0.7.0
consul:
bootstrap = false
known_datacenters = 2
leader = false
leader_addr = 172.16.139.139:8300
server = true
[snip]
HASHICORP
Consul Cluster
% consul info
[snip]
raft:
applied_index = 103339
commit_index = 103339
fsm_pending = 0
last_contact = 82.95803ms
last_log_index = 103339
last_log_term = 50663
last_snapshot_index = 98437
last_snapshot_term = 2228
num_peers = 2
raft_peers =
172.16.139.139:8300,172.16.139.138:8300,172.16.139.140:8300
state = Follower
term = 50663
[snip]
HASHICORP
dnsmasq Config
% cat /usr/local/etc/dnsmasq.conf
local-service
port=53
server=/consul/127.0.0.1#8600
rev-server=172.16.0.0/12,127.0.0.1#8600
server=208.67.222.222
server=208.67.220.220
cache-size=65536
% cat /etc/resov.conf
search localdomain
nameserver 127.0.0.1
HASHICORP
Service Discovery
HTTP + DNS
HASHICORP
- Nodes, Services, Checks
- Simple registration (JSON)
- DNS Interface
- HTTP API
Service Discovery
HASHICORP
PostgreSQL Service
% hostname
pg002
% cat config.d/pg-db.json
{
"service": {
"name": "pg-db",
"tags": ["follower"],
"port": 5432,
"checks":
[{
"id": "pg-alive",
"notes": "Make sure connect and queries work",
"script": "/usr/local/bin/check_postgresql",
"interval": "10s"
}]
}
}
Terminal
HASHICORP
$ dig follower.pg-db.service.consul
Terminal
HASHICORP
$ dig follower.pg-db.service.consul
; <<>> DiG 9.8.3-P1 <<>> follower.pg-db.service.consul
; (3 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 946
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0,
ADDITIONAL: 0
;; WARNING: recursion requested but not available
;; QUESTION SECTION:
;follower.pg-db.service.consul. IN A
;; ANSWER SECTION:
follower.pg-db.service.consul. 0 IN A 172.16.139.141
Terminal
HASHICORP
$ dig follower.pg-db.service.consul SRV
; <<>> DiG 9.8.3-P1 <<>> follower.pg-db.service.consul
SRV
; (3 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 480
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0,
ADDITIONAL: 1
;; WARNING: recursion requested but not available
;; QUESTION SECTION:
;follower.pg-db.service.consul. IN SRV
;; ANSWER SECTION:
follower.pg-db.service.consul. 0 IN SRV 1 1 5432
HASHICORP
DNS Interface
- Zero Touch
- Randomized Round-Robin DNS
- Filters on Health Checks
HASHICORP
HTTP API
- HTTP API
- Custom Integrations
HASHICORP
Host & Service Level
Health Checks
HASHICORP
What is a health check?
0PASSING
1WARNING
_
_FAILING
Any command that returns an exit code
HASHICORP
Health Checks & Monitoring
- Nagios-compatible
- Scalable
- Actionable
- Edge Triggered
Text Editor
HASHICORP
% cat conf.d/mem-check.json
{
"check": {
"id": "mem-util",
"name": "Memory utilization",
"script": "/usr/local/bin/mem_check.sh",
"interval": "10s"
}
}
Creating a check
Use a custom script
Text Editor
HASHICORP
% cat conf.d/http-check.json
{
"check": {
"id": "api",
"name": "HTTP API on port 4455",
"http": "http://localhost:4455/_health",
"interval": "10s",
"timeout": "1s"
}
}
Creating a check
Use a built-in check type
HASHICORP
Traditional Health Checking (pull)
HEALTH
CHECKING
SERVICE
DB 1
DB 2
DB N
"Are you healthy?"
HASHICORP
Traditional Health Checking (pull)
HEALTH
CHECKING
SERVICE
DB 1
DB 2
DB N
"Are you healthy?"
"Yessir!"
HASHICORP
Traditional Health Checking (pull)
HEALTH
CHECKING
SERVICE
DB 1
DB 2
DB N
"Are you healthy?"
"What about you?"
"Yessir!"
HASHICORP
Traditional Health Checking (pull)
HEALTH
CHECKING
SERVICE
DB 1
DB 2
DB N
"Are you healthy?"
"What about you?"
"Yessir!"
"Nah"
HASHICORP
Traditional Health Checking (pull)
DB 1
DB 2
DB N
HEALTH
CHECKING
SERVICE
"Are you healthy?"
"What about you?"
"Yessir!"
"Nah"
HASHICORP
Traditional Health Checking (pull)
DB 1
DB 2
DB N
HEALTH
CHECKING
SERVICE
1,000'S OF
REQUESTS
HASHICORP
Consul Health Checking (push)
CONSUL
DB 1
DB 2
DB N
My status has changed
HASHICORP
Consul Health Checking (push)
CONSUL
DB 1
DB 2
DB N
10'S OF
REQUESTS
HASHICORP
Liveness
- No Heartbeats
- Gossip-based Failure Detector built
on Serf
- Constant Load
HASHICORP
HTTP UI
http://172.16.139.138:8500/ui/#/lab1/services
HASHICORP
Key Value Store
HTTP API
Terminal
HASHICORP
$ curl -X PUT -d 'bar' http://localhost:8500/v1/kv/foo
true
Terminal
HASHICORP
$ curl -X PUT -d 'bar' http://localhost:8500/v1/kv/foo
true
$ curl http://localhost:8500/v1/kv/foo
[
{
"CreateIndex": 100,
"ModifyIndex": 200,
"Key": "foo",
"Flags": 0,
"Value": "YmFy"
}
]
% echo -n 'bar' | base64
YmFy
% echo -n 'YmFy' | base64 -d ; echo
bar
Terminal
HASHICORP
% cat <<EOF > acl.anonymous.json
{
"ID": "anonymous",
"Name": "Anonymous Token",
"Type": "client",
"Rules": "# Default all keys to read-only
key "" {
policy = "read"
}
# Default all services to read-only
service "" {
policy = "read"
}
# Allow hearing any user event by default.
event "" {
policy = "read"
}
Terminal
HASHICORP
# Default prepared queries to read-only.
query "" {
policy = "read"
}
# Read-only mode for the encryption keyring by default
(list only)
keyring = "read""
}
EOF
% curl -v -X PUT -d @acl.anonymous.json --unix-socket /
tmp/.consul.http.sock 'http://consul/v1/acl/update?
token=rootToken'
Prepared Queries
Use Case
• Multiple instances of a given service exist in
multiple datacenters
• Clients can talk to any of them, and always prefer
the instances with lowest latency
• Policies can change, desire to not have the clients
know the details of how to locate a healthy service
Prepared Queries
• New query namespace, similar to services
• Register queries to answer for parts of this
namespace
• Clients use APIs, or “.query.consul” DNS lookups
to run queries
• Magic happens :-)
pg-db with Failover
$ curl -X POST -d 
'{
"Name": "geo-pg-db—follower",
"Service": {
"Service": "pg-db",
"Failover": {
"NearestN": 3
},
"Tags": ["follower"]
}
}’ localhost:8500/v1/query
geo-pgdb—follower.query.consul
PostgreSQL Template
$ curl -X POST -d 
'{
"Name": "geo-db",
"Template": {
"Type": "name_prefix_match",
"Regexp": "^geo-db-(.*?)-([^-]+?)$"
},
"Service": {
"Service": "pg—${match(1)}",
"Failover": {
"NearestN": 3,
"Datacenters": ["dc1", "dc2"]
},
"OnlyPassing": true,
"Tags": ["${match(2)}"]
}
}' localhost:8500/v1/query
geo-db-customer-leader.query.consul
geo-db-customer-follower.query.consul
geo-db-billing-follower.query.consul
leader.pg-customer.service.consul
follower.pg-customer.service.consul
follower.pg-billing.service.consul
Catch All Template
$ curl -X POST -d 
'{
"Name": "",
"Template": {
"Type": "name_prefix_match"
},
"Service": {
"Service": "${name.full}",
"Failover": {
"NearestN": 3
}
}
}' localhost:8500/v1/query
*.query.consul
With a single query template, all
services can fail over to the nearest
healthy service in a different datacenter!
Under the Hood: Network Tomography
• Rides on pings that are part of LAN and WAN
gossip
• Models networking round trip time using simple
physics simulation with masses and springs
• Develops a set of “network coordinates” for round
trip time estimation with a simple calculation
Under the Hood: Network Tomography
HASHICORP
Consul
Conclusion
HASHICORP
Key Value Store
HTTP API
Host & Service
Level Health
Checks
Datacenter Aware
Consul solves four central challenges with SOA
Service
Discovery
HTTP + DNS
HASHICORP
Further reading
- Consul vs. Other Software:
consul.io/intro/vs/index.html
- Consul Agent:
consul.io/docs/agent/basics.html
- Consul Commands:
consul.io/docs/commands/index.html
- Consul Internals:
consul.io/docs/internals/index.html
Questions?
Thanks!
sean@hashicorp.com

More Related Content

What's hot

Kubernetes #6 advanced scheduling
Kubernetes #6   advanced schedulingKubernetes #6   advanced scheduling
Kubernetes #6 advanced schedulingTerry Cho
 
Getting started with karate dsl
Getting started with karate dslGetting started with karate dsl
Getting started with karate dslKnoldus Inc.
 
Automated testing using Selenium & NUnit
Automated testing using Selenium & NUnitAutomated testing using Selenium & NUnit
Automated testing using Selenium & NUnitAlfred Jett Grandeza
 
Software testing tools
Software testing toolsSoftware testing tools
Software testing toolsGaurav Paliwal
 
Introduction to Robot Framework (external)
Introduction to Robot Framework (external)Introduction to Robot Framework (external)
Introduction to Robot Framework (external)Zhe Li
 
RootedCON 2015 - Deep inside the Java framework Apache Struts
RootedCON 2015 - Deep inside the Java framework Apache StrutsRootedCON 2015 - Deep inside the Java framework Apache Struts
RootedCON 2015 - Deep inside the Java framework Apache Strutstestpurposes
 
PostgreSQL High Availability in a Containerized World
PostgreSQL High Availability in a Containerized WorldPostgreSQL High Availability in a Containerized World
PostgreSQL High Availability in a Containerized WorldJignesh Shah
 
Docker 101 : Introduction to Docker and Containers
Docker 101 : Introduction to Docker and ContainersDocker 101 : Introduction to Docker and Containers
Docker 101 : Introduction to Docker and ContainersYajushi Srivastava
 
Embedded Linux Quick Start Guide v1.5
Embedded Linux Quick Start Guide v1.5Embedded Linux Quick Start Guide v1.5
Embedded Linux Quick Start Guide v1.5Chris Simmonds
 
Apache Camel K - Copenhagen v2
Apache Camel K - Copenhagen v2Apache Camel K - Copenhagen v2
Apache Camel K - Copenhagen v2Claus Ibsen
 
[OpenInfra Days Korea 2018] (Track 4) - Grafana를 이용한 OpenStack 클라우드 성능 모니터링
[OpenInfra Days Korea 2018] (Track 4) - Grafana를 이용한 OpenStack 클라우드 성능 모니터링[OpenInfra Days Korea 2018] (Track 4) - Grafana를 이용한 OpenStack 클라우드 성능 모니터링
[OpenInfra Days Korea 2018] (Track 4) - Grafana를 이용한 OpenStack 클라우드 성능 모니터링OpenStack Korea Community
 
Project calico - introduction
Project calico - introductionProject calico - introduction
Project calico - introductionHazzim Anaya
 
Kubernetes Application Deployment with Helm - A beginner Guide!
Kubernetes Application Deployment with Helm - A beginner Guide!Kubernetes Application Deployment with Helm - A beginner Guide!
Kubernetes Application Deployment with Helm - A beginner Guide!Krishna-Kumar
 
강좌 07 ARM 프로세서용 아두이노
강좌 07 ARM 프로세서용 아두이노강좌 07 ARM 프로세서용 아두이노
강좌 07 ARM 프로세서용 아두이노chcbaram
 
파이썬 TDD 101
파이썬 TDD 101파이썬 TDD 101
파이썬 TDD 101정주 김
 
CETH for XDP [Linux Meetup Santa Clara | July 2016]
CETH for XDP [Linux Meetup Santa Clara | July 2016] CETH for XDP [Linux Meetup Santa Clara | July 2016]
CETH for XDP [Linux Meetup Santa Clara | July 2016] IO Visor Project
 
Part 3 Maximizing the utilization of GPU resources on-premise and in the cloud
Part 3 Maximizing the utilization of GPU resources on-premise and in the cloudPart 3 Maximizing the utilization of GPU resources on-premise and in the cloud
Part 3 Maximizing the utilization of GPU resources on-premise and in the cloudUniva, an Altair Company
 

What's hot (20)

Kubernetes #6 advanced scheduling
Kubernetes #6   advanced schedulingKubernetes #6   advanced scheduling
Kubernetes #6 advanced scheduling
 
Getting started with karate dsl
Getting started with karate dslGetting started with karate dsl
Getting started with karate dsl
 
Automated testing using Selenium & NUnit
Automated testing using Selenium & NUnitAutomated testing using Selenium & NUnit
Automated testing using Selenium & NUnit
 
Accelerating with Ansible
Accelerating with AnsibleAccelerating with Ansible
Accelerating with Ansible
 
Software testing tools
Software testing toolsSoftware testing tools
Software testing tools
 
Introduction to Robot Framework (external)
Introduction to Robot Framework (external)Introduction to Robot Framework (external)
Introduction to Robot Framework (external)
 
RootedCON 2015 - Deep inside the Java framework Apache Struts
RootedCON 2015 - Deep inside the Java framework Apache StrutsRootedCON 2015 - Deep inside the Java framework Apache Struts
RootedCON 2015 - Deep inside the Java framework Apache Struts
 
PostgreSQL High Availability in a Containerized World
PostgreSQL High Availability in a Containerized WorldPostgreSQL High Availability in a Containerized World
PostgreSQL High Availability in a Containerized World
 
Docker 101 : Introduction to Docker and Containers
Docker 101 : Introduction to Docker and ContainersDocker 101 : Introduction to Docker and Containers
Docker 101 : Introduction to Docker and Containers
 
Embedded Linux Quick Start Guide v1.5
Embedded Linux Quick Start Guide v1.5Embedded Linux Quick Start Guide v1.5
Embedded Linux Quick Start Guide v1.5
 
Apache Camel K - Copenhagen v2
Apache Camel K - Copenhagen v2Apache Camel K - Copenhagen v2
Apache Camel K - Copenhagen v2
 
[OpenInfra Days Korea 2018] (Track 4) - Grafana를 이용한 OpenStack 클라우드 성능 모니터링
[OpenInfra Days Korea 2018] (Track 4) - Grafana를 이용한 OpenStack 클라우드 성능 모니터링[OpenInfra Days Korea 2018] (Track 4) - Grafana를 이용한 OpenStack 클라우드 성능 모니터링
[OpenInfra Days Korea 2018] (Track 4) - Grafana를 이용한 OpenStack 클라우드 성능 모니터링
 
Project calico - introduction
Project calico - introductionProject calico - introduction
Project calico - introduction
 
Kubernetes Application Deployment with Helm - A beginner Guide!
Kubernetes Application Deployment with Helm - A beginner Guide!Kubernetes Application Deployment with Helm - A beginner Guide!
Kubernetes Application Deployment with Helm - A beginner Guide!
 
강좌 07 ARM 프로세서용 아두이노
강좌 07 ARM 프로세서용 아두이노강좌 07 ARM 프로세서용 아두이노
강좌 07 ARM 프로세서용 아두이노
 
Kubernetes Basics
Kubernetes BasicsKubernetes Basics
Kubernetes Basics
 
파이썬 TDD 101
파이썬 TDD 101파이썬 TDD 101
파이썬 TDD 101
 
Flutter
FlutterFlutter
Flutter
 
CETH for XDP [Linux Meetup Santa Clara | July 2016]
CETH for XDP [Linux Meetup Santa Clara | July 2016] CETH for XDP [Linux Meetup Santa Clara | July 2016]
CETH for XDP [Linux Meetup Santa Clara | July 2016]
 
Part 3 Maximizing the utilization of GPU resources on-premise and in the cloud
Part 3 Maximizing the utilization of GPU resources on-premise and in the cloudPart 3 Maximizing the utilization of GPU resources on-premise and in the cloud
Part 3 Maximizing the utilization of GPU resources on-premise and in the cloud
 

Similar to PostgreSQL High-Availability and Geographic Locality using consul

Service Discovery using etcd, Consul and Kubernetes
Service Discovery using etcd, Consul and KubernetesService Discovery using etcd, Consul and Kubernetes
Service Discovery using etcd, Consul and KubernetesSreenivas Makam
 
Relayd: a load balancer for OpenBSD
Relayd: a load balancer for OpenBSD Relayd: a load balancer for OpenBSD
Relayd: a load balancer for OpenBSD Giovanni Bechis
 
KubeCon EU 2016: Creating an Advanced Load Balancing Solution for Kubernetes ...
KubeCon EU 2016: Creating an Advanced Load Balancing Solution for Kubernetes ...KubeCon EU 2016: Creating an Advanced Load Balancing Solution for Kubernetes ...
KubeCon EU 2016: Creating an Advanced Load Balancing Solution for Kubernetes ...KubeAcademy
 
Smart networking with service meshes
Smart networking with service meshes  Smart networking with service meshes
Smart networking with service meshes Mitchell Pronschinske
 
Service discovery like a pro (presented at reversimX)
Service discovery like a pro (presented at reversimX)Service discovery like a pro (presented at reversimX)
Service discovery like a pro (presented at reversimX)Eran Harel
 
Mасштабирование микросервисов на Go, Matt Heath (Hailo)
Mасштабирование микросервисов на Go, Matt Heath (Hailo)Mасштабирование микросервисов на Go, Matt Heath (Hailo)
Mасштабирование микросервисов на Go, Matt Heath (Hailo)Ontico
 
Service Discovery Like a Pro
Service Discovery Like a ProService Discovery Like a Pro
Service Discovery Like a ProEran Harel
 
Incrementalism: An Industrial Strategy For Adopting Modern Automation
Incrementalism: An Industrial Strategy For Adopting Modern AutomationIncrementalism: An Industrial Strategy For Adopting Modern Automation
Incrementalism: An Industrial Strategy For Adopting Modern AutomationSean Chittenden
 
Session: A Reference Architecture for Running Modern APIs with NGINX Unit and...
Session: A Reference Architecture for Running Modern APIs with NGINX Unit and...Session: A Reference Architecture for Running Modern APIs with NGINX Unit and...
Session: A Reference Architecture for Running Modern APIs with NGINX Unit and...NGINX, Inc.
 
Writing robust Node.js applications
Writing robust Node.js applicationsWriting robust Node.js applications
Writing robust Node.js applicationsTom Croucher
 
Puppet Camp DC 2015: Distributed OpenSCAP Compliance Validation with MCollective
Puppet Camp DC 2015: Distributed OpenSCAP Compliance Validation with MCollectivePuppet Camp DC 2015: Distributed OpenSCAP Compliance Validation with MCollective
Puppet Camp DC 2015: Distributed OpenSCAP Compliance Validation with MCollectivePuppet
 
GraphConnect 2014 SF: From Zero to Graph in 120: Scale
GraphConnect 2014 SF: From Zero to Graph in 120: ScaleGraphConnect 2014 SF: From Zero to Graph in 120: Scale
GraphConnect 2014 SF: From Zero to Graph in 120: ScaleNeo4j
 
How to Leverage Go for Your Networking Needs
How to Leverage Go for Your Networking NeedsHow to Leverage Go for Your Networking Needs
How to Leverage Go for Your Networking NeedsDigitalOcean
 

Similar to PostgreSQL High-Availability and Geographic Locality using consul (20)

Service Discovery using etcd, Consul and Kubernetes
Service Discovery using etcd, Consul and KubernetesService Discovery using etcd, Consul and Kubernetes
Service Discovery using etcd, Consul and Kubernetes
 
Relayd: a load balancer for OpenBSD
Relayd: a load balancer for OpenBSD Relayd: a load balancer for OpenBSD
Relayd: a load balancer for OpenBSD
 
KubeCon EU 2016: Creating an Advanced Load Balancing Solution for Kubernetes ...
KubeCon EU 2016: Creating an Advanced Load Balancing Solution for Kubernetes ...KubeCon EU 2016: Creating an Advanced Load Balancing Solution for Kubernetes ...
KubeCon EU 2016: Creating an Advanced Load Balancing Solution for Kubernetes ...
 
Smart networking with service meshes
Smart networking with service meshes  Smart networking with service meshes
Smart networking with service meshes
 
Service discovery like a pro (presented at reversimX)
Service discovery like a pro (presented at reversimX)Service discovery like a pro (presented at reversimX)
Service discovery like a pro (presented at reversimX)
 
Mасштабирование микросервисов на Go, Matt Heath (Hailo)
Mасштабирование микросервисов на Go, Matt Heath (Hailo)Mасштабирование микросервисов на Go, Matt Heath (Hailo)
Mасштабирование микросервисов на Go, Matt Heath (Hailo)
 
Soa with consul
Soa with consulSoa with consul
Soa with consul
 
Service Discovery Like a Pro
Service Discovery Like a ProService Discovery Like a Pro
Service Discovery Like a Pro
 
Incrementalism: An Industrial Strategy For Adopting Modern Automation
Incrementalism: An Industrial Strategy For Adopting Modern AutomationIncrementalism: An Industrial Strategy For Adopting Modern Automation
Incrementalism: An Industrial Strategy For Adopting Modern Automation
 
tdc2012
tdc2012tdc2012
tdc2012
 
Cooking with Chef
Cooking with ChefCooking with Chef
Cooking with Chef
 
Session: A Reference Architecture for Running Modern APIs with NGINX Unit and...
Session: A Reference Architecture for Running Modern APIs with NGINX Unit and...Session: A Reference Architecture for Running Modern APIs with NGINX Unit and...
Session: A Reference Architecture for Running Modern APIs with NGINX Unit and...
 
Oscon 2011 - ATS
Oscon 2011 - ATSOscon 2011 - ATS
Oscon 2011 - ATS
 
Writing robust Node.js applications
Writing robust Node.js applicationsWriting robust Node.js applications
Writing robust Node.js applications
 
Puppet Camp DC 2015: Distributed OpenSCAP Compliance Validation with MCollective
Puppet Camp DC 2015: Distributed OpenSCAP Compliance Validation with MCollectivePuppet Camp DC 2015: Distributed OpenSCAP Compliance Validation with MCollective
Puppet Camp DC 2015: Distributed OpenSCAP Compliance Validation with MCollective
 
GraphConnect 2014 SF: From Zero to Graph in 120: Scale
GraphConnect 2014 SF: From Zero to Graph in 120: ScaleGraphConnect 2014 SF: From Zero to Graph in 120: Scale
GraphConnect 2014 SF: From Zero to Graph in 120: Scale
 
REST in Peace
REST in PeaceREST in Peace
REST in Peace
 
How to Leverage Go for Your Networking Needs
How to Leverage Go for Your Networking NeedsHow to Leverage Go for Your Networking Needs
How to Leverage Go for Your Networking Needs
 
(Re)discover your AEM
(Re)discover your AEM(Re)discover your AEM
(Re)discover your AEM
 
Consul and Consul Pusher
Consul and Consul PusherConsul and Consul Pusher
Consul and Consul Pusher
 

More from Sean Chittenden

pg_prefaulter: Scaling WAL Performance
pg_prefaulter: Scaling WAL Performancepg_prefaulter: Scaling WAL Performance
pg_prefaulter: Scaling WAL PerformanceSean Chittenden
 
FreeBSD VPC Introduction
FreeBSD VPC IntroductionFreeBSD VPC Introduction
FreeBSD VPC IntroductionSean Chittenden
 
Life Cycle of Metrics, Alerting, and Performance Monitoring in Microservices
Life Cycle of Metrics, Alerting, and Performance Monitoring in MicroservicesLife Cycle of Metrics, Alerting, and Performance Monitoring in Microservices
Life Cycle of Metrics, Alerting, and Performance Monitoring in MicroservicesSean Chittenden
 
Codified PostgreSQL Schema
Codified PostgreSQL SchemaCodified PostgreSQL Schema
Codified PostgreSQL SchemaSean Chittenden
 
PostgreSQL + ZFS best practices
PostgreSQL + ZFS best practicesPostgreSQL + ZFS best practices
PostgreSQL + ZFS best practicesSean Chittenden
 
Production Readiness Strategies in an Automated World
Production Readiness Strategies in an Automated WorldProduction Readiness Strategies in an Automated World
Production Readiness Strategies in an Automated WorldSean Chittenden
 
PostgreSQL on ZFS Lightning Talk
PostgreSQL on ZFS Lightning TalkPostgreSQL on ZFS Lightning Talk
PostgreSQL on ZFS Lightning TalkSean Chittenden
 
Dynamic Database Credentials: Security Contingency Planning
Dynamic Database Credentials: Security Contingency PlanningDynamic Database Credentials: Security Contingency Planning
Dynamic Database Credentials: Security Contingency PlanningSean Chittenden
 
Modern tooling to assist with developing applications on FreeBSD
Modern tooling to assist with developing applications on FreeBSDModern tooling to assist with developing applications on FreeBSD
Modern tooling to assist with developing applications on FreeBSDSean Chittenden
 
Creating PostgreSQL-as-a-Service at Scale
Creating PostgreSQL-as-a-Service at ScaleCreating PostgreSQL-as-a-Service at Scale
Creating PostgreSQL-as-a-Service at ScaleSean Chittenden
 

More from Sean Chittenden (13)

BSDCan '19 Core Update
BSDCan '19 Core UpdateBSDCan '19 Core Update
BSDCan '19 Core Update
 
pg_prefaulter: Scaling WAL Performance
pg_prefaulter: Scaling WAL Performancepg_prefaulter: Scaling WAL Performance
pg_prefaulter: Scaling WAL Performance
 
FreeBSD VPC Introduction
FreeBSD VPC IntroductionFreeBSD VPC Introduction
FreeBSD VPC Introduction
 
Universal Userland
Universal UserlandUniversal Userland
Universal Userland
 
Life Cycle of Metrics, Alerting, and Performance Monitoring in Microservices
Life Cycle of Metrics, Alerting, and Performance Monitoring in MicroservicesLife Cycle of Metrics, Alerting, and Performance Monitoring in Microservices
Life Cycle of Metrics, Alerting, and Performance Monitoring in Microservices
 
Codified PostgreSQL Schema
Codified PostgreSQL SchemaCodified PostgreSQL Schema
Codified PostgreSQL Schema
 
PostgreSQL + ZFS best practices
PostgreSQL + ZFS best practicesPostgreSQL + ZFS best practices
PostgreSQL + ZFS best practices
 
Production Readiness Strategies in an Automated World
Production Readiness Strategies in an Automated WorldProduction Readiness Strategies in an Automated World
Production Readiness Strategies in an Automated World
 
FreeBSD: Dev to Prod
FreeBSD: Dev to ProdFreeBSD: Dev to Prod
FreeBSD: Dev to Prod
 
PostgreSQL on ZFS Lightning Talk
PostgreSQL on ZFS Lightning TalkPostgreSQL on ZFS Lightning Talk
PostgreSQL on ZFS Lightning Talk
 
Dynamic Database Credentials: Security Contingency Planning
Dynamic Database Credentials: Security Contingency PlanningDynamic Database Credentials: Security Contingency Planning
Dynamic Database Credentials: Security Contingency Planning
 
Modern tooling to assist with developing applications on FreeBSD
Modern tooling to assist with developing applications on FreeBSDModern tooling to assist with developing applications on FreeBSD
Modern tooling to assist with developing applications on FreeBSD
 
Creating PostgreSQL-as-a-Service at Scale
Creating PostgreSQL-as-a-Service at ScaleCreating PostgreSQL-as-a-Service at Scale
Creating PostgreSQL-as-a-Service at Scale
 

Recently uploaded

2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shardsChristopher Curtin
 
Osi security architecture in network.pptx
Osi security architecture in network.pptxOsi security architecture in network.pptx
Osi security architecture in network.pptxVinzoCenzo
 
Best Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh ITBest Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh ITmanoharjgpsolutions
 
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full RecordingOpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full RecordingShane Coughlan
 
VK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web DevelopmentVK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web Developmentvyaparkranti
 
Understanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM ArchitectureUnderstanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM Architecturerahul_net
 
Effectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryErrorEffectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryErrorTier1 app
 
eSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration toolseSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration toolsosttopstonverter
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsSafe Software
 
Introduction to Firebase Workshop Slides
Introduction to Firebase Workshop SlidesIntroduction to Firebase Workshop Slides
Introduction to Firebase Workshop Slidesvaideheekore1
 
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdfEnhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdfRTS corp
 
Keeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository worldKeeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository worldRoberto Pérez Alcolea
 
VictoriaMetrics Anomaly Detection Updates: Q1 2024
VictoriaMetrics Anomaly Detection Updates: Q1 2024VictoriaMetrics Anomaly Detection Updates: Q1 2024
VictoriaMetrics Anomaly Detection Updates: Q1 2024VictoriaMetrics
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...OnePlan Solutions
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalLionel Briand
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfDrew Moseley
 
Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Rob Geurden
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringHironori Washizaki
 
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full RecordingOpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full RecordingShane Coughlan
 
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationHow to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationBradBedford3
 

Recently uploaded (20)

2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards
 
Osi security architecture in network.pptx
Osi security architecture in network.pptxOsi security architecture in network.pptx
Osi security architecture in network.pptx
 
Best Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh ITBest Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh IT
 
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full RecordingOpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
 
VK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web DevelopmentVK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web Development
 
Understanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM ArchitectureUnderstanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM Architecture
 
Effectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryErrorEffectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryError
 
eSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration toolseSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration tools
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data Streams
 
Introduction to Firebase Workshop Slides
Introduction to Firebase Workshop SlidesIntroduction to Firebase Workshop Slides
Introduction to Firebase Workshop Slides
 
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdfEnhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
 
Keeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository worldKeeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository world
 
VictoriaMetrics Anomaly Detection Updates: Q1 2024
VictoriaMetrics Anomaly Detection Updates: Q1 2024VictoriaMetrics Anomaly Detection Updates: Q1 2024
VictoriaMetrics Anomaly Detection Updates: Q1 2024
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive Goal
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdf
 
Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their Engineering
 
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full RecordingOpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
 
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationHow to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion Application
 

PostgreSQL High-Availability and Geographic Locality using consul

  • 6. HASHICORP Key Value Store HTTP API Host & Service Level Health Checks Datacenter Aware Consul solves four central challenges with SOA Service Discovery HTTP + DNS
  • 8. HASHICORP Overview 1. Introduction to Consul 2. Review of Consul a. Architecture b. Agent Functionality c. Agent Configuration d. Features 3. Further Reading
  • 11. CONSUL HASHICORP 1. Service discovery 2. Service registry 3. Key/value store 4. Health checks
  • 12. HASHICORP Glossary Agent - Long-running daemon on every member of the Consul cluster. The agent is able to run in either client or server mode. Client - Agent that forwards all RPCs to a server and participates in the LAN gossip pool. Server - Agent that maintains cluster state, responds to RPC queries, exchanges WAN gossip with other datacenters, and forwards queries to leaders of remote datacenters. Consensus - Agreement upon the elected leader
  • 13. HASHICORP Glossary Gossip - Random node-to-node communication primarily over UDP that provides membership, failure detection, and event broadcast information to the cluster. Built on Serf. Consul has both LAN and WAN Gossip. Datacenter - Networking environment that is private, low latency, and high bandwidth. A Consul cluster is run per datacenter, so its important to have low latency for the gossip protocol.
  • 14. HASHICORP Consul vs. Other Software - Opinionated framework for service discovery using DNS or HTTP - Scalable gossip system that links server nodes and clients - Distributed health checking with edge triggered updates - Globally aware with multi-datacenter support - Operationally simple - Incorporation into the HashiCorp ecosystem
  • 16. HASHICORP Single Datacenter CLIENT CLIENT CLIENT CLIENT CLIENT CLIENT SERVER SERVER SERVER REPLICATION REPLICATION RPC RPC LAN GOSSIP
  • 17. HASHICORP Multi-Datacenter CLIENT CLIENT CLIENT CLIENT CLIENT CLIENT SERVER SERVER SERVER REPLICATION REPLICATION RPC RPC LAN GOSSIP SERVERSERVER SERVER REPLICATION REPLICATION WAN GOSSIP
  • 19. HASHICORP TCP and UDP Ports Client HTTP RPC TCP/8500 DNS TCP/8600 UDP/8600 LAN Gossip TCP/8301 UDP/8301 LAN Gossip TCP/8301 UDP/8301 RPC TCP/8400 RPC TCP/8400 WAN Gossip TCP/8301 UDP/8301 Clients consul1.dc1 Client RPC (HTTP) DNS TCP/8600 UDP/8600 Server RPC TCP/8300 consulN.dc2 consul2.dc1
  • 20. HASHICORP Agent functionality (client or server) - RPC, HTTP, DNS APIs - Health Checks - Event Execution - Gossip Participation - Membership - Failure detection
  • 21. HASHICORP Agent functionality (server) - State replication - Query Handling - Leader election - WAN Gossip
  • 23. HASHICORP DNS Failover • Works across L3 boundaries in LAN environments • Works across L3 boundaries in WAN environments • Small TTLs • Workload Distribution • Clients cache DNS data • Not subject to spanning-tree • Requires TCP connections be reset on failover • Clients can cache stale DNS data Pro Con
  • 25. HASHICORP consul Server 1/3 % cat config.json { "acl_datacenter": "lab1", "acl_default_policy": "deny", "acl_master_token": "rootToken", "addresses": { "dns": "0.0.0.0", "http": "unix:///tmp/.consul.http.sock", "https": "0.0.0.0", "rpc": "unix:///tmp/.consul.rpc.sock" }, "bootstrap_expect": 3, "datacenter": "lab1", "data_dir": "./svc/data", "disable_remote_exec": true,
  • 26. HASHICORP Consul Server 2/3 "dns_config": { "allow_stale": true, "max_stale": "10080m", "node_ttl": "60s", "service_ttl": { "*": "5s", "stable-service": "86400s" } },
 "encrypt": "[ random mime encoded data ]", "log_level": "debug", "ports": { "https": -1 }, "server": true, "unix_sockets": { "mode": "0700" } }
  • 27. HASHICORP Consul Server 3/3 % cat svc/run #!/bin/sh -- set -e exec 2>&1 exec /usr/bin/env -i ./bin/consul agent -config-file=./config.json -config-dir=./conf.d/ % cat svc/log/run #!/bin/sh — set -e set 2>&1 exec chpst -u _log:_log svlogd ./main
  • 28. HASHICORP Consul Cluster % consul members Node Address Status Type Build Protocol DC vm1 172.16.139.140:8301 alive server 0.7.0dev 2 lab1 % consul join 172.16.139.139 172.16.139.138 Successfully joined cluster by contacting 2 nodes. % consul members Node Address Status Type Build Protocol DC vm1 172.16.139.140:8301 alive server 0.7.0dev 2 lab1 vm2 172.16.139.138:8301 alive server 0.7.0dev 2 lab1 vm3 172.16.139.139:8301 alive server 0.7.0dev 2 lab1
  • 29. HASHICORP Consul Cluster % consul info agent: check_monitors = 0 check_ttls = 0 checks = 0 services = 1 build: prerelease = dev revision = 'fa26d5f version = 0.7.0 consul: bootstrap = false known_datacenters = 2 leader = false leader_addr = 172.16.139.139:8300 server = true [snip]
  • 30. HASHICORP Consul Cluster % consul info [snip] raft: applied_index = 103339 commit_index = 103339 fsm_pending = 0 last_contact = 82.95803ms last_log_index = 103339 last_log_term = 50663 last_snapshot_index = 98437 last_snapshot_term = 2228 num_peers = 2 raft_peers = 172.16.139.139:8300,172.16.139.138:8300,172.16.139.140:8300 state = Follower term = 50663 [snip]
  • 31. HASHICORP dnsmasq Config % cat /usr/local/etc/dnsmasq.conf local-service port=53 server=/consul/127.0.0.1#8600 rev-server=172.16.0.0/12,127.0.0.1#8600 server=208.67.222.222 server=208.67.220.220 cache-size=65536 % cat /etc/resov.conf search localdomain nameserver 127.0.0.1
  • 33. HASHICORP - Nodes, Services, Checks - Simple registration (JSON) - DNS Interface - HTTP API Service Discovery
  • 34. HASHICORP PostgreSQL Service % hostname pg002 % cat config.d/pg-db.json { "service": { "name": "pg-db", "tags": ["follower"], "port": 5432, "checks": [{ "id": "pg-alive", "notes": "Make sure connect and queries work", "script": "/usr/local/bin/check_postgresql", "interval": "10s" }] } }
  • 36. Terminal HASHICORP $ dig follower.pg-db.service.consul ; <<>> DiG 9.8.3-P1 <<>> follower.pg-db.service.consul ; (3 servers found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 946 ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; WARNING: recursion requested but not available ;; QUESTION SECTION: ;follower.pg-db.service.consul. IN A ;; ANSWER SECTION: follower.pg-db.service.consul. 0 IN A 172.16.139.141
  • 37. Terminal HASHICORP $ dig follower.pg-db.service.consul SRV ; <<>> DiG 9.8.3-P1 <<>> follower.pg-db.service.consul SRV ; (3 servers found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 480 ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; WARNING: recursion requested but not available ;; QUESTION SECTION: ;follower.pg-db.service.consul. IN SRV ;; ANSWER SECTION: follower.pg-db.service.consul. 0 IN SRV 1 1 5432
  • 38. HASHICORP DNS Interface - Zero Touch - Randomized Round-Robin DNS - Filters on Health Checks
  • 39. HASHICORP HTTP API - HTTP API - Custom Integrations
  • 40. HASHICORP Host & Service Level Health Checks
  • 41. HASHICORP What is a health check? 0PASSING 1WARNING _ _FAILING Any command that returns an exit code
  • 42. HASHICORP Health Checks & Monitoring - Nagios-compatible - Scalable - Actionable - Edge Triggered
  • 43. Text Editor HASHICORP % cat conf.d/mem-check.json { "check": { "id": "mem-util", "name": "Memory utilization", "script": "/usr/local/bin/mem_check.sh", "interval": "10s" } } Creating a check Use a custom script
  • 44. Text Editor HASHICORP % cat conf.d/http-check.json { "check": { "id": "api", "name": "HTTP API on port 4455", "http": "http://localhost:4455/_health", "interval": "10s", "timeout": "1s" } } Creating a check Use a built-in check type
  • 45. HASHICORP Traditional Health Checking (pull) HEALTH CHECKING SERVICE DB 1 DB 2 DB N "Are you healthy?"
  • 46. HASHICORP Traditional Health Checking (pull) HEALTH CHECKING SERVICE DB 1 DB 2 DB N "Are you healthy?" "Yessir!"
  • 47. HASHICORP Traditional Health Checking (pull) HEALTH CHECKING SERVICE DB 1 DB 2 DB N "Are you healthy?" "What about you?" "Yessir!"
  • 48. HASHICORP Traditional Health Checking (pull) HEALTH CHECKING SERVICE DB 1 DB 2 DB N "Are you healthy?" "What about you?" "Yessir!" "Nah"
  • 49. HASHICORP Traditional Health Checking (pull) DB 1 DB 2 DB N HEALTH CHECKING SERVICE "Are you healthy?" "What about you?" "Yessir!" "Nah"
  • 50. HASHICORP Traditional Health Checking (pull) DB 1 DB 2 DB N HEALTH CHECKING SERVICE 1,000'S OF REQUESTS
  • 51. HASHICORP Consul Health Checking (push) CONSUL DB 1 DB 2 DB N My status has changed
  • 52. HASHICORP Consul Health Checking (push) CONSUL DB 1 DB 2 DB N 10'S OF REQUESTS
  • 53. HASHICORP Liveness - No Heartbeats - Gossip-based Failure Detector built on Serf - Constant Load
  • 56. Terminal HASHICORP $ curl -X PUT -d 'bar' http://localhost:8500/v1/kv/foo true
  • 57. Terminal HASHICORP $ curl -X PUT -d 'bar' http://localhost:8500/v1/kv/foo true $ curl http://localhost:8500/v1/kv/foo [ { "CreateIndex": 100, "ModifyIndex": 200, "Key": "foo", "Flags": 0, "Value": "YmFy" } ] % echo -n 'bar' | base64 YmFy % echo -n 'YmFy' | base64 -d ; echo bar
  • 58. Terminal HASHICORP % cat <<EOF > acl.anonymous.json { "ID": "anonymous", "Name": "Anonymous Token", "Type": "client", "Rules": "# Default all keys to read-only key "" { policy = "read" } # Default all services to read-only service "" { policy = "read" } # Allow hearing any user event by default. event "" { policy = "read" }
  • 59. Terminal HASHICORP # Default prepared queries to read-only. query "" { policy = "read" } # Read-only mode for the encryption keyring by default (list only) keyring = "read"" } EOF % curl -v -X PUT -d @acl.anonymous.json --unix-socket / tmp/.consul.http.sock 'http://consul/v1/acl/update? token=rootToken'
  • 61. Use Case • Multiple instances of a given service exist in multiple datacenters • Clients can talk to any of them, and always prefer the instances with lowest latency • Policies can change, desire to not have the clients know the details of how to locate a healthy service
  • 62. Prepared Queries • New query namespace, similar to services • Register queries to answer for parts of this namespace • Clients use APIs, or “.query.consul” DNS lookups to run queries • Magic happens :-)
  • 63. pg-db with Failover $ curl -X POST -d '{ "Name": "geo-pg-db—follower", "Service": { "Service": "pg-db", "Failover": { "NearestN": 3 }, "Tags": ["follower"] } }’ localhost:8500/v1/query geo-pgdb—follower.query.consul
  • 64. PostgreSQL Template $ curl -X POST -d '{ "Name": "geo-db", "Template": { "Type": "name_prefix_match", "Regexp": "^geo-db-(.*?)-([^-]+?)$" }, "Service": { "Service": "pg—${match(1)}", "Failover": { "NearestN": 3, "Datacenters": ["dc1", "dc2"] }, "OnlyPassing": true, "Tags": ["${match(2)}"] } }' localhost:8500/v1/query geo-db-customer-leader.query.consul geo-db-customer-follower.query.consul geo-db-billing-follower.query.consul leader.pg-customer.service.consul follower.pg-customer.service.consul follower.pg-billing.service.consul
  • 65. Catch All Template $ curl -X POST -d '{ "Name": "", "Template": { "Type": "name_prefix_match" }, "Service": { "Service": "${name.full}", "Failover": { "NearestN": 3 } } }' localhost:8500/v1/query *.query.consul With a single query template, all services can fail over to the nearest healthy service in a different datacenter!
  • 66. Under the Hood: Network Tomography • Rides on pings that are part of LAN and WAN gossip • Models networking round trip time using simple physics simulation with masses and springs • Develops a set of “network coordinates” for round trip time estimation with a simple calculation
  • 67. Under the Hood: Network Tomography
  • 69. HASHICORP Key Value Store HTTP API Host & Service Level Health Checks Datacenter Aware Consul solves four central challenges with SOA Service Discovery HTTP + DNS
  • 70. HASHICORP Further reading - Consul vs. Other Software: consul.io/intro/vs/index.html - Consul Agent: consul.io/docs/agent/basics.html - Consul Commands: consul.io/docs/commands/index.html - Consul Internals: consul.io/docs/internals/index.html