Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

Основная Ρ†Π΅Π»ΡŒ Patroni β€” это обСспСчСниС High Availability для PostgreSQL. Но Patroni β€” это лишь template, Π° Π½Π΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ инструмСнт (Ρ‡Ρ‚ΠΎ, Π² ΠΎΠ±Ρ‰Π΅ΠΌ, ΠΈ сказано Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ). На ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд, настроив Patroni Π² тСстовой Π»Π°Π±Π΅, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ это прСкрасный инструмСнт ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ Π»Π΅Π³ΠΊΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ наши ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ Ρ€Π°Π·Π²Π°Π»ΠΈΡ‚ΡŒ кластСр. Однако Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ Π² производствСнной срСдС, Π½Π΅ всСгда всё происходит Ρ‚Π°ΠΊ красиво ΠΈ элСгантно, ΠΊΠ°ΠΊ Π² тСстовой Π»Π°Π±Π΅.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

РасскаТу Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎ сСбя. Π― Π½Π°Ρ‡ΠΈΠ½Π°Π» систСмным администратором. Π Π°Π±ΠΎΡ‚Π°Π» Π² Π²Π΅Π±-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅. Π‘ 2014-Π³ΠΎ Π³ΠΎΠ΄Π° Ρ€Π°Π±ΠΎΡ‚Π°ΡŽ Π² Data Egret. Компания занимаСтся консалтингом Π² сфСрС Postgres. И ΠΌΡ‹ обслуТиваСм ΠΈΠΌΠ΅Π½Π½ΠΎ Postgres, ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ дСнь Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ с Postgres, поэтому Ρƒ нас Π΅ΡΡ‚ΡŒ разная экспСртиза, связанная с эксплуатациСй.

И Π² ΠΊΠΎΠ½Ρ†Π΅ 2018-Π³ΠΎ Π³ΠΎΠ΄Π° ΠΌΡ‹ Π½Π°Ρ‡Π°Π»ΠΈ ΠΏΠΎΡ‚ΠΈΡ…ΠΎΠ½ΡŒΠΊΡƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Patroni. И накопился ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΎΠΏΡ‹Ρ‚. ΠœΡ‹ ΠΊΠ°ΠΊ-Ρ‚ΠΎ диагностировали Π΅Π³ΠΎ, Ρ‚ΡŽΠ½ΠΈΠ»ΠΈ, ΠΏΡ€ΠΈΡˆΠ»ΠΈ ΠΊ своим best practices. И Π² этом Π΄ΠΎΠΊΠ»Π°Π΄Π΅ я Π±ΡƒΠ΄Ρƒ ΠΎ Π½ΠΈΡ… Ρ€Π°ΡΡΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ.

Помимо Postgres я люблю Linux. Π›ΡŽΠ±Π»ΡŽ Π² Π½Π΅ΠΌ ΠΊΠΎΠ²Ρ‹Ρ€ΡΡ‚ΡŒΡΡ ΠΈ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ, люблю ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ ядра. Π›ΡŽΠ±Π»ΡŽ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ, ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹, Π΄ΠΎΠΊΠ΅Ρ€, Kubernetes. МСня это всС интСрСсуСт, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΡΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ старыС админскиС ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡ΠΊΠΈ. Π›ΡŽΠ±Π»ΡŽ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ с ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π°ΠΌΠΈ. И люблю postgres’овыС Π²Π΅Ρ‰ΠΈ, связанныС с админством, Ρ‚. Π΅. рСпликация, Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ΅ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. И Π² свободноС врСмя ΠΏΠΈΡˆΡƒ Π½Π° Go. НС являюсь software engineer, просто для сСбя ΠΏΠΈΡˆΡƒ Π½Π° Go. И ΠΌΠ½Π΅ это доставляСт ΡƒΠ΄ΠΎΠ²ΠΎΠ»ΡŒΡΡ‚Π²ΠΈΠ΅.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

  • Π― Π΄ΡƒΠΌΠ°ΡŽ, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· вас Π·Π½Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ Π² Postgres Π½Π΅Ρ‚ HA (High Availability) ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ HA, Π½ΡƒΠΆΠ½ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ, Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΡ‚ΡŒ усилия ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ это.
  • Π•ΡΡ‚ΡŒ нСсколько инструмСнтов ΠΈ Patroni – это ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ HA довольно-Ρ‚Π°ΠΊΠΈ ΠΊΡ€ΡƒΡ‚ΠΎ ΠΈ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ. Но поставив это всС Π² тСстовой Π»Π°Π±Π΅ ΠΈ запустив, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ это всС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΎΡΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ Patroni ΠΈΡ… обслуТиваСт. И ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ всС это прСкрасно Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.
  • Но Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ΠΌΡ‹ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Π»ΠΈΡΡŒ с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ. И ΠΏΡ€ΠΎ эти ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ я Π±ΡƒΠ΄Ρƒ Ρ€Π°ΡΡΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ.
  • РасскаТу, ΠΊΠ°ΠΊ ΠΌΡ‹ это диагностировали, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΊΡ€ΡƒΡ‡ΠΈΠ²Π°Π»ΠΈ – ΠΏΠΎΠΌΠΎΠ³Π»ΠΎ Π»ΠΈ это Π½Π°ΠΌ ΠΈΠ»ΠΈ Π½Π΅ ΠΏΠΎΠΌΠΎΠ³Π»ΠΎ.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

  • Π― Π½Π΅ Π±ΡƒΠ΄Ρƒ Ρ€Π°ΡΡΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Patroni, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π³ΡƒΠ³Π»ΠΈΡ‚ΡŒ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ это всС запускаСтся, ΠΊΠ°ΠΊ настраиваСтся. МоТно Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² схСмах, Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ…, найдя ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± этом Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅.
  • НС Π±ΡƒΠ΄Ρƒ Ρ€Π°ΡΡΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎ Ρ‡ΡƒΠΆΠΎΠΉ ΠΎΠΏΡ‹Ρ‚. Π‘ΡƒΠ΄Ρƒ Ρ€Π°ΡΡΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎ Ρ‚Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΌΡ‹.
  • И Π½Π΅ Π±ΡƒΠ΄Ρƒ Ρ€Π°ΡΡΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ Patroni ΠΈ PostgreSQL. Если, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, связанныС с балансировкой, ΠΊΠΎΠ³Π΄Π° Ρƒ нас кластСр развалился, я ΠΏΡ€ΠΎ это Ρ€Π°ΡΡΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π΅ Π±ΡƒΠ΄Ρƒ.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

И нСбольшой disclaimer ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ Π½Π°Ρ‡Π°Ρ‚ΡŒ наш Π΄ΠΎΠΊΠ»Π°Π΄.

ВсС эти ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΌΡ‹ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ, ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ Ρƒ нас Π² ΠΏΠ΅Ρ€Π²Ρ‹Π΅ 6-7-8 мСсяцСв эксплуатации. Π‘ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΌΡ‹ ΠΏΡ€ΠΈΡˆΠ»ΠΈ ΠΊ своим Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌ best practices. И ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Ρƒ нас исчСзли. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π΄ΠΎΠΊΠ»Π°Π΄ заявлялся Π³Π΄Π΅-Ρ‚ΠΎ ΠΏΠΎΠ»Π³ΠΎΠ΄Π° Π½Π°Π·Π°Π΄, ΠΊΠΎΠ³Π΄Π° это всС Π±Ρ‹Π»ΠΎ свСТо Π² Π³ΠΎΠ»ΠΎΠ²Π΅ ΠΈ я это всС прСкрасно ΠΏΠΎΠΌΠ½ΠΈΠ».

По Ρ…ΠΎΠ΄Ρƒ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ Π΄ΠΎΠΊΠ»Π°Π΄Π° я ΡƒΠΆΠ΅ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π» старыС постмортСмы, смотрСл Π»ΠΎΠ³ΠΈ. И Ρ‡Π°ΡΡ‚ΡŒ Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ ΠΌΠΎΠ³Π»Π° Π·Π°Π±Ρ‹Ρ‚ΡŒΡΡ, Π»ΠΈΠ±ΠΎ Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΡ…-Ρ‚ΠΎ Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ доисслСдована Π² Ρ…ΠΎΠ΄Π΅ Ρ€Π°Π·Π±ΠΎΡ€Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, поэтому Π² ΠΊΠ°ΠΊΠΈΡ…-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ рассмотрСны Π½Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ, Π»ΠΈΠ±ΠΎ Π΅ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ нСдостаток ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. И поэтому ΠΏΡ€ΠΎΡˆΡƒ мСня Π·Π° этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΈΠ·Π²ΠΈΠ½ΠΈΡ‚ΡŒ.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Patroni?

  • Π­Ρ‚ΠΎ шаблон для построСния HA. Π’Π°ΠΊ написано Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. И с ΠΌΠΎΠ΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния, это ΠΎΡ‡Π΅Π½ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ ΡƒΡ‚ΠΎΡ‡Π½Π΅Π½ΠΈΠ΅. Patroni – это Π½Π΅ сСрСбрянная пуля, которая Ρ€Π΅ΡˆΠΈΡ‚ всС ваши ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, Ρ‚. Π΅. Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΡ‚ΡŒ усилиС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΎ Π½Π°Ρ‡Π°Π»ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈ ΠΏΡ€ΠΈΠ½ΠΎΡΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·Ρƒ.
  • Π­Ρ‚ΠΎ агСнтская слуТба, которая устанавливаСтся Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ сСрвисС с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΠΎΠΉ, ΠΈ которая являСтся своСго Ρ€ΠΎΠ΄Π° init-систСмой для вашСго Postgres. Она запускаСт Postgres, останавливаСт, пСрСзапускаСт, мСняСт ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ ΠΈ мСняСт Ρ‚ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡŽ вашСго кластСра.
  • БоотвСтствСнно, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ состояниС кластСра, Π΅Π³ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ прСдставлСниС, ΠΊΠ°ΠΊ ΠΎΠ½ выглядит, Π½ΡƒΠΆΠ½ΠΎ ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅. И с этой Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Patroni пошСл ΠΏΠΎ ΠΏΡƒΡ‚ΠΈ хранСния state Π²ΠΎ внСшнСй систСмС. Π­Ρ‚ΠΎ систСма распрСдСлСнного Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ. Π­Ρ‚ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Etcd, Consul, ZooKeeper, Π»ΠΈΠ±ΠΎ kubernetes’кий Etcd, Ρ‚. Π΅. ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΈΠ· этих Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ².
  • И ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· особСнностСй Patroni – это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π°Π²Ρ‚ΠΎΡ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΅Π³ΠΎ настроив. Если Π²Π·ΡΡ‚ΡŒ для сравнСния Repmgr, Ρ‚ΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€ Ρ‚Π°ΠΌ ΠΈΠ΄Π΅Ρ‚ Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚Π΅. Π‘ Repmgr ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ switchover, Π½ΠΎ Ссли Ρ…ΠΎΡ‚ΠΈΠΌ Π°Π²Ρ‚ΠΎΡ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€, Ρ‚ΠΎ Π΅Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ. Π’ Patroni ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ Π°Π²Ρ‚ΠΎΡ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€ ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ.
  • И Π΅ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Π΅Ρ‰Π΅ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²Π΅Ρ‰Π΅ΠΉ. НапримСр, обслуТиваниС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ, Π½Π°Π»ΠΈΠ²ΠΊΠ° Π½ΠΎΠ²Ρ‹Ρ… Ρ€Π΅ΠΏΠ»ΠΈΠΊ, Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ΅ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Ρ‚. Π΄. Но это Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ Π΄ΠΎΠΊΠ»Π°Π΄Π°, ΠΏΡ€ΠΎ это я Ρ€Π°ΡΡΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π΅ Π±ΡƒΠ΄Ρƒ.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

И нСбольшой ΠΈΡ‚ΠΎΠ³ – это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ основная Π·Π°Π΄Π°Ρ‡Π° Patroni – это Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΈ Π½Π°Π΄Π΅ΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Π°Π²Ρ‚ΠΎΡ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ кластСр Ρƒ нас оставался работоспособным ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ Π·Π°ΠΌΠ΅Ρ‡Π°Π»ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Ρ‚ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΠΈ кластСра.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

Но ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Patroni, наша систСма становится Ρ‡ΡƒΡ‚ΡŒ слоТнСС. Если Ρ€Π°Π½ΡŒΡˆΠ΅ Ρƒ нас Π±Ρ‹Π» Postgres, Ρ‚ΠΎ ΠΏΡ€ΠΈ использовании Patroni ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ сам Patroni, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ DCS, Π³Π΄Π΅ хранится state. И всС это Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΊΠ°ΠΊ-Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΠΎΠΌΠ°Ρ‚ΡŒΡΡ?

ΠœΠΎΠΆΠ΅Ρ‚ ΡΠ»ΠΎΠΌΠ°Ρ‚ΡŒΡΡ:

  • ΠœΠΎΠΆΠ΅Ρ‚ ΡΠ»ΠΎΠΌΠ°Ρ‚ΡŒΡΡ Postgres. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ мастСр ΠΈΠ»ΠΈ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°, Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΈΠ· Π½ΠΈΡ… ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΉΡ‚ΠΈ ΠΈΠ· строя.
  • ΠœΠΎΠΆΠ΅Ρ‚ ΡΠ»ΠΎΠΌΠ°Ρ‚ΡŒΡΡ сам Patroni.
  • ΠœΠΎΠΆΠ΅Ρ‚ ΡΠ»ΠΎΠΌΠ°Ρ‚ΡŒΡΡ DCS, Π³Π΄Π΅ хранится state.
  • И ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΠΎΠΌΠ°Ρ‚ΡŒΡΡ ΡΠ΅Ρ‚ΡŒ.

ВсС эти ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ я Π±ΡƒΠ΄Ρƒ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Π² Π΄ΠΎΠΊΠ»Π°Π΄Π΅.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

Π― Π±ΡƒΠ΄Ρƒ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ случаи ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ ΠΈΡ… услоТнСния, Π½Π΅ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния, Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎ кСйс Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². А с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΡΡƒΠ±ΡŠΠ΅ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΎΡ‰ΡƒΡ‰Π΅Π½ΠΈΠΉ, Ρ‡Ρ‚ΠΎ этот кСйс Π±Ρ‹Π» для мСня слоТный, Π΅Π³ΠΎ Π±Ρ‹Π»ΠΎ слоТно Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒβ€¦ ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ кСйс Π±Ρ‹Π» Π»Π΅Π³ΠΊΠΈΠΉ ΠΈ Π΅Π³ΠΎ Π±Ρ‹Π»ΠΎ Π»Π΅Π³ΠΊΠΎ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒ.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

И ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ случай самый простой. Π­Ρ‚ΠΎ Ρ‚ΠΎΡ‚ случай, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ взяли кластСр Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π½Π° этом ΠΆΠ΅ кластСрС Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΠ»ΠΈ нашС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ DCS. Π­Ρ‚ΠΎ самая распространСнная ошибка. Π­Ρ‚ΠΎ ошибка построСния Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€, Ρ‚. Π΅. совмСщСниС Ρ€Π°Π·Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС.

Π˜Ρ‚Π°ΠΊ, ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π» Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€, ΠΈΠ΄Π΅ΠΌ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

И здСсь нас интСрСсуСт, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π» Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€. Π’. Π΅. нас интСрСсуСт Π²ΠΎΡ‚ этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ состояния кластСра.

Но Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€ Π½Π΅ всСгда ΠΎΠ΄Π½ΠΎΠΌΠΎΠΌΠ΅Π½Ρ‚Π½Ρ‹ΠΉ, Ρ‚. Π΅. ΠΎΠ½ Π½Π΅ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Ρ‚ΡΠ½ΡƒΡ‚ΡŒΡΡ. Он ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ρƒ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ врСмя Π½Π°Ρ‡Π°Π»Π° ΠΈ врСмя Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ, Ρ‚. Π΅. это ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ событиС. И ΠΌΡ‹ Π΄Π΅Π»ΠΈΠΌ всС события Π½Π° Ρ‚Ρ€ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π°: Ρƒ нас Π΅ΡΡ‚ΡŒ врСмя Π΄ΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€Π°, Π²ΠΎ врСмя Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€Π° ΠΈ послС Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€Π°. Π’. Π΅. ΠΌΡ‹ рассматриваСм всС события Π² этой Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ шкалС.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

И ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π΄Π΅Π»ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π» Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€, ΠΌΡ‹ ΠΈΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρƒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ, Ρ‡Ρ‚ΠΎ стало ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π»ΠΎ ΠΊ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€Ρƒ.

Если ΠΌΡ‹ посмотрим Π½Π° Π»ΠΎΠ³ΠΈ, Ρ‚ΠΎ это Π±ΡƒΠ΄ΡƒΡ‚ классичСскиС Π»ΠΎΠ³ΠΈ Patroni. Он Π² Π½ΠΈΡ… Π½Π°ΠΌ сообщаСт, Ρ‡Ρ‚ΠΎ сСрвСр стал мастСром, ΠΈ Ρ€ΠΎΠ»ΡŒ мастСра ΠΏΠ΅Ρ€Π΅ΡˆΠ»Π° Π½Π° этот ΡƒΠ·Π΅Π». Π’ΡƒΡ‚ это подсвСчСно.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

Π”Π°Π»ΡŒΡˆΠ΅ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π» Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€, Ρ‚. Π΅. ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΈ события, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ заставили Ρ€ΠΎΠ»ΡŒ мастСра ΠΏΠ΅Ρ€Π΅Π΅Ρ…Π°Ρ‚ΡŒ с ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ. И Π² Π΄Π°Π½Π½ΠΎΠΌ случаС здСсь всС просто. Π£ нас Π΅ΡΡ‚ΡŒ ошибка взаимодСйствия с систСмой хранСния. ΠœΠ°ΡΡ‚Π΅Ρ€ понял, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с DCS, Ρ‚. Π΅. Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° какая-Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с взаимодСйствиСм. И ΠΎΠ½ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ большС мастСром ΠΈ слагаСт с сСбя полномочия. Π’ΠΎΡ‚ эта строчка Β«demoted selfΒ» Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ± этом.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

Если ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° события, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΠΎΠ²Π°Π»ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€Ρƒ, Ρ‚ΠΎ ΠΌΡ‹ Ρ‚Π°ΠΌ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ‚Π΅ самыС ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ послуТили ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ для продолТСния Ρ€Π°Π±ΠΎΡ‚Ρ‹ мастСра.

Если ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° Π»ΠΎΠ³ΠΈ Patroni, Ρ‚ΠΎ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ масса всяких ошибок, Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚ΠΎΠ², Ρ‚. Π΅. Π°Π³Π΅Π½Ρ‚ Patroni Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с DCS. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС это Consul agent, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΈΠ΄Π΅Ρ‚ ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΏΠΎΡ€Ρ‚Ρƒ 8500.

И ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° здСсь Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Patroni ΠΈ Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… Π·Π°ΠΏΡƒΡ‰Π΅Π½Ρ‹ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ хостС. И Π½Π° этом ΠΆΠ΅ ΡƒΠ·Π»Π΅ Π±Ρ‹Π»ΠΈ Π·Π°ΠΏΡƒΡ‰Π΅Π½Ρ‹ Consul-сСрвСра. Π‘ΠΎΠ·Π΄Π°Π² Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π° сСрвСрС, ΠΌΡ‹ создали ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΈ для сСрвСров Consul. Они Π½Π΅ смогли Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ ΠΎΠ±Ρ‰Π°Ρ‚ΡŒΡΡ.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

Π§Π΅Ρ€Π΅Π· ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ врСмя, ΠΊΠΎΠ³Π΄Π° Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° спала, наш Patroni смог снова ΠΎΠ±Ρ‰Π°Ρ‚ΡŒΡΡ с Π°Π³Π΅Π½Ρ‚Π°ΠΌΠΈ. ΠΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ Ρ€Π°Π±ΠΎΡ‚Π° возобновилось. И Ρ‚ΠΎΡ‚ ΠΆΠ΅ самый сСрвСр Pgdb-2 снова стал мастСром. Π’. Π΅. Π±Ρ‹Π» нСбольшой Ρ„Π»ΠΈΠΏ, ΠΈΠ·-Π·Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΡƒΠ·Π΅Π» слоТил с сСбя полномочия мастСра, Π° ΠΏΠΎΡ‚ΠΎΠΌ снова ΠΈΡ… Π½Π° сСбя взял, Ρ‚. Π΅. всС Π²Π΅Ρ€Π½ΡƒΠ»ΠΎΡΡŒ, ΠΊΠ°ΠΊ Π±Ρ‹Π»ΠΎ.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

И это ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡ†Π΅Π½ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π»ΠΎΠΆΠ½ΡƒΡŽ сработку, Π»ΠΈΠ±ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡ†Π΅Π½ΠΈΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Patroni сдСлал всС ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ. Π’. Π΅. ΠΎΠ½ понял, Ρ‡Ρ‚ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ состояниС кластСра ΠΈ снял с сСбя полномочия.

И здСсь ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Consul-сСрвСра находятся Π½Π° Ρ‚ΠΎΠΌ ΠΆΠ΅ ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠΈ, Ρ‡Ρ‚ΠΎ ΠΈ Π±Π°Π·Ρ‹. БоотвСтствСнно, любая Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ°: Π±ΡƒΠ΄ΡŒ Ρ‚ΠΎ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π½Π° диски ΠΈΠ»ΠΈ процСссоры, ΠΎΠ½Π° Ρ‚Π°ΠΊΠΆΠ΅ влияСт Π½Π° взаимодСйствиС с кластСром Consul.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

И ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ это Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΆΠΈΡ‚ΡŒ вмСстС, ΠΌΡ‹ Π²Ρ‹Π΄Π΅Π»ΠΈΠ»ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ кластСр для Consul. И Patroni Ρ€Π°Π±ΠΎΡ‚Π°Π» ΡƒΠΆΠ΅ c ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ Consul’ΠΎΠΌ, Ρ‚. Π΅. Π±Ρ‹Π» ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ кластСр Postgres, ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ кластСр Consul. Π­Ρ‚ΠΎ базовая инструкция, ΠΊΠ°ΠΊ Π½ΡƒΠΆΠ½ΠΎ всС эти Π²Π΅Ρ‰ΠΈ Ρ€Π°Π·Π½ΠΎΡΠΈΡ‚ΡŒ ΠΈ Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΎ Π½Π΅ ΠΆΠΈΠ»ΠΎ вмСстС.

Как Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΊΡ€ΡƒΡ‚ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ttl, loop_wait, retry_timeout, Ρ‚. Π΅. ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ Π·Π° счСт увСличСния этих ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΏΠ΅Ρ€Π΅ΠΆΠΈΡ‚ΡŒ эти ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΏΠΈΠΊΠΈ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ. Но это Π½Π΅ самый подходящий Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π²ΠΎΡ‚ эта Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. И ΠΌΡ‹ просто Π²Ρ‹ΠΉΠ΄Π΅ΠΌ Π·Π° Π²ΠΎΡ‚ эти Π»ΠΈΠΌΠΈΡ‚Ρ‹ этих ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². И это ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ совсСм ΠΏΠΎΠΌΠΎΡ‡ΡŒ.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

ΠŸΠ΅Ρ€Π²Π°Ρ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, ΠΊΠ°ΠΊ Π²Ρ‹ поняли, простая. ΠœΡ‹ взяли ΠΈ DCS ΠΏΠΎΠ»ΠΎΠΆΠΈΠ»ΠΈ вмСстС с Π±Π°Π·ΠΎΠΉ, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

Вторая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΠΎΡ…ΠΎΠΆΠ° Π½Π° ΠΏΠ΅Ρ€Π²ΡƒΡŽ. Она ΠΏΠΎΡ…ΠΎΠΆΠ° Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ нас снова Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ взаимодСйствия с систСмой DCS.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

Если ΠΌΡ‹ посмотрим Π½Π° Π»ΠΎΠ³ΠΈ, Ρ‚ΠΎ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ нас снова ошибка ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΈ. И Patroni Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚, Ρ‡Ρ‚ΠΎ я Π½Π΅ ΠΌΠΎΠ³Ρƒ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с DCS, поэтому Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ мастСр ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π² Ρ€Π΅ΠΆΠΈΠΌ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ.

Π‘Ρ‚Π°Ρ€Ρ‹ΠΉ мастСр становится Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΎΠΉ, здСсь Patroni ΠΎΡ‚Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΎ. Он запускаСт pg_rewind, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΌΠΎΡ‚Π°Ρ‚ΡŒ ΠΆΡƒΡ€Π½Π°Π» Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΈ ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΊ Π½ΠΎΠ²ΠΎΠΌΡƒ мастСру, ΠΈ ΡƒΠΆΠ΅ Π΄ΠΎΠ³Π½Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ мастСр. Π’ΡƒΡ‚ Patroni ΠΎΡ‚Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ Π΅ΠΌΡƒ ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΎ.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°ΠΉΡ‚ΠΈ Ρ‚ΠΎ мСсто, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΠΎΠ²Π°Π»ΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€Ρƒ, Ρ‚. Π΅. Ρ‚Π΅ ошибки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ послуТили ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Ρƒ нас Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π». И Π² этом ΠΏΠ»Π°Π½Π΅ с Π»ΠΎΠ³Π°ΠΌΠΈ Patroni довольно ΡƒΠ΄ΠΎΠ±Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. Он с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΎΠΌ ΠΏΠΈΡˆΠ΅Ρ‚ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ сообщСния. И Ссли ΠΌΡ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ ΠΏΡ€ΠΎΠΌΠ°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ эти Π»ΠΎΠ³ΠΈ быстро, Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠΎ Π»ΠΎΠ³Π°ΠΌ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π»ΠΎΠ³ΠΈ помСнялись, Π·Π½Π°Ρ‡ΠΈΡ‚, ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π½Π°Ρ‡Π°Π»ΠΈΡΡŒ. ΠœΡ‹ быстро возвращаСмся Π½Π° это мСсто, смотрим, Ρ‡Ρ‚ΠΎ происходит.

И Π² Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ ситуации Π»ΠΎΠ³ΠΈ выглядят ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚ΡΡ Π²Π»Π°Π΄Π΅Π»Π΅Ρ† Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ. И Ссли Π²Π»Π°Π΄Π΅Π»Π΅Ρ†, допустим, помСнялся, Ρ‚ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°ΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ события, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Patroni Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡ‚Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Но Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Ρƒ нас всС Π² порядкС. ΠœΡ‹ ΠΈΡ‰Π΅ΠΌ Ρ‚ΠΎ мСсто, ΠΊΠΎΠ³Π΄Π° Π½Π°Ρ‡Π°Π»ΠΈΡΡŒ ошибки.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

И ΠΏΡ€ΠΎΠΌΠΎΡ‚Π°Π² Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ мСста, ΠΊΠΎΠ³Π΄Π° ошибки Π½Π°Ρ‡Π°Π»ΠΈ ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ, ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ нас ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π» Π°Π²Ρ‚ΠΎΡ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€. И Ρ€Π°Π· Ρƒ нас ошибки Π±Ρ‹Π»ΠΈ связаны с взаимодСйствиСм с DCS ΠΈ Π² нашСм случаС ΠΌΡ‹ использовали Consul, ΠΌΡ‹ Π·Π°ΠΎΠ΄Π½ΠΎ смотрим ΠΈ Π² Π»ΠΎΠ³ΠΈ Consul, Ρ‡Ρ‚ΠΎ происходило Ρ‚Π°ΠΌ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ сопоставив врСмя Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€Π° ΠΈ врСмя Π² Π»ΠΎΠ³Π°Ρ… Consul, ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ нас сосСди ΠΏΠΎ Consul-кластСру Π½Π°Ρ‡Π°Π»ΠΈ ΡΠΎΠΌΠ½Π΅Π²Π°Ρ‚ΡŒΡΡ Π² сущСствовании Π΄Ρ€ΡƒΠ³ΠΈΡ… участников Consul-кластСра.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

И Ссли Π΅Ρ‰Π΅ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° Π»ΠΎΠ³ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Consul-Π°Π³Π΅Π½Ρ‚ΠΎΠ², Ρ‚ΠΎ Ρ‚Π°ΠΌ Ρ‚ΠΎΠΆΠ΅ Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΌ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ сСтСвой коллапс происходит. И всС участники Consul-кластСра ΡΠΎΠΌΠ½Π΅Π²Π°ΡŽΡ‚ΡΡ Π² сущСствовании Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°. И это послуТило Ρ‚ΠΎΠ»Ρ‡ΠΊΠΎΠΌ ΠΊ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€Ρƒ.

Если ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ происходило Π΄ΠΎ этих ошибок, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ всякиС ошибки, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, deadline, RPC falled, Ρ‚. Π΅. явно какая-Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΡ€ΠΈ взаимодСйствии участников Consul-кластСра ΠΌΠ΅ΠΆΠ΄Ρƒ собой.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

Π‘Π°ΠΌΡ‹ΠΉ простой ΠΎΡ‚Π²Π΅Ρ‚ – это Ρ‡ΠΈΠ½ΠΈΡ‚ΡŒ ΡΠ΅Ρ‚ΡŒ. Но ΠΌΠ½Π΅, стоя Π½Π° Ρ‚Ρ€ΠΈΠ±ΡƒΠ½Π΅, Π»Π΅Π³ΠΊΠΎ ΠΎΠ± этом Π·Π°ΡΠ²Π»ΡΡ‚ΡŒ. Но ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π²Π° ΡΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ Π½Π΅ всСгда Π·Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ сСбС ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ Ρ‡ΠΈΠ½ΠΈΡ‚ΡŒ ΡΠ΅Ρ‚ΡŒ. Он ΠΌΠΎΠΆΠ΅Ρ‚ ΠΆΠΈΡ‚ΡŒ Π² Π”Π¦ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ возмоТностСй Ρ‡ΠΈΠ½ΠΈΡ‚ΡŒ ΡΠ΅Ρ‚ΡŒ, Π²Π»ΠΈΡΡ‚ΡŒ Π½Π° ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅. И поэтому Π½ΡƒΠΆΠ½Ρ‹ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Π΅ΡΡ‚ΡŒ:

  • Π‘Π°ΠΌΡ‹ΠΉ простой Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ написан, ΠΏΠΎ-ΠΌΠΎΠ΅ΠΌΡƒ, Π΄Π°ΠΆΠ΅ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, это ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Consul-ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, Ρ‚. Π΅. просто ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ пустой массив. И ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Consul-Π°Π³Π΅Π½Ρ‚Ρƒ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ. Π—Π° счСт этих ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ эти сСтСвыС ΡˆΡ‚ΠΎΡ€ΠΌΡ‹ ΠΈ Π½Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€.
  • Π”Ρ€ΡƒΠ³ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ – это ΠΏΠ΅Ρ€Π΅ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ raft_multiplier. Π­Ρ‚ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ самого Consul-сСрвСра. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΎΠ½ выставлСн Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 5. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π½ΠΎ ΠΏΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ для staging ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΉ. По сути это влияСт Π½Π° частоту ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями ΠΌΠ΅ΠΆΠ΄Ρƒ участниками Consul сСти. По сути, этот ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ влияСт Π½Π° скорости слуТСбного общСния ΠΌΠ΅ΠΆΠ΄Ρƒ участниками Consul-кластСра. И для production Π΅Π³ΠΎ ΡƒΠΆΠ΅ рСкомСндуСтся ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π»Ρ‹ Ρ‡Π°Ρ‰Π΅ обмСнивались сообщСниями.
  • Π”Ρ€ΡƒΠ³ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ стали ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, это ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π° Consul процСссов срСди ΠΏΡ€ΠΎΡ‡ΠΈΡ… процСссов для ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ° процСссов ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы. Π•ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Β«niceΒ», ΠΎΠ½ ΠΊΠ°ΠΊ Ρ€Π°Π· опрСдСляСт ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ процСссов ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ учитываСтся ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠΎΠΌ ОБ ΠΏΡ€ΠΈ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠœΡ‹ взяли ΠΈ Consul-Π°Π³Π΅Π½Ρ‚Π°ΠΌ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΠ»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ nice, Ρ‚.Π΅. повысили ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ опСрационная систСма Π΄Π°Π²Π°Π»Π° Consul процСссам большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΈ Π½Π° исполнСниС своСго ΠΊΠΎΠ΄Π°. Π’ нашСм случаС это Ρ€Π΅ΡˆΠΈΠ»ΠΎ Π½Π°ΡˆΡƒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ.
  • Π”Ρ€ΡƒΠ³ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ – это Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Consul. Π£ мСня Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ²Π°Ρ€ΠΈΡ‰, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ большой сторонник Etcd. И ΠΌΡ‹ с Π½ΠΈΠΌ рСгулярно спорим, Ρ‡Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ Etcd ΠΈΠ»ΠΈ Consul. Но Π² ΠΏΠ»Π°Π½Π΅, Ρ‡Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠ΅, ΠΌΡ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ с Π½ΠΈΠΌ сходимся Π²ΠΎ ΠΌΠ½Π΅Π½ΠΈΠΈ, Ρ‡Ρ‚ΠΎ Ρƒ Consul Π΅ΡΡ‚ΡŒ Π°Π³Π΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΡƒΡ‰Π΅Π½ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡƒΠ·Π»Π΅ с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…. Π’. Π΅. взаимодСйствиС Patroni с Consul-кластСром ΠΈΠ΄Π΅Ρ‚ Ρ‡Π΅Ρ€Π΅Π· этот Π°Π³Π΅Π½Ρ‚. И Π²ΠΎΡ‚ этот Π°Π³Π΅Π½Ρ‚ становится ΡƒΠ·ΠΊΠΈΠΌ мСстом. Если с Π°Π³Π΅Π½Ρ‚ΠΎΠΌ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ происходит, Ρ‚ΠΎ Patroni ΡƒΠΆΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Consul-кластСром. И это являСтся ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ. Π’ ΠΏΠ»Π°Π½Π΅ Etcd Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ Π°Π³Π΅Π½Ρ‚Π° Π½Π΅Ρ‚. Patroni ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ со списком Etcd-сСрвСров ΠΈ ΡƒΠΆΠ΅ ΠΎΠ±Ρ‰Π°Ρ‚ΡŒΡΡ с Π½ΠΈΠΌΠΈ. Π’ этом ΠΏΠ»Π°Π½Π΅, Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρƒ сСбя Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Etcd, Ρ‚ΠΎ Etcd Π±ΡƒΠ΄Π΅Ρ‚, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, Π»ΡƒΡ‡ΡˆΠΈΠΌ Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ, Ρ‡Π΅ΠΌ Consul. Но ΠΌΡ‹ Ρƒ Π½Π°ΡˆΠΈΡ… Π·Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊΠΎΠ² всСгда ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π±Ρ€Π°Π» ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρƒ сСбя ΠΊΠ»ΠΈΠ΅Π½Ρ‚. И Ρƒ нас ΠΏΠΎ большСй части Consul Ρƒ всСх ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ².
  • И послСдний ΠΏΡƒΠ½ΠΊΡ‚ – это ΠΏΠ΅Ρ€Π΅ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ значСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ΄Π½ΡΡ‚ΡŒ эти ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π² Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ сторону Π² Π½Π°Π΄Π΅ΠΆΠ΄Π΅, Ρ‡Ρ‚ΠΎ наши ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ сСтСвыС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΌΠΈ ΠΈ Π½Π΅ ΠΏΠΎΠΏΠ°Π΄ΡƒΡ‚ Π·Π° ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» этих ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Π°Π³Ρ€Π΅ΡΡΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Patroni Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π°Π²Ρ‚ΠΎΡ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€Π°, Ссли ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ сСтСвыС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

Π― Π΄ΡƒΠΌΠ°ΡŽ, ΠΌΠ½ΠΎΠ³ΠΈΠ΅, ΠΊΡ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Patroni, Π·Π½Π°ΠΊΠΎΠΌΡ‹ с этой ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС кластСра. И Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд эта ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ. Π£ нас Π΅ΡΡ‚ΡŒ мастСр, Ρƒ нас Π΅ΡΡ‚ΡŒ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°, Π»Π°Π³Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ Π½Π΅Ρ‚. Но эта ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Π° Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ Ρ€ΠΎΠ²Π½ΠΎ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΌΡ‹ Π½Π΅ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π² этом кластСрС Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Ρ‚Ρ€ΠΈ ΡƒΠ·Π»Π°, Π° Π½Π΅ Π΄Π²Π°.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

БоотвСтствСнно, ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π» Π°Π²Ρ‚ΠΎΡ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€. И послС этого Π°Π²Ρ‚ΠΎΡ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€Π° Ρƒ нас Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ° ΠΏΡ€ΠΎΠΏΠ°Π»Π°. Нам Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΎΠ½Π° ΠΏΡ€ΠΎΠΏΠ°Π»Π° ΠΈ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π΅Π΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ, Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ. И ΠΌΡ‹ снова ΠΈΠ΄Π΅ΠΌ Π² Π»ΠΎΠ³ΠΈ ΠΈ смотрим, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Ρƒ нас ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π» Π°Π²Ρ‚ΠΎΡ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС вторая Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ° стала мастСром. Π—Π΄Π΅ΡΡŒ всС Π² порядкС.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

И Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΡƒΠΆΠ΅ Π½Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΡƒ, которая ΠΎΡ‚Π²Π°Π»ΠΈΠ»Π°ΡΡŒ ΠΈ которая Π½Π΅ Π² кластСрС. ΠœΡ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ Π»ΠΎΠ³ΠΈ Patroni ΠΈ смотрим, Ρ‡Ρ‚ΠΎ Ρƒ нас Π² процСссС ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ кластСру Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π½Π° стадии pg_rewind. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΊ кластСру Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠΎΡ‚Π°Ρ‚ΡŒ ΠΆΡƒΡ€Π½Π°Π» Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, Π·Π°ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹ΠΉ ΠΆΡƒΡ€Π½Π°Π» Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ с мастСра ΠΈ ΠΏΠΎ Π½Π΅ΠΌΡƒ Π΄ΠΎΠ³Π½Π°Ρ‚ΡŒ мастСра.

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС Ρƒ нас Π½Π΅Ρ‚ ΠΆΡƒΡ€Π½Π°Π»Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ ΠΈ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒΡΡ. БоотвСтствСнно, ΠΌΡ‹ Postgres останавливаСм с ошибкой. И поэтому Π΅Π΅ Π½Π΅Ρ‚ Π² кластСрС.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

Надо ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π΅Π΅ Π½Π΅Ρ‚ Π² кластСрС ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π½Π΅ оказалось Π»ΠΎΠ³ΠΎΠ². ΠœΡ‹ ΠΈΠ΄Π΅ΠΌ Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ мастСр ΠΈ смотрим, Ρ‡Ρ‚ΠΎ Ρƒ Π½Π΅Π³ΠΎ Π² Π»ΠΎΠ³Π°Ρ…. ΠžΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° дСлался pg_rewind ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π» checkpoint. И Ρ‡Π°ΡΡ‚ΡŒ старых ΠΆΡƒΡ€Π½Π°Π»ΠΎΠ² Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ просто Π±Ρ‹Π»Π° ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π°. Когда старый мастСр попытался ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΊ Π½ΠΎΠ²ΠΎΠΌΡƒ мастСру ΠΈ Π·Π°ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ эти Π»ΠΎΠ³ΠΈ, ΠΎΠ½ΠΈ ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Ρ‹, ΠΈΡ… просто Π½Π΅ Π±Ρ‹Π»ΠΎ.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

Π― сравнивал timestamps, ΠΊΠΎΠ³Π΄Π° происходили эти события. И Ρ‚Π°ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ Π² 150 миллисСкунд, Ρ‚. Π΅. Π² 369 миллисСкунд Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»ΡΡ checkpoint, Π±Ρ‹Π»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Ρ‹ WAL-сСгмСнты. И Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ Π² 517 спустя 150 миллисСкунд запустился rewind Π½Π° старой Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ΅. Π’. Π΅. Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ 150 миллисСкунд Π½Π°ΠΌ Ρ…Π²Π°Ρ‚ΠΈΠ»ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ° Π½Π΅ смогла ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΈ Π·Π°Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

КакиС Π΅ΡΡ‚ΡŒ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹?

ΠœΡ‹ использовали ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ слоты Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ. Нам казалось, Ρ‡Ρ‚ΠΎ это Ρ…ΠΎΡ€ΠΎΡˆΠΎ. Π₯отя Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΌ этапС эксплуатации ΠΌΡ‹ слоты ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π»ΠΈ. Нам казалось, Ρ‡Ρ‚ΠΎ, Ссли слоты Π±ΡƒΠ΄ΡƒΡ‚ ΠΊΠΎΠΏΠΈΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ WAL-сСгмСнтов, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΡ€ΠΎΠ½ΠΈΡ‚ΡŒ мастСр. Он ΡƒΠΏΠ°Π΄Π΅Ρ‚. ΠœΡ‹ ΠΏΠΎΠΌΡƒΡ‡Π°Π»ΠΈΡΡŒ ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ врСмя Π±Π΅Π· слотов. И поняли, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ слоты Π½ΡƒΠΆΠ½Ρ‹, ΠΌΡ‹ Π²Π΅Ρ€Π½ΡƒΠ»ΠΈ слоты.

Но Ρ‚ΡƒΡ‚ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, Ρ‡Ρ‚ΠΎ, ΠΊΠΎΠ³Π΄Π° мастСр ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π² Ρ€Π΅ΠΏΠ»ΠΈΠΊΡƒ, ΠΎΠ½ удаляСт слоты ΠΈ вмСстС со слотами удаляСт WAL-сСгмСнты. И Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ появлСниС этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΏΠΎΠ΄Π½ΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ wal_keep_segments. Он ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 8 сСгмСнтов. ΠœΡ‹ подняли Π΄ΠΎ 1 000 ΠΈ посмотрСли, сколько Ρƒ нас свободного мСста. И ΠΌΡ‹ 16 Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚ ΠΏΠΎΠ΄Π°Ρ€ΠΈΠ»ΠΈ Π½Π° wal_keep_segments. Π’. Π΅. ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ Ρƒ нас всСгда Π½Π° всСх ΡƒΠ·Π»Π°Ρ… Π΅ΡΡ‚ΡŒ запас Π² 16 Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚ΠΎΠ² ΠΆΡƒΡ€Π½Π°Π»ΠΎΠ² Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ.

И плюс – это Π΅Ρ‰Π΅ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ для ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… maintenance Π·Π°Π΄Π°Ρ‡. Допустим, Π½Π°ΠΌ Π½Π°Π΄ΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΈΠ· Ρ€Π΅ΠΏΠ»ΠΈΠΊ. И ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π΅Π΅ Π²Ρ‹ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ. Нам Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ софт, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ систСму, Π΅Ρ‰Π΅ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ. И ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ Ρ€Π΅ΠΏΠ»ΠΈΠΊΡƒ, для этой Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ Ρ‚Π°ΠΊΠΆΠ΅ удаляСтся слот. И Ссли ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ малСнький wal_keep_segments, Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌ отсутствии Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ, ΠΆΡƒΡ€Π½Π°Π»Ρ‹ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ ΠΏΡ€ΠΎΠΈΠ³Ρ€Π°ΡŽΡ‚ΡΡ. ΠœΡ‹ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ΅ΠΌ Ρ€Π΅ΠΏΠ»ΠΈΠΊΡƒ, ΠΎΠ½Π° запросит Ρ‚Π΅ ΠΆΡƒΡ€Π½Π°Π»Ρ‹ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, Π³Π΄Π΅ ΠΎΠ½Π° ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΠ»Π°ΡΡŒ, Π½ΠΎ Π½Π° мастСрС ΠΈΡ… ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ. И Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ° Ρ‚ΠΎΠΆΠ΅ Π½Π΅ смоТСт ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ Π΄Π΅Ρ€ΠΆΠΈΠΌ большой запас ΠΆΡƒΡ€Π½Π°Π»ΠΎΠ².

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

Π£ нас Π΅ΡΡ‚ΡŒ production-Π±Π°Π·Π°. Π’Π°ΠΌ ΡƒΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹.

ΠŸΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π» Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€. ΠœΡ‹ зашли ΠΈ посмотрСли – всС Π² порядкС, Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ Π½Π° мСстС, Π»Π°Π³Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π½Π΅Ρ‚. Ошибок ΠΏΠΎ ΠΆΡƒΡ€Π½Π°Π»Π°ΠΌ Ρ‚ΠΎΠΆΠ΅ Π½Π΅Ρ‚, всС Π² порядкС.

ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ²Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ Π±Ρ‹ ΠΊΠ°ΠΊ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅, Π½ΠΎ ΠΌΡ‹ ΠΈΡ… ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ источнику Π²ΠΈΠ΄ΠΈΠΌ, Π° Π² Π±Π°Π·Π΅ ΠΌΡ‹ ΠΈΡ… Π½Π΅ Π²ΠΈΠ΄ΠΈΠΌ. И Π½Π°Π΄ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ с Π½ΠΈΠΌΠΈ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

ΠŸΠΎΠ½ΡΡ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ pg_rewind ΠΈΡ… Π·Π°Ρ‚Π΅Ρ€. ΠœΡ‹ сразу это поняли, Π½ΠΎ пошли ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ происходило.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

Π’ Π»ΠΎΠ³Π°Ρ… ΠΌΡ‹ всСгда ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΉΡ‚ΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π» Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€, ΠΊΡ‚ΠΎ стал мастСром ΠΈ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊΡ‚ΠΎ Π±Ρ‹Π» старым мастСром ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ Π·Π°Ρ…ΠΎΡ‚Π΅Π» ΡΡ‚Π°Ρ‚ΡŒ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΎΠΉ, Ρ‚. Π΅. Π½Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ Π²ΠΎΡ‚ эти Π»ΠΎΠ³ΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ Ρ‚ΠΎΡ‚ объСм ΠΆΡƒΡ€Π½Π°Π»ΠΎΠ² Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» потСрян.

Наш старый мастСр пСрСзагрузился. И Π² автозапускС Π±Ρ‹Π» прописан Patroni. Запустился Patroni. Он слСдом запустил Postgres. Π’ΠΎΡ‡Π½Π΅Π΅ ΠΏΠ΅Ρ€Π΅Π΄ запуском Postgres’Π° ΠΈ ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ ΠΊΠ°ΠΊ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΎΠΉ, Patroni запустил процСсс pg_rewind. БоотвСтствСнно, ΠΎΠ½ стСр Ρ‡Π°ΡΡ‚ΡŒ ΠΆΡƒΡ€Π½Π°Π»ΠΎΠ² Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ, скачал Π½ΠΎΠ²Ρ‹Π΅ ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΡΡ. Π—Π΄Π΅ΡΡŒ Patroni ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°Π» ΡˆΠΈΠΊΠ°Ρ€Π½ΠΎ, Ρ‚. Π΅. ΠΊΠ°ΠΊ ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΎ. ΠšΠ»Π°ΡΡ‚Π΅Ρ€ Ρƒ нас восстановился. Π£ нас Π±Ρ‹Π»ΠΎ 3 Π½ΠΎΠ΄Ρ‹, послС Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€Π° 3 Π½ΠΎΠ΄Ρ‹ – всС ΠΊΡ€ΡƒΡ‚ΠΎ.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

ΠœΡ‹ потСряли Ρ‡Π°ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…. И Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, сколько ΠΌΡ‹ потСряли. ΠœΡ‹ ΠΈΡ‰Π΅ΠΌ ΠΊΠ°ΠΊ Ρ€Π°Π· Ρ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° Ρƒ нас происходил rewind. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΉΡ‚ΠΈ это ΠΏΠΎ Ρ‚Π°ΠΊΠΈΠΌ записям Π² ΠΆΡƒΡ€Π½Π°Π»Π΅. Запустился rewind, Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Ρ‚Π°ΠΌ сдСлал ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»ΡΡ.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

Нам Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Ρ‚Ρƒ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Π² ΠΆΡƒΡ€Π½Π°Π»Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ остановился старый мастСр. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС – это Π²ΠΎΡ‚ эта ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΠ°. И Π½Π°ΠΌ Π½ΡƒΠΆΠ½Π° вторая ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΠ°, Ρ‚. Π΅. Ρ‚ΠΎ расстояниС, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ отличаСтся старый мастСр ΠΎΡ‚ Π½ΠΎΠ²ΠΎΠ³ΠΎ.

ΠœΡ‹ Π±Π΅Ρ€Π΅ΠΌ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ pg_wal_lsn_diff ΠΈ сравниваСм эти Π΄Π²Π΅ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΠΈ. И Π² Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ 17 ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ‚. Много это ΠΈΠ»ΠΈ ΠΌΠ°Π»ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ для сСбя Ρ€Π΅ΡˆΠ°Π΅Ρ‚ сам. ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ для ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ 17 ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ‚ – это Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ, для ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ это ΠΌΠ½ΠΎΠ³ΠΎ ΠΈ нСдопустимо. Π’ΡƒΡ‚ ΡƒΠΆΠ΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ для сСбя ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½ΠΎ опрСдСляСт Π² соотвСтствиС с потрСбностями бизнСса.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

Но Ρ‡Ρ‚ΠΎ ΠΌΡ‹ выяснили для сСбя?

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΌΡ‹ для сСбя Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ – всСгда Π»ΠΈ Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ автозапуск Patroni послС ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ систСмы? Π§Π°Ρ‰Π΅ Π±Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°ΠΉΡ‚ΠΈ Π½Π° старый мастСр, ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ Π΄Π°Π»Π΅ΠΊΠΎ ΠΎΠ½ ΡƒΠ΅Ρ…Π°Π». Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΡ€ΠΎΠΈΠ½ΡΠΏΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сСгмСнты ΠΆΡƒΡ€Π½Π°Π»Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ, ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΌ. И ΠΏΠΎΠ½ΡΡ‚ΡŒ – ΠΌΠΎΠΆΠ΅ΠΌ Π»ΠΈ ΠΌΡ‹ эти Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΡ‚Π΅Ρ€ΡΡ‚ΡŒ ΠΈΠ»ΠΈ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π² standalone-Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ старый мастСр, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Ρ‚Π°Ρ‰ΠΈΡ‚ΡŒ эти Π΄Π°Π½Π½Ρ‹Π΅.

И Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠΆΠ΅ послС этого Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ эти Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΡ‚Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡ… Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π²ΠΎΡ‚ этот ΡƒΠ·Π΅Π» Π² качСствС Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ Π² наш кластСр.

Помимо этого, Π΅ΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Β«maximum_lag_on_failoverΒ». По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ссли ΠΌΠ½Π΅ Π½Π΅ измСняСт ΠΏΠ°ΠΌΡΡ‚ΡŒ, этот ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 1 ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ‚.

Как ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚? Если наша Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ° отстаСт Π½Π° 1 ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ‚ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ Π»Π°Π³Ρƒ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ, Ρ‚ΠΎ эта Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ° Π½Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ участия Π² Π²Ρ‹Π±ΠΎΡ€Π°Ρ…. И Ссли Π²Π΄Ρ€ΡƒΠ³ происходит Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€, Patroni смотрит, ΠΊΠ°ΠΊΠΈΠ΅ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ ΠΎΡ‚ΡΡ‚Π°ΡŽΡ‚. Если ΠΎΠ½ΠΈ ΠΎΡ‚ΡΡ‚Π°ΡŽΡ‚ Π½Π° большоС количСство ΠΆΡƒΡ€Π½Π°Π»ΠΎΠ² Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ, ΠΎΠ½ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΡ‚Π°Ρ‚ΡŒ мастСром. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ защитная функция, которая позволяСт Π½Π΅ ΠΏΠΎΡ‚Π΅Ρ€ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Π°Π½Π½Ρ‹Ρ….

Но Ρ‚ΡƒΡ‚ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π»Π°Π³ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π² кластСрС Patroni ΠΈ DCS обновляСтся с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΎΠΌ. По-ΠΌΠΎΠ΅ΠΌΡƒ, 30 сСкунд Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ttl ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

БоотвСтствСнно, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ситуация, ΠΊΠΎΠ³Π΄Π° Π»Π°Π³ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ для Ρ€Π΅ΠΏΠ»ΠΈΠΊ Π² DCS ΠΎΠ΄ΠΈΠ½, Π° Π½Π° самом Π΄Π΅Π»Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π»Π°Π³ ΠΈΠ»ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π»Π°Π³Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Π±Ρ‹Ρ‚ΡŒ, Ρ‚. Π΅. эта ΡˆΡ‚ΡƒΠΊΠ° Π½Π΅ realtime. И ΠΎΠ½Π° Π½Π΅ всСгда ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ Ρ€Π΅Π°Π»ΡŒΠ½ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρƒ. И Π΄Π΅Π»Π°Ρ‚ΡŒ Π½Π° Π½Π΅ΠΉ Π½Π°Π²ΠΎΡ€ΠΎΡ‡Π΅Π½Π½ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ Π½Π΅ стоит.

И риск ΠΏΠΎΡ‚Π΅Ρ€ΡΡˆΠ΅ΠΊ всСгда остаСтся. И Π² Ρ…ΡƒΠ΄ΡˆΠ΅ΠΌ случаС ΠΎΠ΄Π½Π° Ρ„ΠΎΡ€ΠΌΡƒΠ»Π°, Π° Π² срСднСм случаС другая Ρ„ΠΎΡ€ΠΌΡƒΠ»Π°. Π’. Π΅. ΠΌΡ‹, ΠΊΠΎΠ³Π΄Π° ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅ΠΌ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ Patroni ΠΈ ΠΎΡ†Π΅Π½ΠΈΠ²Π°Π΅ΠΌ, сколько Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΡ‚Π΅Ρ€ΡΡ‚ΡŒ, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π½Π° эти Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ, сколько Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΡ‚Π΅Ρ€ΡΡ‚ΡŒ.

И Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ Π½ΠΎΠ²ΠΎΡΡ‚ΡŒ Π΅ΡΡ‚ΡŒ. Когда старый мастСр ΡƒΠ΅Ρ…Π°Π» Π²ΠΏΠ΅Ρ€Π΅Π΄, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ΅Ρ…Π°Ρ‚ΡŒ Π²ΠΏΠ΅Ρ€Π΅Π΄ Π·Π° счСт ΠΊΠ°ΠΊΠΈΡ…-Ρ‚ΠΎ Ρ„ΠΎΠ½ΠΎΠ²Ρ‹Ρ… процСссов. Π’. Π΅. ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Π±Ρ‹Π» Π°Π²Ρ‚ΠΎΠ²Π°ΠΊΡƒΡƒΠΌ, ΠΎΠ½ написал Π΄Π°Π½Π½Ρ‹Π΅, сохранил ΠΈΡ… Π² ΠΆΡƒΡ€Π½Π°Π» Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. И эти Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ запросто ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΏΠΎΡ‚Π΅Ρ€ΡΡ‚ΡŒ. Π’ этом Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

И Π²ΠΎΡ‚ Ρ‚Π°ΠΊ выглядят Π»ΠΎΠ³ΠΈ Π² случаС, Ссли выставлСн maximum_lag_on_failover ΠΈ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π» Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€, ΠΈ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π½ΠΎΠ²ΠΎΠ³ΠΎ мастСра. Π Π΅ΠΏΠ»ΠΈΠΊΠ° ΠΎΡ†Π΅Π½ΠΈΠ²Π°Π΅Ρ‚ сСбя ΠΊΠ°ΠΊ Π½Π΅ΡΠΏΠΎΡΠΎΠ±Π½ΡƒΡŽ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ участиС Π² Π²Ρ‹Π±ΠΎΡ€Π°Ρ…. И ΠΎΠ½Π° отказываСтся ΠΎΡ‚ участия Π² Π³ΠΎΠ½ΠΊΠ΅ Π·Π° Π»ΠΈΠ΄Π΅Ρ€Π°. И ΠΎΠ½Π° ΠΆΠ΄Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π±Ρ€Π°Π½ Π½ΠΎΠ²Ρ‹ΠΉ мастСр, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡ‚ΠΎΠΌ ΠΊ Π½Π΅ΠΌΡƒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ. Π­Ρ‚ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΌΠ΅Ρ€Π° ΠΎΡ‚ ΠΏΠΎΡ‚Π΅Ρ€ΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

Π—Π΄Π΅ΡΡŒ Ρƒ нас продуктовая ΠΊΠΎΠΌΠ°Π½Π΄Π° написала, Ρ‡Ρ‚ΠΎ ΠΈΡ… ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ испытываСт ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Postgres. ΠŸΡ€ΠΈ этом Π½Π° сам мастСр нСльзя Π·Π°ΠΉΡ‚ΠΈ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ нСдоступСн ΠΏΠΎ SSH. И Π°Π²Ρ‚ΠΎΡ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€ Ρ‚ΠΎΠΆΠ΅ Π½Π΅ происходит.

Π­Ρ‚ΠΎΡ‚ хост ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π² ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ. Из-Π·Π° ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π» Π°Π²Ρ‚ΠΎΡ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€, хотя ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈ Ρ€ΡƒΡ‡Π½ΠΎΠΉ Π°Π²Ρ‚ΠΎΡ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€, ΠΊΠ°ΠΊ я сСйчас понимаю. И послС ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΌΡ‹ ΡƒΠΆΠ΅ ΠΈΠ΄Π΅ΠΌ ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρƒ нас Π±Ρ‹Π»ΠΎ с Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ мастСром.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

ΠŸΡ€ΠΈ этом ΠΌΡ‹ Π·Π°Ρ€Π°Π½Π΅Π΅ Π·Π½Π°Π»ΠΈ, Ρ‡Ρ‚ΠΎ Ρƒ нас ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π±Ρ‹Π»ΠΈ с дисками, Ρ‚. Π΅. ΠΌΡ‹ ΡƒΠΆΠ΅ ΠΏΠΎ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Ρƒ Π·Π½Π°Π»ΠΈ, Π³Π΄Π΅ ΠΊΠΎΠΏΠ°Ρ‚ΡŒ ΠΈ Ρ‡Ρ‚ΠΎ ΠΈΡΠΊΠ°Ρ‚ΡŒ.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

ΠœΡ‹ Π·Π°Π»Π΅Π·Π»ΠΈ Π² postgres’овый Π»ΠΎΠ³, Π½Π°Ρ‡Π°Π»ΠΈ ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΌ происходит. ΠœΡ‹ ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ длятся Ρ‚Π°ΠΌ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ-Π΄Π²Π΅-Ρ‚Ρ€ΠΈ сСкунды, Ρ‡Ρ‚ΠΎ совсСм Π½Π΅ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ. ΠœΡ‹ ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ, Ρ‡Ρ‚ΠΎ Ρƒ нас Π°Π²Ρ‚ΠΎΠ²Π°ΠΊΡƒΡƒΠΌ запускаСтся ΠΎΡ‡Π΅Π½ΡŒ Π΄ΠΎΠ»Π³ΠΎ ΠΈ странно. И ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π½Π° дискС. Π’. Π΅. это всС ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с дисками.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

ΠœΡ‹ заглянули Π² систСмный dmesg (Π² Π»ΠΎΠ³ ядСрных сообщСний). И ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ, Ρ‡Ρ‚ΠΎ Ρƒ нас Ρƒ нас Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· дисков. Дисковая подсистСмная прСдставляла собой software Raid. ΠœΡ‹ посмотрСли /proc/mdstat ΠΈ ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ, Ρ‡Ρ‚ΠΎ Ρƒ нас Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ диска. Π’. Π΅. Ρ‚ΡƒΡ‚ Raid ΠΈΠ· 8 дисков, Ρƒ нас ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚. Если Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΡ€Π°Π·Π³Π»ΡΠ΄Ρ‹Π²Π°Ρ‚ΡŒ слайд, Ρ‚ΠΎ Π² Π²Ρ‹Π²ΠΎΠ΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρƒ нас Ρ‚Π°ΠΌ sde отсутствуСт. Π£ нас, условно говоря, Π²Ρ‹ΠΏΠ°Π» диск. Π­Ρ‚ΠΎ стриггСрировало дисковыС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΈ прилоТСния Ρ‚ΠΎΠΆΠ΅ испытали ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с кластСром Postgres.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

И Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Patroni Π½Π°ΠΌ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΏΠΎΠΌΠΎΠ³ Π±Ρ‹, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρƒ Patroni Π½Π΅Ρ‚ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ состояниС сСрвСра, состояниС диска. И ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ‚Π°ΠΊΠΈΠ΅ ситуации ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ внСшним ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ΠΎΠΌ. ΠœΡ‹ Π²ΠΎ внСшний ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ дисков ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎ.

И Π±Ρ‹Π»Π° такая ΠΌΡ‹ΡΠ»ΡŒ – Π° ΠΌΠΎΠ³ Π±Ρ‹ Π½Π°ΠΌ ΠΏΠΎΠΌΠΎΡ‡ΡŒ фСнсинг, Π»ΠΈΠ±ΠΎ софт watchdog? ΠœΡ‹ ΠΏΠΎΠ΄ΡƒΠΌΠ°Π»ΠΈ, Ρ‡Ρ‚ΠΎ вряд Π»ΠΈ Π±Ρ‹ ΠΎΠ½ Π½Π°ΠΌ ΠΏΠΎΠΌΠΎΠ³ Π² этом случаС, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π²ΠΎ врСмя ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Patroni ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π» Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с кластСром DCS ΠΈ Π½Π΅ Π²ΠΈΠ΄Π΅Π» Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Π’. Π΅. с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния DCS ΠΈ Patroni с кластСром Π±Ρ‹Π»ΠΎ всС Ρ…ΠΎΡ€ΠΎΡˆΠΎ, хотя ΠΏΠΎ Ρ„Π°ΠΊΡ‚Ρƒ Π±Ρ‹Π»ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с диском, Π±Ρ‹Π»ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒΡŽ Π±Π°Π·Ρ‹.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

На ΠΌΠΎΠΉ взгляд, это ΠΎΠ΄Π½Π° ΠΈΠ· самых странных ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ я исслСдовал ΠΎΡ‡Π΅Π½ΡŒ Π΄ΠΎΠ»Π³ΠΎ, ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Π»ΠΎΠ³ΠΎΠ² ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡ‚Π°Π», пСрСковырял ΠΈ Π½Π°Π·Π²Π°Π» Π΅Π΅ кластСр-симулянтом.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π»Π°ΡΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ старый мастСр Π½Π΅ ΠΌΠΎΠ³ ΡΡ‚Π°Ρ‚ΡŒ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΎΠΉ, Ρ‚. Π΅. Patroni Π΅Π³ΠΎ запускал, Patroni ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π», Ρ‡Ρ‚ΠΎ этот ΡƒΠ·Π΅Π» присутствуСт ΠΊΠ°ΠΊ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°, Π½ΠΎ Π² Ρ‚ΠΎ ΠΆΠ΅ врСмя ΠΎΠ½ Π½Π΅ Π±Ρ‹Π» Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΎΠΉ. БСйчас Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΏΠΎΡ‡Π΅ΠΌΡƒ. Π­Ρ‚ΠΎ Ρƒ мСня ΡΠΎΡ…Ρ€Π°Π½ΠΈΠ»ΠΎΡΡŒ с Ρ€Π°Π·Π±ΠΎΡ€Π° Ρ‚ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

И с Ρ‡Π΅Π³ΠΎ всС Π½Π°Ρ‡Π°Π»ΠΎΡΡŒ? ΠΠ°Ρ‡Π°Π»ΠΎΡΡŒ, ΠΊΠ°ΠΊ ΠΈ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅, с дисковых Ρ‚ΠΎΡ€ΠΌΠΎΠ·ΠΎΠ². Π£ нас Π±Ρ‹Π»ΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΠΏΠΎ сСкундС, ΠΏΠΎ Π΄Π²Π΅.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

Π‘Ρ‹Π»ΠΈ ΠΎΠ±Ρ€Ρ‹Π²Ρ‹ соСдинСний, Ρ‚. Π΅. ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ Ρ€Π²Π°Π»ΠΈΡΡŒ.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

Π‘Ρ‹Π»ΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Ρ€Π°Π·Π½ΠΎΠΉ тяТСсти.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

И, соотвСтствСнно, дисковая подсистСма Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ отзывчивая.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

И самоС Π·Π°Π³Π°Π΄ΠΎΡ‡Π½ΠΎΠ΅ для мСня – это ΠΏΡ€ΠΈΠ»Π΅Ρ‚Π΅Π²ΡˆΠΈΠΉ immediate shutdown request. Π£ Postgres Π΅ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ Ρ€Π΅ΠΆΠΈΠΌΠ° Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ:

  • Π­Ρ‚ΠΎ graceful, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΆΠ΄Π΅ΠΌ, ΠΊΠΎΠ³Π΄Π° всС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡΡ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ.
  • Π•ΡΡ‚ΡŒ fast, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ заставляСм ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΈΠ΄Π΅ΠΌ Π½Π° Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.
  • И immediate. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС immediate Π΄Π°ΠΆΠ΅ Π½Π΅ сообщаСт ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ, ΠΎΠ½ просто Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π±Π΅Π· прСдупрСТдСния. А всСм ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ ΡƒΠΆΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой отправляСтся сообщСниС RST (TCP-сообщСниС, Ρ‡Ρ‚ΠΎ соСдинСниС ΠΏΡ€Π΅Ρ€Π²Π°Π½ΠΎ ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ большС Π½Π΅Ρ‡Π΅Π³ΠΎ Π»ΠΎΠ²ΠΈΡ‚ΡŒ).

ΠšΡ‚ΠΎ послал этот сигнал? Π€ΠΎΠ½ΠΎΠ²Ρ‹Π΅ процСссы Postgres Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Ρƒ Ρ‚Π°ΠΊΠΈΠ΅ сигналы Π½Π΅ ΠΏΠΎΡΡ‹Π»Π°ΡŽΡ‚, Ρ‚. Π΅. это kill-9. Они Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Ρƒ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π΅ ΡˆΠ»ΡŽΡ‚, ΠΎΠ½ΠΈ Π½Π° Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π΅Π°Π³ΠΈΡ€ΡƒΡŽΡ‚, Ρ‚. Π΅. это экстрСнный пСрСзапуск Postgres. ΠšΡ‚ΠΎ Π΅Π³ΠΎ послал, я Π½Π΅ знаю.

Π― посмотрСл ΠΏΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Β«lastΒ» ΠΈ я ΡƒΠ²ΠΈΠ΄Π΅Π» ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°, ΠΊΡ‚ΠΎ Ρ‚ΠΎΠΆΠ΅ Π·Π°Π»ΠΎΠ³ΠΈΠ½ΠΈΠ» этот сСрвСр вмСстС с Π½Π°ΠΌΠΈ, Π½ΠΎ я постСснялся Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ вопрос. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, это Π±Ρ‹Π» kill -9. Π― Π±Ρ‹ Π² Π»ΠΎΠ³Π°Ρ… ΡƒΠ²ΠΈΠ΄Π΅Π» kill -9, Ρ‚.ΠΊ. Postgres ΠΏΠΈΡˆΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ принял kill -9, Π½ΠΎ я Π½Π΅ ΡƒΠ²ΠΈΠ΄Π΅Π» этого Π² Π»ΠΎΠ³Π°Ρ….

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

Π Π°Π·Π±ΠΈΡ€Π°ΡΡΡŒ дальшС, я ΡƒΠ²ΠΈΠ΄Π΅Π», Ρ‡Ρ‚ΠΎ Patroni Π½Π΅ писал Π² Π»ΠΎΠ³ довольно Π΄ΠΎΠ»Π³ΠΎ – 54 сСкунды. И Ссли ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ Π΄Π²Π° timestamp, Ρ‚ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ 54 сСкунды Π½Π΅ Π±Ρ‹Π»ΠΎ сообщСний.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

И Π·Π° это врСмя ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π» Π°Π²Ρ‚ΠΎΡ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€. Patroni Ρ‚ΡƒΡ‚ снова ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°Π» прСкрасно. Π£ нас старый мастСр Π±Ρ‹Π» нСдоступСн, Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ с Π½ΠΈΠΌ происходило. И Π½Π°Ρ‡Π°Π»ΠΈΡΡŒ Π²Ρ‹Π±ΠΎΡ€Ρ‹ Π½ΠΎΠ²ΠΎΠ³ΠΎ мастСра. Π—Π΄Π΅ΡΡŒ всС ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎΡΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ. Π£ нас pgsql01 стал Π½ΠΎΠ²Ρ‹ΠΌ Π»ΠΈΠ΄Π΅Ρ€ΠΎΠΌ.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

Π£ нас Π΅ΡΡ‚ΡŒ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°, которая стала мастСром. И Π΅ΡΡ‚ΡŒ вторая Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°. И со Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΎΠΉ ΠΊΠ°ΠΊ Ρ€Π°Π· Π±Ρ‹Π»ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Она ΠΏΡ‹Ρ‚Π°Π»Π°ΡΡŒ ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ. Как я понимаю, ΠΎΠ½Π° ΠΏΡ‹Ρ‚Π°Π»Π°ΡΡŒ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ recovery.conf, ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Postgres ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΊ Π½ΠΎΠ²ΠΎΠΌΡƒ мастСру. Она ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ 10 сСкунд ΠΏΠΈΡˆΠ΅Ρ‚ сообщСния, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° пытаСтся, Π½ΠΎ Ρƒ Π½Π΅Π΅ Π½Π΅ получаСтся.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

И Π²ΠΎ врСмя этих ΠΏΠΎΠΏΡ‹Ρ‚ΠΎΠΊ Π½Π° старый мастСр ΠΏΡ€ΠΈΠ»Π΅Ρ‚Π°Π΅Ρ‚ immediate-shutdown сигнал. ΠœΠ°ΡΡ‚Π΅Ρ€ пСрСзапускаСтся. И Ρ‚Π°ΠΊΠΆΠ΅ recovery прСкращаСтся, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ старый мастСр ΡƒΡ…ΠΎΠ΄ΠΈΡ‚ Π² ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ. Π’. Π΅. Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΊ Π½Π΅ΠΌΡƒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

Π’ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΎΠ½Π° Π·Π°Ρ€Π°Π±ΠΎΡ‚Π°Π»Π°, Π½ΠΎ рСпликация ΠΏΡ€ΠΈ этом Π½Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΠ»Π°ΡΡŒ.

Π£ мСня Π΅ΡΡ‚ΡŒ СдинствСнная Π³ΠΈΠΏΠΎΡ‚Π΅Π·Π°, Ρ‡Ρ‚ΠΎ Π² recovery.conf Π±Ρ‹Π» адрСс старого мастСра. И ΠΊΠΎΠ³Π΄Π° появился Π½ΠΎΠ²Ρ‹ΠΉ мастСр, Ρ‚ΠΎ вторая Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ° ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΏΡ‹Ρ‚Π°Π»Π°ΡΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΊ старому мастСру.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

Когда Patroni запустился Π½Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ΅, ΡƒΠ·Π΅Π» запустился, Π½ΠΎ Π½Π΅ смог ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΏΠΎ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ. И образовался Π»Π°Π³ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выглядСл ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ. Π’. Π΅. всС Ρ‚Ρ€ΠΈ ΡƒΠ·Π»Π° Π±Ρ‹Π»ΠΈ Π½Π° мСстС, Π½ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΡƒΠ·Π΅Π» отставал.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

ΠŸΡ€ΠΈ этом, Ссли ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° Π»ΠΎΠ³ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ писались, ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ рСпликация Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒΡΡ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΆΡƒΡ€Π½Π°Π»Ρ‹ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ. И Ρ‚Π΅ ΠΆΡƒΡ€Π½Π°Π»Ρ‹ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ мастСр, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ Π² recovery.conf, просто Π½Π΅ подходят Π½Π°ΡˆΠ΅ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ ΡƒΠ·Π»Ρƒ.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

И здСсь я допустил ΠΎΡˆΠΈΠ±ΠΊΡƒ. МнС Π½Π°Π΄ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΈΠΉΡ‚ΠΈ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΌ Π² recovery.conf, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ свою Π³ΠΈΠΏΠΎΡ‚Π΅Π·Ρƒ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡΡ Π½Π΅ ΠΊ Ρ‚ΠΎΠΌΡƒ мастСру. Но я Ρ‚ΠΎΠ³Π΄Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ-Ρ‚ΠΎΠ»ΡŒΠΊΠΎ разбирался с этим ΠΈ ΠΌΠ½Π΅ это Π² Π³ΠΎΠ»ΠΎΠ²Ρƒ Π½Π΅ ΠΏΡ€ΠΈΡˆΠ»ΠΎ, Π»ΠΈΠ±ΠΎ я ΡƒΠ²ΠΈΠ΄Π΅Π», Ρ‡Ρ‚ΠΎ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ° отстаСт ΠΈ Π΅Π΅ придСтся ΠΏΠ΅Ρ€Π΅Π½Π°Π»ΠΈΠ²Π°Ρ‚ΡŒ, Ρ‚. Π΅. я ΠΊΠ°ΠΊ-Ρ‚ΠΎ спустя Ρ€ΡƒΠΊΠ°Π²Π° ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°Π». Π­Ρ‚ΠΎ Π±Ρ‹Π» ΠΌΠΎΠΉ косяк.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

Π§Π΅Ρ€Π΅Π· 30 ΠΌΠΈΠ½ΡƒΡ‚ ΡƒΠΆΠ΅ ΠΏΡ€ΠΈΡˆΠ΅Π» Π°Π΄ΠΌΠΈΠ½, Ρ‚. Π΅. я пСрСзапустил Patroni Π½Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ΅. Π― ΡƒΠΆΠ΅ Π½Π° Π½Π΅ΠΉ крСст поставил, я Π΄ΡƒΠΌΠ°Π», Ρ‡Ρ‚ΠΎ Π΅Π΅ придСтся ΠΏΠ΅Ρ€Π΅Π½Π°Π»ΠΈΠ²Π°Ρ‚ΡŒ. И ΠΏΠΎΠ΄ΡƒΠΌΠ°Π» – ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡ‰Ρƒ Patroni, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, получится Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π΅. Запустился recovery. И Π±Π°Π·Π° Π΄Π°ΠΆΠ΅ ΠΎΡ‚ΠΊΡ€Ρ‹Π»Π°ΡΡŒ, ΠΎΠ½Π° Π±Ρ‹Π»Π° Π³ΠΎΡ‚ΠΎΠ²Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ соСдинСния.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

РСпликация Π·Π°ΠΏΡƒΡΡ‚ΠΈΠ»Π°ΡΡŒ. Но Ρ‡Π΅Ρ€Π΅Π· ΠΌΠΈΠ½ΡƒΡ‚Ρƒ ΠΎΠ½Π° ΠΎΡ‚Π²Π°Π»ΠΈΠ»Π°ΡΡŒ с ошибкой, Ρ‡Ρ‚ΠΎ Π΅ΠΉ Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΆΡƒΡ€Π½Π°Π»Ρ‹ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

Π― ΠΏΠΎΠ΄ΡƒΠΌΠ°Π», Ρ‡Ρ‚ΠΎ Π΅Ρ‰Π΅ Ρ€Π°Π· ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡ‰Ρƒ. Π― пСрСзапустил Π΅Ρ‰Π΅ Ρ€Π°Π· Patroni, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ я Π½Π΅ пСрСзапускал Postgres, Π° пСрСзапускал ΠΈΠΌΠ΅Π½Π½ΠΎ Patroni Π² Π½Π°Π΄Π΅ΠΆΠ΄Π΅, Ρ‡Ρ‚ΠΎ ΠΎΠ½ магичСским ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ запустит Π±Π°Π·Ρƒ.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

РСпликация снова Π·Π°ΠΏΡƒΡΡ‚ΠΈΠ»Π°ΡΡŒ, Π½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΠΈ Π² ΠΆΡƒΡ€Π½Π°Π»Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ ΠΎΡ‚Π»ΠΈΡ‡Π°Π»ΠΈΡΡŒ, ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ Π½Π΅ Ρ‚Π΅ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ ΠΏΡ€ΠΈ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ запуска. РСпликация снова ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΠ»Π°ΡΡŒ. И сообщСниС Π±Ρ‹Π»ΠΎ ΡƒΠΆΠ΅ Ρ‡ΡƒΡ‚ΡŒ-Ρ‡ΡƒΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠ΅. И ΠΎΠ½ΠΎ Π±Ρ‹Π»ΠΎ для мСня Π½Π΅ особо ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠ²Π½ΠΎΠ΅.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

И Ρ‚ΡƒΡ‚ ΠΌΠ½Π΅ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ Π² Π³ΠΎΠ»ΠΎΠ²Ρƒ – Π° Ρ‡Ρ‚ΠΎ, Ссли я ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡ‰Ρƒ Postgres, Π² это врСмя Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ мастСрС сдСлаю checkpoint, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚ΡŒ Ρ‚ΠΎΡ‡ΠΊΡƒ Π² ΠΆΡƒΡ€Π½Π°Π»Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Ρ‡ΡƒΡ‚ΡŒ-Ρ‡ΡƒΡ‚ΡŒ Π²ΠΏΠ΅Ρ€Π΅Π΄, Ρ‡Ρ‚ΠΎΠ±Ρ‹ recovery Π½Π°Ρ‡Π°Π»ΠΎΡΡŒ с Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°? Плюс Ρ‚Π°ΠΌ Π΅Ρ‰Π΅ Π±Ρ‹Π»ΠΈ запасы WAL Ρƒ нас.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

Π― пСрСзапустил Patroni, сдСлал ΠΏΠ°Ρ€Ρƒ checkpoints Π½Π° мастСрС, ΠΏΠ°Ρ€Ρƒ рСстарт-ΠΏΠΎΠΈΠ½Ρ‚ΠΎΠ² Π½Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ΅, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½Π° ΠΎΡ‚ΠΊΡ€Ρ‹Π»Π°ΡΡŒ. И это ΠΏΠΎΠΌΠΎΠ³Π»ΠΎ. Π― Π΄ΠΎΠ»Π³ΠΎ Π΄ΡƒΠΌΠ°Π», ΠΏΠΎΡ‡Π΅ΠΌΡƒ это ΠΏΠΎΠΌΠΎΠ³Π»ΠΎ ΠΈ ΠΊΠ°ΠΊ это сработало. И Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ° Π·Π°ΠΏΡƒΡΡ‚ΠΈΠ»Π°ΡΡŒ. И рСпликация большС Π½Π΅ Ρ€Π²Π°Π»Π°ΡΡŒ.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

Вакая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° для мСня ΠΎΠ΄Π½Π° ΠΈΠ· Π±ΠΎΠ»Π΅Π΅ Π·Π°Π³Π°Π΄ΠΎΡ‡Π½Ρ‹Ρ…, Π½Π°Π΄ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ я Π΄ΠΎ сих ΠΏΠΎΡ€ ломаю Π³ΠΎΠ»ΠΎΠ²Ρƒ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΌ происходило Π½Π° самом Π΄Π΅Π»Π΅.

КакиС Π²Ρ‹Π²ΠΎΠ΄Ρ‹ здСсь? Patroni ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ Π·Π°Π΄ΡƒΠΌΠ°Π½ΠΎ ΠΈ Π±Π΅Π· всяких ошибок. Но ΠΏΡ€ΠΈ этом – это Π½Π΅ 100 % гарантия, Ρ‡Ρ‚ΠΎ Ρƒ нас всС Ρ…ΠΎΡ€ΠΎΡˆΠΎ. Π Π΅ΠΏΠ»ΠΈΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒΡΡ, Π½ΠΎ ΠΏΡ€ΠΈ этом ΠΌΠΎΠΆΠ΅Ρ‚ находится Π² ΠΏΠΎΠ»Ρƒ-Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ состоянии, ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ нСльзя Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Ρ‚Π°ΠΊΠΎΠΉ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΎΠΉ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΌ Π±ΡƒΠ΄ΡƒΡ‚ старыС Π΄Π°Π½Π½Ρ‹Π΅.

И послС Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€Π° всСгда Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρƒ нас всС Π² порядкС с кластСром, Ρ‚. Π΅. Π΅ΡΡ‚ΡŒ Π½ΡƒΠΆΠ½ΠΎΠ΅ количСство Ρ€Π΅ΠΏΠ»ΠΈΠΊ, Π½Π΅Ρ‚ Π»Π°Π³Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

И ΠΏΠΎ Ρ…ΠΎΠ΄Ρƒ рассмотрСния этих ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ я ΡΡ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΡƒΡŽ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ. Π― попытался ΠΈΡ… ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π² Π΄Π²Π° слайда. НавСрноС, всС истории ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π² Π΄Π²Π° слайда ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΡ… Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

Когда Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Patroni, Ρƒ вас ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³. Π’Ρ‹ всСгда Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π½Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π» Π°Π²Ρ‚ΠΎΡ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ, Ссли Π²Ρ‹ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Ρƒ вас Π±Ρ‹Π» Π°Π²Ρ‚ΠΎΡ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€, Π²Ρ‹ Π½Π΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ кластСр. И это ΠΏΠ»ΠΎΡ…ΠΎ.

ПослС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€Π° ΠΌΡ‹ всСгда Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€ΡƒΠΊΠ°ΠΌΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ кластСр. ΠœΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Ρƒ нас всСгда Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ количСство Ρ€Π΅ΠΏΠ»ΠΈΠΊ, Π½Π΅Ρ‚ Π»Π°Π³Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ, Π² Π»ΠΎΠ³Π°Ρ… Π½Π΅Ρ‚ ошибок, связанных с ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠΉ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠ΅ΠΉ, с Patroni, с систСмой DCS.

Автоматика ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Patroni – это ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ инструмСнт. Он ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Π½ΠΎ это Π½Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ кластСр ΠΊ Π½ΡƒΠΆΠ½ΠΎΠΌΡƒ ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ. И Ссли ΠΌΡ‹ ΠΎΠ± этом Π½Π΅ ΡƒΠ·Π½Π°Π΅ΠΌ, Ρ‚ΠΎ Ρƒ нас Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹.

И Patroni – это Π½Π΅ сСрСбряная пуля. ΠœΡ‹ всС Ρ€Π°Π²Π½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ прСдставлСниС, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Postgres, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ рСпликация ΠΈ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Patroni Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Postgres, ΠΈ ΠΊΠ°ΠΊ обСспСчиваСтся взаимодСйствиС ΠΌΠ΅ΠΆΠ΄Ρƒ ΡƒΠ·Π»Π°ΠΌΠΈ. Π­Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΌΠ΅Ρ‚ΡŒ Ρ‡ΠΈΠ½ΠΈΡ‚ΡŒ Ρ€ΡƒΠΊΠ°ΠΌΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

Как я ΠΏΠΎΠ΄Ρ…ΠΎΠΆΡƒ ΠΊ вопросу диагностики? Π’Π°ΠΊ слоТилось, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ ΠΈ стСка ELK Π½ΠΈ Ρƒ ΠΊΠΎΠ³ΠΎ Π½Π΅Ρ‚, ΠΈ приходится Π² Π»ΠΎΠ³Π°Ρ… Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ, ΠΎΡ‚ΠΊΡ€Ρ‹Π² 6 консолСй ΠΈ 2 Π²ΠΊΠ»Π°Π΄ΠΊΠΈ. Π’ ΠΎΠ΄Π½ΠΎΠΉ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ – это Π»ΠΎΠ³ΠΈ Patroni для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡƒΠ·Π»Π°, Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ – это Π»ΠΎΠ³ΠΈ Consul, Π»ΠΈΠ±ΠΎ Postgres ΠΏΡ€ΠΈ нСобходимости. Π”ΠΈΠ°Π³Π½ΠΎΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ это ΠΎΡ‡Π΅Π½ΡŒ тяТСло.

КакиС я Π²Ρ‹Ρ€Π°Π±ΠΎΡ‚Π°Π» ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹? Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, я всСгда ΡΠΌΠΎΡ‚Ρ€ΡŽ, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΡˆΠ΅Π» Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€. И для мСня это Π½Π΅ΠΊΠΈΠΉ Π²ΠΎΠ΄ΠΎΡ€Π°Π·Π΄Π΅Π». Π― ΡΠΌΠΎΡ‚Ρ€ΡŽ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ Π΄ΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€Π°, Π²ΠΎ врСмя Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€Π° ΠΈ послС Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€Π°. Π€Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€ ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π΅ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΠΈ: это врСмя Π½Π°Ρ‡Π°Π»Π° ΠΈ ΠΊΠΎΠ½Ρ†Π°.

Π”Π°Π»Π΅Π΅ я Π² Π»ΠΎΠ³Π°Ρ… ΡΠΌΠΎΡ‚Ρ€ΡŽ события Π΄ΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€Π°, Ρ‡Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΠΎΠ²Π°Π»ΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€Ρƒ, Ρ‚. Π΅. я ΠΈΡ‰Ρƒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π» Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€.

И это Π΄Π°Π΅Ρ‚ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρƒ понимания, Ρ‡Ρ‚ΠΎ происходило ΠΈ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‚Π°ΠΊΠΈΠ΅ ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π²Π° Π½Π΅ наступили (ΠΈ ΠΊΠ°ΠΊ слСдствиС Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€Π°).

И ΠΊΡƒΠ΄Π° ΠΌΡ‹ смотрим ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ? Π― ΡΠΌΠΎΡ‚Ρ€ΡŽ:

  • Π‘Π½Π°Ρ‡Π°Π»Π° Π² Π»ΠΎΠ³ΠΈ Patroni.
  • Π”Π°Π»Π΅Π΅ ΡΠΌΠΎΡ‚Ρ€ΡŽ Π»ΠΎΠ³ΠΈ Postgres, Π»ΠΈΠ±ΠΎ Π»ΠΎΠ³ΠΈ DCS Π² зависимости ΠΎΡ‚Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ нашлось Π² Π»ΠΎΠ³Π°Ρ… Patroni.
  • И Π»ΠΎΠ³ΠΈ систСмы Ρ‚ΠΎΠΆΠ΅ ΠΈΠ½ΠΎΠ³Π΄Π° Π΄Π°ΡŽΡ‚ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ послуТило ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ для Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€Π°.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

Как я ΠΎΡ‚Π½ΠΎΡˆΡƒΡΡŒ ΠΊ Patroni? К Patroni я ΠΎΡ‚Π½ΠΎΡˆΡƒΡΡŒ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ. На ΠΌΠΎΠΉ взгляд, это Π»ΡƒΡ‡ΡˆΠ΅Π΅, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ сСгодня. Π― знаю ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ². Π­Ρ‚ΠΎ Stolon, Repmgr, Pg_auto_failover, PAF. 4 инструмСнта. Π― ΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π» ΠΈΡ… всС. Patroni ΠΌΠ½Π΅ понравился большС всСго.

Если мСня спросят: Β«Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ Π»ΠΈ я Patroni?Β». Π― скаТу, Ρ‡Ρ‚ΠΎ Π΄Π°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Patroni ΠΌΠ½Π΅ нравится. И, ΠΌΠ½Π΅ каТСтся, я научился Π΅Π³ΠΎ Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ.

Если Π²Π°ΠΌ интСрСсно ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ Π΅Ρ‰Π΅ Π±Ρ‹Π²Π°ΡŽΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Patroni, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚Π΅Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я ΠΎΠ·Π²ΡƒΡ‡ΠΈΠ», Π²Ρ‹ всСгда ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π° страницу issues Π½Π° GitHub. Π’Π°ΠΌ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Π½Ρ‹Ρ… историй ΠΈ Ρ‚Π°ΠΌ обсуТдаСтся ΠΌΠ½ΠΎΠ³ΠΎ интСрСсных ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. И ΠΏΠΎ ΠΈΡ‚ΠΎΠ³Ρƒ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ Π±Π°Π³ΠΈ Π±Ρ‹Π»ΠΈ Π·Π°Π²Π΅Π΄Π΅Π½Ρ‹ ΠΈ Ρ€Π΅ΡˆΠ΅Π½Ρ‹, Ρ‚. Π΅. это интСрСсноС Ρ‡Ρ‚ΠΈΠ²ΠΎ.

Π’Π°ΠΌ Π΅ΡΡ‚ΡŒ интСрСсныС истории ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ люди ΡΡ‚Ρ€Π΅Π»ΡΡŽΡ‚ сСбС Π² Π½ΠΎΠ³Ρƒ. ΠžΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ·Π½Π°Π²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ. Π’Ρ‹ Ρ‡ΠΈΡ‚Π°Π΅ΡˆΡŒ ΠΈ понимаСшь, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊ Π΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅ Π½Π°Π΄ΠΎ. ΠŸΠΎΡΡ‚Π°Π²ΠΈΠ» сСбС Π³Π°Π»ΠΎΡ‡ΠΊΡƒ.

И Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ большоС спасибо ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Zalando Π·Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Ρ€Π°Π·Π²ΠΈΠ²Π°ΡŽΡ‚ этот ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ АлСксандру ΠšΡƒΠΊΡƒΡˆΠΊΠΈΠ½Ρƒ ΠΈ АлСксСю ΠšΠ»ΡŽΠΊΠΈΠ½Ρƒ. АлСксСй Клюкин – это ΠΎΠ΄ΠΈΠ½ ΠΈΠ· соавторов, ΠΎΠ½ ΡƒΠΆΠ΅ Π² Zalando Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π½ΠΎ это Π΄Π²Π° Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Ρ‡ΠΈΠ½Π°Π»ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с этим ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠΌ.

И я ΡΡ‡ΠΈΡ‚Π°ΡŽ, Ρ‡Ρ‚ΠΎ Patroni – это ΠΎΡ‡Π΅Π½ΡŒ крутая ΡˆΡ‚ΡƒΠΊΠ°. Π― Π΄ΠΎΠ²ΠΎΠ»Π΅Π½, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π΅ΡΡ‚ΡŒ, с Π½Π΅ΠΉ интСрСсно. И большоС спасибо всСм ΠΊΠΎΠ½Ρ‚Ρ€ΠΈΠ±ΡŒΡŽΡ‚ΠΎΡ€Π°ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΈΡˆΡƒΡ‚ ΠΏΠ°Ρ‚Ρ‡ΠΈ Π² Patroni. Π― надСюсь, Ρ‡Ρ‚ΠΎ Patroni Π±ΡƒΠ΄Π΅Ρ‚ с возрастом ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ Π±ΠΎΠ»Π΅Π΅ Π·Ρ€Π΅Π»Ρ‹ΠΌ, ΠΊΡ€ΡƒΡ‚Ρ‹ΠΌ ΠΈ работоспособным. Он ΠΈ Ρ‚Π°ΠΊ работоспособСн, Π½ΠΎ, я надСюсь, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ Π΅Ρ‰Π΅ Π»ΡƒΡ‡ΡˆΠ΅. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ссли Π²Ρ‹ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρƒ сСбя Patroni, Ρ‚ΠΎ Π½Π΅ Π±ΠΎΠΉΡ‚Π΅ΡΡŒ. Π­Ρ‚ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²Π½Π΅Π΄Ρ€ΡΡ‚ΡŒ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

На этом всС. Если Ρƒ вас Π΅ΡΡ‚ΡŒ вопросы, Π·Π°Π΄Π°Π²Π°ΠΉΡ‚Π΅.

Patroni Failure Stories or How to crash your PostgreSQL cluster. АлСксСй ЛСсовский

Вопросы

Бпасибо Π·Π° Π΄ΠΎΠΊΠ»Π°Π΄! Если послС Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€Π° всС Ρ€Π°Π²Π½ΠΎ Π½Π°Π΄ΠΎ Ρ‚ΡƒΠ΄Π° ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‚ΠΎ Π·Π°Ρ‡Π΅ΠΌ Π½Π°ΠΌ автоматичСский Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€?

ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это новая ΡˆΡ‚ΡƒΠΊΠ°. ΠœΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ с Π½Π΅ΠΉ всСго лишь Π³ΠΎΠ΄. Π›ΡƒΡ‡ΡˆΠ΅ ΠΏΠ΅Ρ€Π΅ΡΡ‚Ρ€Π°Ρ…ΠΎΠ²Π°Ρ‚ΡŒΡΡ. ΠœΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π·Π°ΠΉΡ‚ΠΈ ΠΈ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ всС ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π½Π°Π΄ΠΎ. Π­Ρ‚ΠΎ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ взрослого нСдовСрия – Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΈ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ.

НапримСр, ΠΌΡ‹ ΡƒΡ‚Ρ€ΠΎΠΌ зашли ΠΈ посмотрСли, Π΄Π°?

НС ΡƒΡ‚Ρ€ΠΎΠΌ, ΠΌΡ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΡƒΠ·Π½Π°Π΅ΠΌ ΠΎΠ± Π°Π²Ρ‚ΠΎΡ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€Π΅ практичСски сразу. Π£ нас приходят увСдомлСния, ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π» Π°Π²Ρ‚ΠΎΡ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€. ΠœΡ‹ практичСски сразу Π·Π°Ρ…ΠΎΠ΄ΠΈΠΌ ΠΈ смотрим. Но всС эти ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ вынСсСны Π½Π° ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π°. Если ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Patroni ΠΏΠΎ REST API, Π΅ΡΡ‚ΡŒ history. По history ΠΌΠΎΠΆΠ½ΠΎ ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΠΈ, ΠΊΠΎΠ³Π΄Π° происходил Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€. На основС этого ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³. МоТно ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ history, сколько Ρ‚Π°ΠΌ событий Π±Ρ‹Π»ΠΎ. Если Ρƒ нас ΠΏΡ€ΠΈΠ±Π°Π²ΠΈΠ»ΠΎΡΡŒ событий, Π·Π½Π°Ρ‡ΠΈΡ‚, ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π» Π°Π²Ρ‚ΠΎΡ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€. МоТно ΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ. Π›ΠΈΠ±ΠΎ наша Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠΊΠ° Π² ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ»Π°, Ρ‡Ρ‚ΠΎ Ρƒ нас всС Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ Π½Π° мСстС, Π»Π°Π³Π° Π½Π΅Ρ‚ ΠΈ всС Ρ…ΠΎΡ€ΠΎΡˆΠΎ.

Бпасибо!

Π‘ΠΎΠ»ΡŒΡˆΠΎΠ΅ спасибо Π·Π° ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ рассказ! Если ΠΌΡ‹ вынСсли кластСр DCS ΠΊΡƒΠ΄Π°-Ρ‚ΠΎ вдаль ΠΎΡ‚ кластСра Postgres, Ρ‚ΠΎ этот кластСр Ρ‚ΠΎΠΆΠ΅ Π½Π°Π΄ΠΎ ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ пСриодичСски? КакиС best practices Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ куски кластСра DCS Π½Π°Π΄ΠΎ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ с Π½ΠΈΠΌΠΈ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΈ Ρ‚. Π΄.? Как ΠΏΡ€ΠΈ этом ΠΆΠΈΠ²Π΅Ρ‚ вся эта конструкция? И ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ эти Π²Π΅Ρ‰ΠΈ Π΄Π΅Π»Π°Ρ‚ΡŒ?

Для ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Ρ‡Ρ‚ΠΎ происходит, Ссли ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΈΠ· ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΈΠ»ΠΈ нСсколько ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΈΠ· строя. По этой ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ ΠΌΡ‹ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅ΠΌ всС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΈ строим сцСнарии Π² случаС ΠΎΡ‚ΠΊΠ°Π·Π° этих ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². БоотвСтсвСнно Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ сцСнарий ΠΎΡ‚ΠΊΠ°Π·Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΠ»Π°Π½ дСйствий для восстановлСния. И Π² случаС DCS это ΠΈΠ΄Π΅Ρ‚ ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ стандартной инфраструктуры. И Π°Π΄ΠΌΠΈΠ½ это администрируСт, ΠΈ ΠΌΡ‹ ΡƒΠΆΠ΅ полагаСмся Π½Π° Π°Π΄ΠΌΠΈΠ½ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ это Π°Π΄ΠΌΠΈΠ½ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚ ΠΈ Π½Π° Π΅Π³ΠΎ способности Ρ‡ΠΈΠ½ΠΈΡ‚ΡŒ это Π² случаС Π°Π²Π°Ρ€ΠΈΠΉ. Если DCS Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅Ρ‚, Ρ‚ΠΎ Π΅Π³ΠΎ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π΅ΠΌ ΠΌΡ‹, Π½ΠΎ ΠΏΡ€ΠΈ этом особо Π·Π° Π½ΠΈΠΌ Π½Π΅ слСдим, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅ΠΌ Π·Π° инфраструктуру, Π½ΠΎ Π΄Π°Π΅ΠΌ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΊΠ°ΠΊ ΠΈ Ρ‡Ρ‚ΠΎ Π·Π°ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΡ‚ΡŒ.

Π’. Π΅. ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π»ΠΈ я понял, Ρ‡Ρ‚ΠΎ Π½Π°Π΄ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Patroni, ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€, ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ всС ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ с хостами?

Π­Ρ‚ΠΎ зависит ΠΎΡ‚Ρ‚ΠΎΠ³ΠΎ, сколько Ρƒ нас ΡƒΠ·Π»ΠΎΠ² Π² DCS-кластСрС. Если ΡƒΠ·Π»ΠΎΠ² ΠΌΠ½ΠΎΠ³ΠΎ ΠΈ Ссли ΠΌΡ‹ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΈΠ· строя всго лишь ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡƒΠ·Π»ΠΎΠ² (Ρ€Π΅ΠΏΠ»ΠΈΠΊΡƒ), Ρ‚ΠΎ Π² кластСрС сохраняСтся ΠΊΠ²ΠΎΡ€ΡƒΠΌ. И Patroni остаСтся работоспособным. И Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ триггирируСтся. Если Ρƒ нас ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ слоТныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°ΡŽΡ‚ большС ΡƒΠ·Π»ΠΎΠ², отсутствиС ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π·Π²Π°Π»ΠΈΡ‚ΡŒ ΠΊΠ²ΠΎΡ€ΡƒΠΌ, Ρ‚ΠΎ – Π΄Π°, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Patroni Π½Π° ΠΏΠ°ΡƒΠ·Ρƒ. Π£ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° – patronictl pause, patronictl resume. ΠœΡ‹ просто ставим Π½Π° ΠΏΠ°ΡƒΠ·Ρƒ, ΠΈ Π°Π²Ρ‚ΠΎΡ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€ Π½Π΅ срабатываСт Π² это врСмя. ΠœΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ maintenance Π½Π° DCS-кластСрС, ΠΏΠΎΡ‚ΠΎΠΌ снимаСм ΠΏΠ°ΡƒΠ·Ρƒ ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ ΠΆΠΈΡ‚ΡŒ.

Бпасибо большоС!

Π‘ΠΎΠ»ΡŒΡˆΠΎΠ΅ спасибо Π·Π° Π΄ΠΎΠΊΠ»Π°Π΄! Как продуктовая ΠΊΠΎΠΌΠ°Π½Π΄Π° относится ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΡ‚Π΅Ρ€ΡΡ‚ΡŒΡΡ?

ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ²Ρ‹ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌ ΠΏΠΎ Ρ„ΠΈΠ³, Π° Ρ‚ΠΈΠΌΠ»ΠΈΠ΄Ρ‹ Π²ΠΎΠ»Π½ΡƒΡŽΡ‚ΡΡ.

КакиС Ρ‚Π°ΠΌ Π΅ΡΡ‚ΡŒ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ?

Π‘ гарантиями ΠΎΡ‡Π΅Π½ΡŒ тяТСло. Π•ΡΡ‚ΡŒ Π΄ΠΎΠΊΠ»Π°Π΄ Ρƒ АлСксандра ΠšΡƒΠΊΡƒΡˆΠΊΠΈΠ½Π° «Как Ρ€Π°ΡΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ RPO ΠΈ RTOΒ», Ρ‚. Π΅. врСмя восстановлСния ΠΈ сколько Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΡ‚Π΅Ρ€ΡΡ‚ΡŒ. Π― Π΄ΡƒΠΌΠ°ΡŽ, Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ эти слайды ΠΈ ΠΈΡ… ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ. Насколько я помню, Ρ‚Π°ΠΌ Π΅ΡΡ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ шаги, ΠΊΠ°ΠΊ Ρ€Π°ΡΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ эти Π²Π΅Ρ‰ΠΈ. Бколько Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΡ‚Π΅Ρ€ΡΡ‚ΡŒ, сколько Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΡ‚Π΅Ρ€ΡΡ‚ΡŒ. Как Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΡƒΡŽ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡŽ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Patroni, Π½ΠΎ это ΠΏΠ°Π»ΠΊΠ° ΠΎ Π΄Π²ΡƒΡ… ΠΊΠΎΠ½Ρ†Π°Ρ…: ΠΌΡ‹ Π»ΠΈΠ±ΠΎ ΠΈΠΌΠ΅Π΅ΠΌ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…, Π»ΠΈΠ±ΠΎ тСряСм Π² скорости. Π•ΡΡ‚ΡŒ синхронная рСпликация, Π½ΠΎ ΠΎΠ½Π° Ρ‚ΠΎΠΆΠ΅ Π½Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ 100%-Π½ΡƒΡŽ Π·Π°Ρ‰ΠΈΡ‚Ρƒ ΠΎΡ‚ ΠΏΠΎΡ‚Π΅Ρ€ΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

АлСксСй, спасибо Π·Π° прСкрасный Π΄ΠΎΠΊΠ»Π°Π΄! Π•ΡΡ‚ΡŒ Π»ΠΈ ΠΎΠΏΡ‹Ρ‚ использования Patroni для zero level protection? Π’. Π΅. Π² ΠΊΡƒΠΏΠ΅ с синхронным standby? Π­Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ вопрос. И Π²Ρ‚ΠΎΡ€ΠΎΠΉ вопрос. Π’Ρ‹ использовали Ρ€Π°Π·Π½Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. ΠœΡ‹ использовали Repmgr, Π½ΠΎ Π±Π΅Π· Π°Π²Ρ‚ΠΎΡ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€Π° ΠΈ сСйчас ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅ΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π°Π²Ρ‚ΠΎΡ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€. И рассматриваСм Patroni ΠΊΠ°ΠΊ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. Π§Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ Π² качСствС плюсов ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Repmgr?

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ вопрос ΠΏΡ€ΠΎ синхронныС Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ Π±Ρ‹Π». Π£ нас Π½ΠΈΠΊΡ‚ΠΎ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΡƒΡŽ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡŽ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ всСм ΡΡ‚Ρ€Π°ΡˆΠ½ΠΎ (Π£ΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ нСсколько ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ Π½Π΅ Π·Π°ΠΌΠ΅Ρ‡Π°Π»ΠΈ β€” ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ Π΄ΠΎΠΊΠ»Π°Π΄Ρ‡ΠΈΠΊΠ°). Но ΠΌΡ‹ для сСбя Π²Ρ‹Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Ρ‡Ρ‚ΠΎ Π² кластСрС синхронной Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Ρ‚Ρ€ΠΈ ΡƒΠ·Π»Π° ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ, Ссли Ρƒ нас Π΄Π²Π° ΡƒΠ·Π»Π° ΠΈ Ссли мастСр ΠΈΠ»ΠΈ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ° Π²Ρ‹ΡˆΠ»ΠΈ ΠΈΠ· строя, Ρ‚ΠΎ Patroni ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ этот ΡƒΠ·Π΅Π» Π² Standalone-Ρ€Π΅ΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π»ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. Π’ этом случаС Π΅ΡΡ‚ΡŒ риски ΠΏΠΎΡ‚Π΅Ρ€ΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

ΠžΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ вопроса, Ρ‚ΠΎ ΠΌΡ‹ использовали Repmgr ΠΈ Π΄ΠΎ сих ΠΏΠΎΡ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρƒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°Ρ… ΠΏΠΎ историчСским ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ. Π§Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ? Π’ Patroni Π°Π²Ρ‚ΠΎΡ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€ ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ, Π² Repmgr Π°Π²Ρ‚ΠΎΡ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€ ΠΈΠ΄Π΅Ρ‚ ΡƒΠΆΠ΅ ΠΊΠ°ΠΊ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ„ΠΈΡ‡Π°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½ΡƒΠΆΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ. НуТно Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Repmgr daemon Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡƒΠ·Π»Π΅ ΠΈ Ρ‚ΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π°Π²Ρ‚ΠΎΡ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ€ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ.

Repmgr провСряСт – ΠΆΠΈΠ²Ρ‹Π΅ Π»ΠΈ ΡƒΠ·Π»Ρ‹ Postgres. Repmgr процСссы ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ сущСствованиС Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°, это Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ эффСктивный ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Ρ‚.ΠΊ. ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ слоТныС случаи сСтСвой изоляции ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ большой Repmgr кластСр ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π·Π²Π°Π»ΠΈΡ‚ΡŒΡΡ Π½Π° нСсколько Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ. Π”Π°Π²Π½ΠΎ Π½Π΅ слСТу Π·Π° Repmgr, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ это пофиксили… Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈ Π½Π΅Ρ‚. А Π²ΠΎΡ‚ вынос ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ состоянии кластСра Π² DCS, ΠΊΠ°ΠΊ Π΄Π΅Π»Π°Π΅Ρ‚ Stolon, Patroni, это Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ТизнСспособный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚.

АлСксСй, Ρƒ мСня вопрос, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, ламСрский. Π’Ρ‹ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΠΏΠ΅Ρ€Π²Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² DCS вынСсли с локальной ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Π½Π° ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ ΡƒΠ·Π΅Π». ПонимаСм, Ρ‡Ρ‚ΠΎ ΡΠ΅Ρ‚ΡŒ – это Π²Π΅Ρ‰ΡŒ, которая ΠΈΠΌΠ΅Π΅Ρ‚ свои особСнности, ΠΎΠ½Π° сама ΠΏΠΎ сСбС ΠΆΠΈΠ²Π΅Ρ‚. И Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚, Ссли ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ DCS-кластСр стал нСдоступСн? ΠŸΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ Π½Π΅ Π±ΡƒΠ΄Ρƒ, ΠΈΡ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ масса: ΠΎΡ‚ ΠΊΡ€ΠΈΠ²Ρ‹Ρ… Ρ€ΡƒΠΊ сСтСвиков Π΄ΠΎ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

Π― Π½Π΅ ΠΏΡ€ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠ» это вслух, Π½ΠΎ кластСр DCS Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ отказоустойчивым, Ρ‚. Π΅. это Π½Π΅Ρ‡Π΅Ρ‚Π½ΠΎΠ΅ количСство ΡƒΠ·Π»ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ²ΠΎΡ€ΡƒΠΌ ΠΌΠΎΠ³ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ. Π§Ρ‚ΠΎ происходит, Ссли кластСр DCS стал нСдоступСн, Π»ΠΈΠ±ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ ΠΊΠ²ΠΎΡ€ΡƒΠΌ, Ρ‚. Π΅. ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ сСтСвой сплит ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ°Π· ΡƒΠ·Π»ΠΎΠ²? Π’ этом случаС кластСр Patroni ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π² read only Ρ€Π΅ΠΆΠΈΠΌ. ΠšΠ»Π°ΡΡ‚Π΅Ρ€ Patroni Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ состояниС кластСра ΠΈ Ρ‡Ρ‚ΠΎ Π΅ΠΌΡƒ Π΄Π΅Π»Π°Ρ‚ΡŒ. Он Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ²ΡΠ·Π°Ρ‚ΡŒΡΡ с DCS ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ‚Π°ΠΌ Π½ΠΎΠ²ΠΎΠ΅ состояниС кластСра, поэтому вСсь кластСр ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π² read only. И ΠΆΠ΄Π΅Ρ‚ ΠΈΠ»ΠΈ Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ Π²ΠΌΠ΅ΡˆΠ°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π° ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΈΠ»ΠΈ ΠΊΠΎΠ³Π΄Π° DCS восстановится.

Π“Ρ€ΡƒΠ±ΠΎ говоря, DCS для нас становится сСрвисом Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΆΠ΅ Π²Π°ΠΆΠ½Ρ‹ΠΌ, ΠΊΠ°ΠΊ ΠΈ сама Π±Π°Π·Π°?

Π”Π°-Π΄Π°. Π’ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΈΡ… соврСмСнных компаниях Service Discovery – это Π½Π΅ΠΎΡ‚ΡŠΠ΅ΠΌΠ»Π΅ΠΌΠ°Ρ Ρ‡Π°ΡΡ‚ΡŒ инфраструктуры. Он внСдряСтся Π΄Π°ΠΆΠ΅ Ρ€Π°Π½ΡŒΡˆΠ΅, Ρ‡Π΅ΠΌ появилась Π΄Π°ΠΆΠ΅ Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… Π² инфраструктурС. Условно говоря, Π·Π°ΠΏΡƒΡΡ‚ΠΈΠ»ΠΈΡΡŒ инфраструктуру, Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΠ»ΠΈΡΡŒ Π² Π”Π¦, Π° Ρƒ нас сразу Service Discovery Π΅ΡΡ‚ΡŒ. Если это Consul, Ρ‚ΠΎ Π½Π° Π½Π΅ΠΌ ΠΈ DNS ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ построСн. Если это Etcd, Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒ ΠΈΠ· кластСра Kubernetes, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΆΠ΅ всС ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ. МнС каТСтся, Ρ‡Ρ‚ΠΎ Service Discovery – это ΡƒΠΆΠ΅ Π½Π΅ΠΎΡ‚ΡŠΠ΅ΠΌΠ»Π΅ΠΌΠ°Ρ Ρ‡Π°ΡΡ‚ΡŒ соврСмСнных инфраструктур. И ΠΎ Π½Π΅ΠΌ Π΄ΡƒΠΌΠ°ΡŽΡ‚ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Ρ€Π°Π½ΡŒΡˆΠ΅, Ρ‡Π΅ΠΌ ΠΎ Π±Π°Π·Π°Ρ… Π΄Π°Π½Π½Ρ‹Ρ….

Бпасибо!

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com