Vous venez d'installer PostgreSQL et de démarrer votre premier cluster, de créer des tables, de charger des données et même d'ajuster un peu la configuration de PostgreSQL pour améliorer les performances. Vous réfléchissez maintenant à la manière de rendre votre cluster hautement disponible. Malheureusement, PostgreSQL ne sait pas comment basculer automatiquement lorsque l'assistant n'est pas disponible, mais heureusement pour nous, cela peut être réalisé en utilisant des utilitaires tiers. La tâche est claire et vous commencez à étudier les avantages et les inconvénients de tous les utilitaires afin de choisir le meilleur. Et… vous êtes déjà sur la mauvaise voie car vous devez d'abord décider des valeurs SLA, RTO et RPO. Dans cet exposé, je prévois de parler d'un certain nombre d'erreurs commises par les administrateurs de base de données lors de la configuration et de l'exploitation d'un cluster Postgres à basculement automatique hautement disponible.
! . 6 . Zalando. , high availability postgres’ Patroni.
, , Zalando. , Lamoda. .
Postgres. -.
4- Amazon. Amazon. , , . Amazon EC2 instances, Kubernetes, EC2 instances.
, - . - high availability. , , high availability disaster recovery, .
, , high availability failover.
, . , , .
, HA , , . .
( ?). HA?
. ? . , . , , , .. . .
. - , , , , , BIOS - .
downtime. - , . , , - , : . . . , , . . . , , update delete where clause. , .
. . , --.
, , – . . 15 .
99,95 %, . . . ? , , Amazon, RDS, . , , , , .
, .
, . . , Google Amazon , , .
- ? . IBM, . , .
, , - - . - agreed.
? , level an agreed. , . . , , , , , . . - , , .
, , - level indication. , availability. level objective – , . , . .. , availability , , . , , - .
, .
:
- .
- .
- - .
- .
- .
? . disaster recovery, .. .
HA, . - .
DBA , -. , - disaster, .
. RPO (recovery point objective), . ., . RTO (recovery time objective). .
, SLA, SLI, SLA , . RTO – .
https://en.wikipedia.org/wiki/File:RPO_RTO_example_converted.png
disaster recovery. RPO, RTO. . RTO ( ).
, . , . , .
, , , . PostgreSQL ( ), . - (), .
RPO RTO – . . . , , .
Postgres? , failover . , - . Postgres.
, - archive command. - -. . . , Postgres WAL - -. , -, archive_timeout , . . , . - , , 5 30 , .
pg_receivewal - . , . archive_command.
, - , . , , .
, , Postgres . , - . , , , . Zalando - , . , - , , .
RTO . , , RTO , 15 , failover , , . . . - , DBA. , . , - . , - , DBA .
, failover.
- failover, . , , . . , availability, .
- , – , , - . , , - .
. , . . - . RPO RTO.
?
: « . . , . ».
Postgres? PostgreSQL XC/XL. , – global transaction manager. . - global transaction manager.
BDR . - . , – eventual consistency. , - . , . , , - , . - .
Eventual consistency – - . . . . . , , - , .
Postgres Pro. - . ? – . – , , . . . latency . , , , . , , , , , .
?
-, quorum. Quorum . . . . Google, : « Google ?». : «, ». ? - Google, , , . quorum .
, , — fencing. - , , . , , STONITH (Shoot The Other Node In The Head) , . . - , , .
. - switch . . - .
– watchdog. , Postgres, , , , .
Linux watchdog, . , - , , split-brain.
quorum, fencing, watchdog ? . . , GitHub.
https://github.com/MasahikoSawada/pg_keeper
? , - , slave, . , slave.
? network split, . . . slave . – split-brain.
, . Masahiko Sawada. , .
? - , primary, standby, , .
, – . , . , , .
, - network split, standby. .
standby. . . fencing . , , , , - , .
- , quorum. Quorum , , , , Etcd, , . . Patroni. Patroni Etcd, (), .
, Etcd, standby , .
.
https://gocardless.com/blog/incident-review-api-and-dashboard-outage-on-10th-october/
– , , . GoCardless. Corosync + Pacemaker. , , .
Pacemaker quorum. IP , , watchdog. , , .
? RAID-. , . ? , () , Pacemaker , . . , .
, , , postgres’ . crash recovery, , failover .
, Pacemaker. , Pacemaker .
.
? ?
, , , . . . , Airbus A380. . - , .
, postgres’ , , . .
- , , . , , . .
https://github.blog/2018-10-30-oct21-post-incident-analysis/
. . GitHub, Postgres , .
GitHub -. , . . . , , , . , Jobs GitHub.com . Latency - 60 .
? . . , .
Jobs GitHub.com , , 60 . . . , , ( ).
, , . , , . .
? Failover . failover, , , , .
. Pg_rewind . MySQL, , . Postgres , .
https://about.gitlab.com/blog/2017/02/10/postmortem-of-database-outage-of-january-31/
, . GitLab. . .
- , . . WAL- , , .
pg_basebackup. pg_basebackup, . Ctrl+C, PGDATA, – .
? pg_basebackup checkpoint spread, . . , checkpoint. verbose mode, pg_basebackup.
- .
? , , . .
Pg_dump, , . , , , c . - , Postgres , , pg_dump .
Postgres, pg_dump. . 9.5, pg_dump 9.2 9.5. . . , .
– Microsoft Azure. , - , .
– LVM, . , staging. , – , . , .
. 6 . . . , . 24 . , , 6- .
?
RPO RTO , .
, - , , RPO 24 , .
. , .
, . Runbooks. , - . – pg_basebackup , .
, , . pg_basebackup , , . , . disaster.
, . . , .
, .
. , Patroni , . . CPU, . ., , , . , , . , , checkpoints . . .
. , alert. RTO ( : RTO, RPO) , , . . , Postgres, , . .
: « Patroni postgres’ ?». Patroni, , max connections , , .
Linux, huge pages, shared memory, semaphores, overcommit . .
Patroni postgres’ , . . shared_buffers, max_wal_size, checkpoint completion_target, random_page_cost . . . , , .
.
. RPO RTO. .
, RTO, , , HA, , , .
availability, . .
, , , .
. , . . disaster recovery .
. , ! , .
Questions
. , . , . . , HA . , . -. . . . disaster recovery – .
. , , , . , , , . , . .
, , . . , , , . – 100 % .
IBM, , .
, 99,99. .
, , . : IBM , . , . . , .
, , 10 .
, , . .
. , – . , . , . . .
switch - , . .
?
.
, , , switches?
, , .
, Patroni. , , - , . Patroni ?
Patroni recovery.conf . recovery_min_apply_delay, . Patroni – load balancing , , , stale . failover .
, !
! . , , , HA? , , witness. . Witness – . . . ?
, . , quorum. Quorum – . , . , . , . , . Postgres. . . -, quorum.
!
! , Zalando, , Amazon. , Amazon , ?*
, . - – . - . . . . , , . , . , , , . Amazon . . , . . . . Amazon .
, - , . , .
! . , Patroni? , , .
Rien de mal.
Envisagez-vous d'intégrer les métriques que Patroni redonne désormais à Patroni slash en json au format Prometheus ou pas?
Fondamentalement, Patroni est un projet open source. Si vous le souhaitez, vous pouvez implémenter, faire une pull request. Je serai heureux de le regarder et de le frapper.
Merci!
Là même un ticket, à mon avis, a été ouvert sur ce compte.
Plus de questions, merci à tous!