Errores comunes al crear clústeres de alta disponibilidad y cómo evitarlos. Alexander Kukushkin



Acaba de instalar PostgreSQL e inició su primer clúster, creó algunas tablas, cargó datos e incluso modificó un poco la configuración de PostgreSQL para mejorar el rendimiento. Ahora está pensando en cómo hacer que su clúster esté altamente disponible. Desafortunadamente, PostgreSQL no sabe cómo cambiarse automáticamente cuando el asistente no está disponible, pero afortunadamente para nosotros, esto se puede lograr utilizando utilidades de terceros. La tarea es clara y empiezas a estudiar las ventajas y desventajas de todas las utilidades para elegir la mejor. Y ... ya está en el camino equivocado porque primero debe decidir los valores SLA, RTO y RPO. En esta charla, planeo cubrir una serie de errores que los administradores de bases de datos cometen al configurar y operar un clúster de Postgres de conmutación por error automática de alta disponibilidad.





! . 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? , , .



Nada mal.



¿Planea integrar las métricas que Patroni ahora le está devolviendo a Patroni slash en json en formato Prometheus o no?



Básicamente, Patroni es un proyecto de código abierto. Si lo desea, puede implementar, realizar una solicitud de extracción. Estaré feliz de verlo y golpearlo.



¡Gracias!



Incluso, en mi opinión, se abrió un boleto por esta cuenta.



¡No más preguntas, gracias a todos!




All Articles