Позвольте представить Spilo — отказоустойчивый PostgreSQL кластер.
Последние несколько лет в компании Zalando происходила постепенная децентрализация разработки приложений. Этот процесс затронул и базы данных: часть задач по их обслуживанию была передана командам разработчиков, многие из которых не имеют опыта администрирования СУБД. В таких условиях создание и обслуживание надежных PostgreSQL баз данных должно быть предельно упрощено. Для этого мы придумали Spilo (Спило) — отказоустойчивый PostgreSQL кластер.
В докладе я расскажу о том, как наша инфраструктура, основанная на Splio, упрощает типичные задачи управления PostgreSQL кластером, сохраняя при этом контроль за ним в руках разработчиков. Spilo представляет из себя систему с несколькими репликами, основанную на потоковой репликации PostgreSQL. Для ее надежной работы не требуется вмешательство оператора даже в случае аварии. Spilo берет на себя задачи добавления новых реплик в случае отказа существующих, а также своевременного создания резервных копий на основе механизма PITR (point in time recovery). Логика отказоустойчивого кластера реализуется с помощью собственной open-source разработки Zalando — Patroni (https://github.com/zalando/patroni) — программы, основанной на Compose Governor, берущей на себя задачи определения, является ли данный узел мастером или репликой, и использующей системы распределенного консенсуса, такие как Zookeeper или etcd, для предотвращения split brain.
Я покажу, как Spilo встраивает Patroni в архитектуру облачных сервисов, например, AWS, добавляя масштабирование для автоматизации запуска отказоустойчивых кластеров. Простота запуска Spilo кластеров основана на STUPS — открытой системе “платформа как сервис” (PAAS) для предоставления автономным командам разработчиков облачных ресурсов AWS с возможностью аудита их использования. Используя Spilo и STUPS наши инженеры способны создать отказоустойчивый PostgreSQL кластер с произвольным количеством узлов с помощью нескольких команд.
Слушатели этого доклада получат представление о том, как использовать Spilo, Patroni и STUPS для эффективного управления своими PostgreSQL кластерами.
17. Autonomous teams
• Team decides which product to
build
• … and which technologies to use
• REST/OAuth2 mandatory
• Team is responsible for its
infrastructure
36. Distributed configuration systems
• Fault tolerant
• Reliably store small amounts of
strongly-consistent data
between distributed nodes
• Good for storing the PostgreSQL
cluster state
39. Cluster state in etcd
$ etcdctl ls --recursive
/service
/service/batman
/service/batman/optime
/service/batman/optime/leader
/service/batman/members
/service/batman/members/postgresql0
/service/batman/members/postgresql1
/service/batman/initialize
/service/batman/leader
40. Leader key
$ etcdctl get /service/batman/leader
postgresql0
• Points to the member key
• Has a TTL, autoexpires
• Acts as an exclusive lock
• Only the leader can become
the master
42. Member key
$ etcdctl get /service/batman/members/
postgresql0
{“role":"master",
“state”:"running",
“conn_url”:"postgres://replicator:rep-
pass@127.0.0.1:5432/postgres",
“api_url”:"http://127.0.0.1:8008/
patroni",
"xlog_location":67108960}
43. Connection and API URL
c
Patroni
c
Patroni
API URL
(check health
during promotion)
MASTER
REPLICA
CONNECTION URL
MASTER LB
REPLICA LB
CONNECTION URL
44. Initialize key
$ etcdctl get /service/batman/initialize
6208852353820383446
• PostgreSQL cluster system ID
• Created by the first node that
joins the cluster
• Nodes with different system
ID are not allowed to join