Π ΡΡΠ°ΡΡΠ΅ Ρ ΡΠ°ΡΡΠΊΠ°ΠΆΡ, ΠΊΠ°ΠΊ ΠΌΡ ΠΏΠΎΠ΄ΠΎΡΠ»ΠΈ ΠΊ Π²ΠΎΠΏΡΠΎΡΡ ΠΎΡΠΊΠ°Π·ΠΎΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΡΡΠΈ PostgreSQL, ΠΏΠΎΡΠ΅ΠΌΡ ΡΡΠΎ ΡΡΠ°Π»ΠΎ Π΄Π»Ρ Π½Π°Ρ Π²Π°ΠΆΠ½ΠΎ ΠΈ ΡΡΠΎ Π² ΠΈΡΠΎΠ³Π΅ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ.
Π£ Π½Π°Ρ Π²ΡΡΠΎΠΊΠΎΠ½Π°Π³ΡΡΠΆΠ΅Π½Π½ΡΠΉ ΡΠ΅ΡΠ²ΠΈΡ: 2,5 ΠΌΠ»Π½ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΏΠΎ Π²ΡΠ΅ΠΌΡ ΠΌΠΈΡΡ, 50Π+ Π°ΠΊΡΠΈΠ²Π½ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΊΠ°ΠΆΠ΄ΡΠΉ Π΄Π΅Π½Ρ. Π‘Π΅ΡΠ²Π΅ΡΠ° Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² Amazone Π² ΠΎΠ΄Π½ΠΎΠΌ ΡΠ΅Π³ΠΈΠΎΠ½Π΅ ΠΡΠ»Π°Π½Π΄ΠΈΠΈ: Π² ΡΠ°Π±ΠΎΡΠ΅ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ 100+ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ², ΠΈΠ· Π½ΠΈΡ ΠΏΠΎΡΡΠΈ 50 β Ρ Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ .
ΠΠ΅ΡΡ backend β Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΌΠΎΠ½ΠΎΠ»ΠΈΡΠ½ΠΎΠ΅ stateful-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Java, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π΄Π΅ΡΠΆΠΈΡ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎΠ΅ websocket ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ. ΠΡΠΈ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΠ°Π±ΠΎΡΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ Π΄ΠΎΡΠΊΠ΅ Π²ΡΠ΅ ΠΎΠ½ΠΈ Π²ΠΈΠ΄ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΌΡ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ Π² Π±Π°Π·Ρ. Π£ Π½Π°Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ 10Π Π·Π°ΠΏΡΠΎΡΠΎΠ² Π² ΡΠ΅ΠΊΡΠ½Π΄Ρ ΠΊ Π½Π°ΡΠΈΠΌ Π±Π°Π·Π°ΠΌ. Π ΠΏΠΈΠΊΠΎΠ²ΠΎΠΉ Π½Π°Π³ΡΡΠ·ΠΊΠ΅ Π² Redis ΠΌΡ ΠΏΠΈΡΠ΅ΠΌ ΠΏΠΎ 80-100Π Π·Π°ΠΏΡΠΎΡΠΎΠ² Π² ΡΠ΅ΠΊΡΠ½Π΄Ρ.
ΠΠΎΡΠ΅ΠΌΡ ΠΌΡ ΠΏΠ΅ΡΠ΅ΡΠ»ΠΈ Ρ Redis Π½Π° PostgreSQL
ΠΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ Π½Π°Ρ ΡΠ΅ΡΠ²ΠΈΡ ΡΠ°Π±ΠΎΡΠ°Π» Ρ Redis, key-value Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΠΌ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Ρ ΡΠ°Π½ΠΈΡ Π²ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ°.
ΠΠ»ΡΡΡ Redis:
- ΠΡΡΠΎΠΊΠ°Ρ ΡΠΊΠΎΡΠΎΡΡΡ ΠΎΡΠ²Π΅ΡΠ°, Ρ.ΠΊ. Π²ΡΡ Ρ ΡΠ°Π½ΠΈΡΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ;
- Π£Π΄ΠΎΠ±ΡΡΠ²ΠΎ Π±ΡΠΊΠ°ΠΏΠ° ΠΈ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ.
ΠΠΈΠ½ΡΡΡ Redis Π΄Π»Ρ Π½Π°Ρ:
- ΠΠ΅Ρ Π½Π°ΡΡΠΎΡΡΠΈΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ. ΠΡ ΠΏΡΡΠ°Π»ΠΈΡΡ ΠΈΠΌΠΈΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡ Π½Π° ΡΡΠΎΠ²Π½Π΅ Π½Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, ΡΡΠΎ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° Ρ ΠΎΡΠΎΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ ΠΈ ΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΎ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΠΎΡΠ΅Π½Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.
- ΠΠ±ΡΡΠΌ Π΄Π°Π½Π½ΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ ΠΏΠ°ΠΌΡΡΠΈ. ΠΡΠΈ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° Π΄Π°Π½Π½ΡΡ ΠΏΠ°ΠΌΡΡΡ Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΡΠΈ, ΠΈ, Π² ΠΊΠΎΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΎΠ², ΠΌΡ ΡΠΏΡΡΠΌΡΡ Π² Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ³ΠΎ ΠΈΠ½ΡΡΠ°Π½ΡΠ°, ΡΡΠΎ Π² AWS ΡΡΠ΅Π±ΡΠ΅Ρ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π½Π°ΡΠ΅Π³ΠΎ ΡΠ΅ΡΠ²ΠΈΡΠ° Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΈΠΏΠ° ΠΈΠ½ΡΡΠ°Π½ΡΠ°.
- ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΡΠΎΠ²Π΅Π½Ρ Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ latency, Ρ.ΠΊ. Ρ Π½Π°Ρ ΠΎΡΠ΅Π½Ρ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π·Π°ΠΏΡΠΎΡΠΎΠ². ΠΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ Π΄Π»Ρ Π½Π°Ρ ΡΡΠΎΠ²Π΅Π½Ρ Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ β 17-20 ms. ΠΡΠΈ ΡΡΠΎΠ²Π½Π΅ 30-40 ms ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π΄ΠΎΠ»Π³ΠΈΠ΅ ΠΎΡΠ²Π΅ΡΡ Π½Π° Π·Π°ΠΏΡΠΎΡΡ Π½Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ Π΄Π΅Π³ΡΠ°Π΄Π°ΡΠΈΡ ΡΠ΅ΡΠ²ΠΈΡΠ°. Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, Ρ Π½Π°Ρ ΡΡΠΎ ΡΠ»ΡΡΠΈΠ»ΠΎΡΡ Π² ΡΠ΅Π½ΡΡΠ±ΡΠ΅ 2018 Π³ΠΎΠ΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΈΠ½ΡΡΠ°Π½ΡΠΎΠ² Ρ Redis ΠΏΠΎΡΠ΅ΠΌΡ-ΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΠ» latency Π² 2 ΡΠ°Π·Π° Π±ΠΎΠ»ΡΡΠ΅ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ. ΠΠ»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΌΡ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΠΈ ΡΠ΅ΡΠ²ΠΈΡ Π² ΡΠ΅ΡΠ΅Π΄ΠΈΠ½Π΅ ΡΠ°Π±ΠΎΡΠ΅Π³ΠΎ Π΄Π½Ρ Π΄Π»Ρ Π²Π½Π΅ΠΏΠ»Π°Π½ΠΎΠ²ΠΎΠ³ΠΎ maintenance ΠΈ Π·Π°ΠΌΠ΅Π½ΠΈΠ»ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ½ΡΠΉ ΠΈΠ½ΡΡΠ°Π½Ρ Redis.
- ΠΠ΅Π³ΠΊΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π½Π΅ΠΊΠΎΠ½ΡΠΈΠ½ΡΡΠ΅Π½ΡΠ½ΠΎΡΡΡ Π΄Π°Π½Π½ΡΡ Π΄Π°ΠΆΠ΅ ΠΏΡΠΈ Π½Π΅Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΎΡΠΈΠ±ΠΊΠ°Ρ Π² ΠΊΠΎΠ΄Π΅ ΠΈ ΠΏΠΎΡΠΎΠΌ ΠΏΠΎΡΡΠ°ΡΠΈΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π½Π° Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π΄Π»Ρ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΡΠΈΡ Π΄Π°Π½Π½ΡΡ .
ΠΡ ΡΡΠ»ΠΈ ΠΌΠΈΠ½ΡΡΡ ΠΈ ΠΏΠΎΠ½ΡΠ»ΠΈ, ΡΡΠΎ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅ΡΠ΅Π΅Ρ Π°ΡΡ Π½Π° ΡΡΠΎ-ΡΠΎ Π±ΠΎΠ»Π΅Π΅ ΡΠ΄ΠΎΠ±Π½ΠΎΠ΅, Ρ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΡΠΌΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡΠΌΠΈ ΠΈ ΠΌΠ΅Π½ΡΡΠ΅ΠΉ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΡ ΠΎΡ latency. ΠΡΠΎΠ²Π΅Π»ΠΈ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΏΡΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π»ΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΠΈ Π²ΡΠ±ΡΠ°Π»ΠΈ PostgreSQL.
ΠΠ° Π½ΠΎΠ²ΡΡ ΠΠ ΠΌΡ ΠΏΠ΅ΡΠ΅Π΅Π·ΠΆΠ°Π΅ΠΌ ΡΠΆΠ΅ 1,5 Π³ΠΎΠ΄Π° ΠΈ ΠΏΠ΅ΡΠ΅Π²Π΅Π·Π»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π½Π΅Π±ΠΎΠ»ΡΡΡΡ ΡΠ°ΡΡΡ Π΄Π°Π½Π½ΡΡ
, ΠΏΠΎΡΡΠΎΠΌΡ ΡΠ΅ΠΉΡΠ°Ρ ΡΠ°Π±ΠΎΡΠ°Π΅ΠΌ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Ρ Redis ΠΈ PostgreSQL. ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΎΠ± ΡΡΠ°ΠΏΠ°Ρ
ΠΏΠ΅ΡΠ΅Π΅Π·Π΄Π° ΠΈ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ Π΄Π°Π½Π½ΡΡ
ΠΌΠ΅ΠΆΠ΄Ρ ΠΠ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ Π²
ΠΠΎΠ³Π΄Π° ΠΌΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π°ΡΠΈΠ½Π°Π»ΠΈ ΠΏΠ΅ΡΠ΅Π΅Π·ΠΆΠ°ΡΡ, Π½Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ Π½Π°ΠΏΡΡΠΌΡΡ Ρ ΠΠ ΠΈ ΠΎΠ±ΡΠ°ΡΠ°Π»ΠΎΡΡ ΠΊ ΠΌΠ°ΡΡΠ΅ΡΡ Redis ΠΈ PostgreSQL. ΠΠ»Π°ΡΡΠ΅Ρ PostgreSQL ΡΠΎΡΡΠΎΡΠ» ΠΈΠ· ΠΌΠ°ΡΡΠ΅ΡΠ° ΠΈ ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈ Ρ Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΎΠΉ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠ΅ΠΉ. Π’Π°ΠΊ Π²ΡΠ³Π»ΡΠ΄Π΅Π»Π° ΡΡ
Π΅ΠΌΠ° ΡΠ°Π±ΠΎΡΡ Ρ Π±Π°Π·Π°ΠΌΠΈ:
ΠΠ½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ PgBouncer
ΠΠΎΠΊΠ° ΠΌΡ ΠΏΠ΅ΡΠ΅Π΅Π·ΠΆΠ°Π»ΠΈ, ΠΏΡΠΎΠ΄ΡΠΊΡ ΡΠΎΠΆΠ΅ ΡΠ°Π·Π²ΠΈΠ²Π°Π»ΡΡ: ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π»ΠΎΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ Ρ PostgreSQL, ΠΈ Π½Π°ΠΌ ΡΡΠ°Π»ΠΎ Π½Π΅ Ρ Π²Π°ΡΠ°ΡΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ. PostgreSQL Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΠΈ ΠΏΠΎΡΡΠ΅Π±Π»ΡΠ΅Ρ ΡΠ΅ΡΡΡΡΡ. Π£Π²Π΅Π»ΠΈΡΠΈΠ²Π°ΡΡ ΡΠΈΡΠ»ΠΎ ΠΊΠΎΠ½Π½Π΅ΠΊΡΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ°, ΠΈΠ½Π°ΡΠ΅ Π΅ΡΡΡ ΡΠ°Π½Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π½Π΅ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΡ ΡΠ°Π±ΠΎΡΡ ΠΠ. ΠΠ΄Π΅Π°Π»ΡΠ½ΡΠΌ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠΌ Π² ΡΠ°ΠΊΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ Π±ΡΠ΄Π΅Ρ Π²ΡΠ±ΠΎΡ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠ° ΠΊΠΎΠ½Π½Π΅ΠΊΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΡΠ°Π½Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄ Π±Π°Π·ΠΎΠΉ.
Π£ Π½Π°Ρ Π±ΡΠ»ΠΎ Π΄Π²Π° Π²Π°ΡΠΈΠ°Π½ΡΠ° Π΄Π»Ρ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠ° ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ: Pgpool ΠΈ PgBouncer. ΠΠΎ ΠΏΠ΅ΡΠ²ΡΠΉ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΎΠ½Π½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ ΡΠ°Π±ΠΎΡΡ Ρ Π±Π°Π·ΠΎΠΉ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ Π²ΡΠ±ΡΠ°Π»ΠΈ PgBouncer.
ΠΡ Π½Π°ΡΡΡΠΎΠΈΠ»ΠΈ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΡΡ
Π΅ΠΌΡ ΡΠ°Π±ΠΎΡΡ: Π½Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡ PgBouncer, Π·Π° ΠΊΠΎΡΠΎΡΡΠΌ Π½Π°Ρ
ΠΎΠ΄ΡΡΡΡ masters PostgreSQL, Π° Π·Π° ΠΊΠ°ΠΆΠ΄ΡΠΌ ΠΌΠ°ΡΡΠ΅ΡΠΎΠΌ β ΠΎΠ΄Π½Π° ΡΠ΅ΠΏΠ»ΠΈΠΊΠ° Ρ Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΎΠΉ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠ΅ΠΉ.
ΠΡΠΈ ΡΡΠΎΠΌ ΠΌΡ Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ Ρ
ΡΠ°Π½ΠΈΡΡ Π²Π΅ΡΡ ΠΎΠ±ΡΡΠΌ Π΄Π°Π½Π½ΡΡ
Π² PostgreSQL ΠΈ Π΄Π»Ρ Π½Π°Ρ Π±ΡΠ»Π° Π²Π°ΠΆΠ½Π° ΡΠΊΠΎΡΠΎΡΡΡ ΡΠ°Π±ΠΎΡΡ Ρ Π±Π°Π·ΠΎΠΉ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ Π½Π°ΡΠ°Π»ΠΈ ΡΠ°ΡΠ΄ΠΈΡΠΎΠ²Π°ΡΡ PostgreSQL Π½Π° ΠΏΡΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΌ ΡΡΠΎΠ²Π½Π΅. ΠΠΏΠΈΡΠ°Π½Π½Π°Ρ Π²ΡΡΠ΅ ΡΡ
Π΅ΠΌΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ΄ΠΎΠ±Π½ΠΎΠΉ: ΠΏΡΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠ°ΡΠ΄Π° PostgreSQL Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ PgBouncer ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠ°Π·Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π½ΠΎΠ²ΡΠΌ ΡΠ°ΡΠ΄ΠΎΠΌ.
ΠΡΠΊΠ°Π·ΠΎΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΡΡΡ PgBouncer
ΠΡΠ° ΡΡ Π΅ΠΌΠ° ΠΏΡΠΎΡΠ°Π±ΠΎΡΠ°Π»Π° Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ°, ΠΏΠΎΠΊΠ° Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΈΠ½ΡΡΠ°Π½Ρ PgBouncer Π½Π΅ ΡΠΌΠ΅Ρ. ΠΡ Π½Π°Ρ ΠΎΠ΄ΠΈΠΌΡΡ Π² AWS, Π³Π΄Π΅ Π²ΡΠ΅ ΠΈΠ½ΡΡΠ°Π½ΡΡ Π·Π°ΠΏΡΡΠ΅Π½Ρ Π½Π° ΠΆΠ΅Π»Π΅Π·Π΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈ ΡΠΌΠΈΡΠ°Π΅Ρ. Π ΡΠ°ΠΊΠΈΡ ΡΠ»ΡΡΠ°ΡΡ ΠΈΠ½ΡΡΠ°Π½Ρ ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅Π΅Π·ΠΆΠ°Π΅Ρ Π½Π° Π½ΠΎΠ²ΠΎΠ΅ ΠΆΠ΅Π»Π΅Π·ΠΎ ΠΈ ΡΠ½ΠΎΠ²Π° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. Π’Π°ΠΊ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ ΠΈ Ρ PgBouncer, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΠ½ ΡΡΠ°Π» Π½Π΅Π΄ΠΎΡΡΡΠΏΠ΅Π½. Π Π΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ ΡΡΠΎΠ³ΠΎ ΠΏΠ°Π΄Π΅Π½ΠΈΡ ΡΡΠ°Π»Π° Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΡ Π½Π°ΡΠ΅Π³ΠΎ ΡΠ΅ΡΠ²ΠΈΡΠ° Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ 25 ΠΌΠΈΠ½ΡΡ. AWS Π΄Π»Ρ ΡΠ°ΠΊΠΈΡ ΡΠΈΡΡΠ°ΡΠΈΠΉ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΠ·Π±ΡΡΠΎΡΠ½ΠΎΡΡΡ Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΡΡΠΎ Π½Π΅ Π±ΡΠ»ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Ρ Π½Π°Ρ Π½Π° ΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ.
ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΌΡ Π²ΡΠ΅ΡΡΡΠ· Π·Π°Π΄ΡΠΌΠ°Π»ΠΈΡΡ ΠΎΠ± ΠΎΡΠΊΠ°Π·ΠΎΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΡΡΠΈ PgBouncer ΠΈ ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΠ² PostgreSQL, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½Π°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ ΠΌΠΎΠ³Π»Π° ΠΏΠΎΠ²ΡΠΎΡΠΈΡΡΡΡ Ρ Π»ΡΠ±ΡΠΌ ΠΈΠ½ΡΡΠ°Π½ΡΠΎΠΌ Π² Π½Π°ΡΠ΅ΠΌ AWS Π°ΠΊΠΊΠ°ΡΠ½ΡΠ΅.
Π‘Ρ Π΅ΠΌΡ ΠΎΡΠΊΠ°Π·ΠΎΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΡΡΠΈ PgBouncer ΠΌΡ ΠΏΠΎΡΡΡΠΎΠΈΠ»ΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ: Π²ΡΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ Network Load Balancer, Π·Π° ΠΊΠΎΡΠΎΡΡΠΌ ΡΡΠΎΡΡ Π΄Π²Π° PgBouncer. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· PgBouncer ΡΠΌΠΎΡΡΠΈΡ Π½Π° ΠΎΠ΄Π½ΠΈ ΠΈ ΡΠ΅ ΠΆΠ΅ master PostgreSQL ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ°ΡΠ΄Π°. Π ΡΠ»ΡΡΠ°Π΅ ΠΏΠΎΠ²ΡΠΎΡΠ΅Π½ΠΈΡ ΡΠΈΡΡΠ°ΡΠΈΠΈ Ρ ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ΠΌ ΠΈΠ½ΡΡΠ°Π½ΡΠ° AWS, Π²Π΅ΡΡ ΡΡΠ°ΡΠΈΠΊ ΠΏΠ΅ΡΠ΅Π½Π°Π²ΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΡΠ΅Π· Π΄ΡΡΠ³ΠΎΠΉ PgBouncer. ΠΡΠΊΠ°Π·ΠΎΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΡΡΡ Network Load Balancer ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ AWS.
Π’Π°ΠΊΠ°Ρ ΡΡ
Π΅ΠΌΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π±Π΅Π· ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π½ΠΎΠ²ΡΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠ° PgBouncer.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΡΠΊΠ°Π·ΠΎΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° PostgreSQL
ΠΡΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΠΈ ΡΡΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ ΠΌΡ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π»ΠΈ ΡΠ°Π·Π½ΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ: ΡΠ°ΠΌΠΎΠΏΠΈΡΠ½ΡΠΉ failover, repmgr, AWS RDS, Patroni.
Π‘Π°ΠΌΠΎΠΏΠΈΡΠ½ΡΠ΅ ΡΠΊΡΠΈΠΏΡΡ
ΠΠΎΠ³ΡΡ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΡΡ ΡΠ°Π±ΠΎΡΡ ΠΌΠ°ΡΡΠ΅ΡΠ° ΠΈ, Π² ΡΠ»ΡΡΠ°Π΅ Π΅Π³ΠΎ ΠΏΠ°Π΄Π΅Π½ΠΈΡ, ΠΏΡΠΎΠ΄Π²ΠΈΠ³Π°ΡΡ ΡΠ΅ΠΏΠ»ΠΈΠΊΡ Π΄ΠΎ ΠΌΠ°ΡΡΠ΅ΡΠ° ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ PgBouncer.
ΠΠ»ΡΡΡ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° Π² ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΡΠΎΡΡΠΎΡΠ΅, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π²Ρ ΡΠ°ΠΌΠΈ ΠΏΠΈΡΠΈΡΠ΅ ΡΠΊΡΠΈΠΏΡΡ ΠΈ ΡΠΎΡΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΡΠ΅, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ.
ΠΠΈΠ½ΡΡΡ:
- ΠΠ°ΡΡΠ΅Ρ ΠΌΠΎΠ³ Π½Π΅ ΡΠΌΠ΅ΡΠ΅ΡΡ, Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠ³ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΡΠΈ ΡΠ΅ΡΠ΅Π²ΠΎΠΉ ΡΠ±ΠΎΠΉ. Failover, Π½Π΅ Π·Π½Π°Ρ ΠΎΠ± ΡΡΠΎΠΌ, ΠΏΡΠΎΠ΄Π²ΠΈΠ½Π΅Ρ ΡΠ΅ΠΏΠ»ΠΈΠΊΡ Π΄ΠΎ ΠΌΠ°ΡΡΠ΅ΡΠ°, Π° ΡΡΠ°ΡΡΠΉ ΠΌΠ°ΡΡΠ΅Ρ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠΌ Π΄Π²Π° ΡΠ΅ΡΠ²Π΅ΡΠ° Π² ΡΠΎΠ»ΠΈ master ΠΈ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ Π·Π½Π°ΡΡ, Π½Π° ΠΊΠ°ΠΊΠΎΠΌ ΠΈΠ· Π½ΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ Π°ΠΊΡΡΠ°Π»ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅. Π’Π°ΠΊΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ Π½Π°Π·ΡΠ²Π°ΡΡ Π΅ΡΡ split-brain;
- ΠΡ ΠΎΡΡΠ°Π»ΠΈΡΡ Π±Π΅Π· ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈ. Π Π½Π°ΡΠ΅ΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΌΠ°ΡΡΠ΅Ρ ΠΈ ΠΎΠ΄Π½Π° ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°, ΠΏΠΎΡΠ»Π΅ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ° ΠΏΡΠΎΠ΄Π²ΠΈΠ³Π°Π΅ΡΡΡ Π΄ΠΎ ΠΌΠ°ΡΡΠ΅ΡΠ° ΠΈ Ρ Π½Π°Ρ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅Ρ ΡΠ΅ΠΏΠ»ΠΈΠΊ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΡΡΠ½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π½ΠΎΠ²ΡΡ ΡΠ΅ΠΏΠ»ΠΈΠΊΡ;
- ΠΡΠΆΠ΅Π½ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ ΡΠ°Π±ΠΎΡΡ failover, ΠΏΡΠΈ ΡΡΠΎΠΌ Ρ Π½Π°Ρ 12 ΡΠ°ΡΠ΄ΠΎΠ² PostgreSQL, Π° Π·Π½Π°ΡΠΈΡ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΡΡ 12 ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΠ². ΠΡΠΈ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠ°ΡΠ΄ΠΎΠ² Π½Π°Π΄ΠΎ Π΅ΡΡ Π½Π΅ Π·Π°Π±ΡΡΡ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ failover.
Π‘Π°ΠΌΠΎΠΏΠΈΡΠ½ΡΠΉ failover Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΎΡΠ΅Π½Ρ ΡΠ»ΠΎΠΆΠ½ΠΎ ΠΈ ΡΡΠ΅Π±ΡΠ΅Ρ Π½Π΅ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ. ΠΡΠΈ ΠΎΠ΄Π½ΠΎΠΌ PostgreSQL ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ°ΠΌΡΠΌ ΠΏΡΠΎΡΡΡΠΌ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠΌ, Π½ΠΎ ΠΎΠ½ Π½Π΅ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΡΠ΅ΡΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ Π½Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ Π½Π°Ρ.
Repmgr
Replication Manager for PostgreSQL clusters, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΌΠ΅Π΅Ρ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΡΠ°Π±ΠΎΡΠΎΠΉ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° PostgreSQL. ΠΡΠΈ ΡΡΠΎΠΌ Π² Π½ΡΠΌ Π½Π΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ failover βΠΈΠ· ΠΊΠΎΡΠΎΠ±ΠΊΠΈβ, ΠΏΠΎΡΡΠΎΠΌΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΠΈΡΠ°ΡΡ ΡΠ²ΠΎΡ βΠΎΠ±ΡΡΡΠΊΡβ ΠΏΠΎΠ²Π΅ΡΡ Π³ΠΎΡΠΎΠ²ΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ. Π’Π°ΠΊ ΡΡΠΎ Π²ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ Π΄Π°ΠΆΠ΅ ΡΠ»ΠΎΠΆΠ½Π΅Π΅, ΡΠ΅ΠΌ Ρ ΡΠ°ΠΌΠΎΠΏΠΈΡΠ½ΡΠΌΠΈ ΡΠΊΡΠΈΠΏΡΠ°ΠΌΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ Repmgr ΠΌΡ Π΄Π°ΠΆΠ΅ Π½Π΅ ΡΡΠ°Π»ΠΈ ΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ.
AWS RDS
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π²ΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠ΅ Π΄Π»Ρ Π½Π°Ρ, ΡΠΌΠ΅Π΅Ρ Π΄Π΅Π»Π°ΡΡ Π±ΡΠΊΠ°ΠΏΡ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΏΡΠ» ΠΊΠΎΠ½Π½Π΅ΠΊΡΠΎΠ². ΠΠΌΠ΅Π΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅: ΠΏΡΠΈ ΡΠΌΠ΅ΡΡΠΈ ΠΌΠ°ΡΡΠ΅ΡΠ° ΡΠ΅ΠΏΠ»ΠΈΠΊΠ° ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π½ΠΎΠ²ΡΠΌ ΠΌΠ°ΡΡΠ΅ΡΠΎΠΌ, Π° AWS ΠΌΠ΅Π½ΡΠ΅Ρ dns Π·Π°ΠΏΠΈΡΡ Π½Π° Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠ΅ΡΠ°, ΠΏΡΠΈ ΡΡΠΎΠΌ ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈ ΠΌΠΎΠ³ΡΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠ°Π·Π½ΡΡ AZ.
Π ΠΌΠΈΠ½ΡΡΠ°ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ½Π΅ΡΡΠΈ ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ ΡΠΎΠ½ΠΊΠΈΡ Π½Π°ΡΡΡΠΎΠ΅ΠΊ. ΠΠ°ΠΊ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠΎΠ½ΠΊΠΈΡ Π½Π°ΡΡΡΠΎΠ΅ΠΊ: Π½Π° Π½Π°ΡΠΈΡ ΠΈΠ½ΡΡΠ°Π½ΡΠ°Ρ ΡΡΠΎΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π΄Π»Ρ tcp ΠΊΠΎΠ½Π½Π΅ΠΊΡΠΎΠ², ΡΠ΅Π³ΠΎ, ΠΊ ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, Π½Π΅Π»ΡΠ·Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π² RDS:
net.ipv4.tcp_keepalive_time=10
net.ipv4.tcp_keepalive_intvl=1
net.ipv4.tcp_keepalive_probes=5
net.ipv4.tcp_retries2=3
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ Ρ AWS RDS ΡΠ΅Π½Π° ΠΏΠΎΡΡΠΈ Π² Π΄Π²Π° ΡΠ°Π·Π° Π΄ΠΎΡΠΎΠΆΠ΅ ΠΎΠ±ΡΡΠ½ΠΎΠΉ ΡΠ΅Π½Ρ instance, ΡΡΠΎ ΠΈ ΠΏΠΎΡΠ»ΡΠΆΠΈΠ»ΠΎ Π³Π»Π°Π²Π½ΠΎΠΉ ΠΏΡΠΈΡΠΈΠ½ΠΎΠΉ ΠΎΡΠΊΠ°Π·Π° ΠΎΡ ΡΡΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ.
Patroni
ΠΡΠΎ ΡΠ°Π±Π»ΠΎΠ½ Π½Π° python Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ PostgreSQL Ρ Ρ ΠΎΡΠΎΡΠ΅ΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅ΠΉ, Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ failover ΠΈ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ Π½Π° github.
ΠΠ»ΡΡΡ Patroni:
- Π Π°ΡΠΏΠΈΡΠ°Π½ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, ΠΏΠΎΠ½ΡΡΠ½ΠΎ ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ;
- ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ failover ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΈΠ· ΠΊΠΎΡΠΎΠ±ΠΊΠΈ;
- ΠΠ°ΠΏΠΈΡΠ°Π½ Π½Π° python, Π° ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ ΡΠ°ΠΌΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΈΡΠ΅ΠΌ Π½Π° python, ΡΠΎ Π½Π°ΠΌ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΡΠ΅ ΡΠ°Π·Π±ΠΈΡΠ°ΡΡΡΡ Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΄Π°ΠΆΠ΅ ΠΏΠΎΠΌΠΎΡΡ ΡΠ°Π·Π²ΠΈΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°;
- ΠΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ PostgreSQL, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΌΠ΅Π½ΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΡΡΠ°Π·Ρ Π½Π° Π²ΡΠ΅Ρ Π½ΠΎΠ΄Π°Ρ ΠΊΠ»Π°ΡΡΠ΅ΡΠ°, Π° Π΅ΡΠ»ΠΈ Π΄Π»Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊ ΠΊΠ»Π°ΡΡΠ΅ΡΠ°, ΡΠΎ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΠΎΠΏΡΡΡ ΠΆΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Patroni.
ΠΠΈΠ½ΡΡΡ:
- ΠΠ· Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π½Π΅ΠΏΠΎΠ½ΡΡΠ½ΠΎ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ PgBouncer. Π₯ΠΎΡΡ ΠΌΠΈΠ½ΡΡΠΎΠΌ ΡΡΠΎ Π½Π°Π·Π²Π°ΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π·Π°Π΄Π°ΡΠ° Patroni β ΡΠΏΡΠ°Π²Π»ΡΡΡ PostgreSQL, Π° ΠΊΠ°ΠΊ Π±ΡΠ΄ΡΡ Ρ ΠΎΠ΄ΠΈΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ Patroni β ΡΠΆΠ΅ Π½Π°ΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°;
- ΠΠ°Π»ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ Patroni Π½Π° Π±ΠΎΠ»ΡΡΠΈΡ ΠΎΠ±ΡΡΠΌΠ°Ρ , ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ Ρ Π½ΡΠ»Ρ.
Π ΠΈΡΠΎΠ³Π΅ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΡΠΊΠ°Π·ΠΎΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° ΠΌΡ Π²ΡΠ±ΡΠ°Π»ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ Patroni.
ΠΡΠΎΡΠ΅ΡΡ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ Patroni
ΠΠΎ Patroni Ρ Π½Π°Ρ Π±ΡΠ»ΠΎ 12 ΡΠ°ΡΠ΄ΠΎΠ² PostgreSQL Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΎΠ΄ΠΈΠ½ ΠΌΠ°ΡΡΠ΅Ρ ΠΈ ΠΎΠ΄Π½Π° ΡΠ΅ΠΏΠ»ΠΈΠΊΠ° Ρ Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΎΠΉ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠ΅ΠΉ. Π‘Π΅ΡΠ²Π΅ΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΎΠ±ΡΠ°ΡΠ°Π»ΠΈΡΡ ΠΊ Π±Π°Π·Π°ΠΌ Π΄Π°Π½Π½ΡΡ
ΡΠ΅ΡΠ΅Π· Network Load Balancer, Π·Π° ΠΊΠΎΡΠΎΡΡΠΌ ΡΡΠΎΡΠ»ΠΈ Π΄Π²Π° instance Ρ PgBouncer, Π° Π·Π° Π½ΠΈΠΌΠΈ Π½Π°Ρ
ΠΎΠ΄ΠΈΠ»ΠΈΡΡ Π²ΡΠ΅ PostgreSQL ΡΠ΅ΡΠ²Π΅ΡΠ°.
ΠΠ»Ρ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ Patroni Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π²ΡΠ±ΡΠ°ΡΡ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΊΠ»Π°ΡΡΠ΅ΡΠ°. Patroni ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠΌΠΈ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌΠΈ Ρ
ΡΠ°Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΉ, ΡΠ°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ etcd, Zookeeper, Π‘onsul. Π£ Π½Π°Ρ ΠΊΠ°ΠΊ ΡΠ°Π· Π½Π° ΠΏΡΠΎΠ΄Π΅ Π΅ΡΡΡ ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΠΉ ΠΊΠ»Π°ΡΡΠ΅Ρ Consul, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π² ΡΠ²ΡΠ·ΠΊΠ΅ Ρ Vault ΠΈ Π±ΠΎΠ»ΡΡΠ΅ ΠΌΡ Π΅Π³ΠΎ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ. ΠΡΠ»ΠΈΡΠ½ΡΠΉ ΠΏΠΎΠ²ΠΎΠ΄ Π½Π°ΡΠ°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Consul ΠΏΠΎ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
ΠΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Patroni Ρ Consul
Π£ Π½Π°Ρ Π΅ΡΡΡ ΠΊΠ»Π°ΡΡΠ΅Ρ Π‘onsul, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΡΡΡΡ Π½ΠΎΠ΄ ΠΈ ΠΊΠ»Π°ΡΡΠ΅Ρ Patroni, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π»ΠΈΠ΄Π΅ΡΠ° ΠΈ ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈ (Π² Patroni ΠΌΠ°ΡΡΠ΅Ρ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ Π»ΠΈΠ΄Π΅ΡΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ΡΠ°, Π° ΡΠ»Π΅ΠΉΠ²Ρ β ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΠΌΠΈ). ΠΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ½ΡΡΠ°Π½Ρ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° Patroni ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΠΏΠΎΡΡΠ»Π°Π΅Ρ Π² Consul ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠ»Π°ΡΡΠ΅ΡΠ°. ΠΠΎΡΡΠΎΠΌΡ ΠΈΠ· Π‘onsul Π²ΡΠ΅Π³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΡΠ·Π½Π°ΡΡ ΡΠ΅ΠΊΡΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° Patroni ΠΈ ΡΠΎΠ³ΠΎ, ΠΊΡΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈΠ΄Π΅ΡΠΎΠΌ Π² Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ.
ΠΠ»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Patroni ΠΊ Π‘onsul Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΈΠ·ΡΡΠΈΡΡ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ, ΡΡΠΎ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΠ°Π·Π°ΡΡ Ρ
ΠΎΡΡ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ http ΠΈΠ»ΠΈ https Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ ΡΠ°Π±ΠΎΡΠ°Π΅ΠΌ Ρ Π‘onsul, ΠΈ ΡΡ
Π΅ΠΌΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ:
host: the host:port for the Consul endpoint, in format: http(s)://host:port
scheme: (optional) http or https, defaults to http
ΠΡΠ³Π»ΡΠ΄ΠΈΡ ΠΏΡΠΎΡΡΠΎ, Π½ΠΎ ΡΡΡ Π½Π°ΡΠΈΠ½Π°ΡΡΡΡ ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½ΡΠ΅ ΠΊΠ°ΠΌΠ½ΠΈ. Π‘ Π‘onsul ΠΌΡ ΡΠ°Π±ΠΎΡΠ°Π΅ΠΌ ΠΏΠΎ Π·Π°ΡΠΈΡΡΠ½Π½ΠΎΠΌΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΡΠ΅ΡΠ΅Π· https ΠΈ Π½Π°Ρ ΠΊΠΎΠ½ΡΠΈΠ³ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
consul:
host: https://server.production.consul:8080
verify: true
cacert: {{ consul_cacert }}
cert: {{ consul_cert }}
key: {{ consul_key }}
ΠΠΎ ΡΠ°ΠΊ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. ΠΡΠΈ ΡΡΠ°ΡΡΠ΅ Patroni Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡΡΡ ΠΊ Π‘onsul, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΏΡΡΠ°Π΅ΡΡΡ Π²ΡΡ ΡΠ°Π²Π½ΠΎ ΠΈΠ΄ΡΠΈ ΠΏΠΎ http.
Π Π°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ ΠΏΠΎΠΌΠΎΠ³ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ Patroni. Π₯ΠΎΡΠΎΡΠΎ, ΡΡΠΎ ΠΎΠ½ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° python. ΠΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ host Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΏΠ°ΡΡΠΈΡΡΡ, Π° ΠΏΡΠΎΡΠΎΠΊΠΎΠ» Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΠ°Π·Π°ΡΡ Π² scheme. ΠΠΎΡ ΡΠ°ΠΊ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠΉ Π±Π»ΠΎΠΊ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π‘onsul Ρ Π½Π°Ρ:
consul:
host: server.production.consul:8080
scheme: https
verify: true
cacert: {{ consul_cacert }}
cert: {{ consul_cert }}
key: {{ consul_key }}
Consul-template
ΠΡΠ°ΠΊ, Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Π΄Π»Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΌΡ Π²ΡΠ±ΡΠ°Π»ΠΈ. Π’Π΅ΠΏΠ΅ΡΡ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡΡ, ΠΊΠ°ΠΊ PgBouncer Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΡ ΡΠ²ΠΎΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΏΡΠΈ ΡΠΌΠ΅Π½Π΅ Π»ΠΈΠ΄Π΅ΡΠ° Π² ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅ Patroni. Π Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π½Π° ΡΡΠΎΡ Π²ΠΎΠΏΡΠΎΡ ΠΎΡΠ²Π΅ΡΠ° Π½Π΅Ρ, Ρ.ΠΊ. ΡΠ°ΠΌ Π² ΠΏΡΠΈΠ½ΡΠΈΠΏΠ΅ Π½Π΅ ΠΎΠΏΠΈΡΠ°Π½Π° ΡΠ°Π±ΠΎΡΠ° Ρ PgBouncer.
Π ΠΏΠΎΠΈΡΠΊΠ°Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΌΡ Π½Π°ΡΠ»ΠΈ ΡΡΠ°ΡΡΡ (Π½Π°Π·Π²Π°Π½ΠΈΠ΅, ΠΊ ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, Π½Π΅ ΠΏΠΎΠΌΠ½Ρ), Π³Π΄Π΅ Π±ΡΠ»ΠΎ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ, ΡΡΠΎ Π‘onsul-template ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠΌΠΎΠ³ Π² ΡΠ²ΡΠ·ΠΊΠ΅ PgBouncer ΠΈ Patroni. ΠΡΠΎ ΠΏΠΎΠ΄ΡΠΎΠ»ΠΊΠ½ΡΠ»ΠΎ Π½Π°Ρ Π½Π° ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°Π±ΠΎΡΡ Consul-template.
ΠΠΊΠ°Π·Π°Π»ΠΎΡΡ, ΡΡΠΎ Π‘onsul-template ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° PostgreSQL Π² Π‘onsul. ΠΡΠΈ ΡΠΌΠ΅Π½Π΅ Π»ΠΈΠ΄Π΅ΡΠ° ΠΎΠ½ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ PgBouncer ΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π½Π° Π΅Ρ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΡ.
ΠΠΎΠ»ΡΡΠΎΠΉ ΠΏΠ»ΡΡ template Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ½ Ρ
ΡΠ°Π½ΠΈΡΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΊΠΎΠ΄Π°, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΡΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠ°ΡΠ΄Π° Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π½ΠΎΠ²ΡΠΉ ΠΊΠΎΠΌΠΌΠΈΡ ΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ template Π² Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Ρ ΠΏΡΠΈΠ½ΡΠΈΠΏ Infrastructure as code.
ΠΠΎΠ²Π°Ρ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° Ρ Patroni
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ ΡΠ°ΠΊΡΡ ΡΡ
Π΅ΠΌΡ ΡΠ°Π±ΠΎΡΡ:
ΠΡΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²ΡΠΈΠΊΡ β Π·Π° Π½ΠΈΠΌ ΡΡΠΎΡΡ Π΄Π²Π° instance PgBouncer β Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ instance Π·Π°ΠΏΡΡΠ΅Π½ Π‘onsul-template, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° Patroni ΠΈ ΡΠ»Π΅Π΄ΠΈΡ Π·Π° Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΎΡΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³Π° PgBouncer, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°ΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π·Π°ΠΏΡΠΎΡΡ Π½Π° ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ Π»ΠΈΠ΄Π΅ΡΠ° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ΅ΡΠ°.
Π ΡΡΠ½ΠΎΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
ΠΡΡ ΡΡ Π΅ΠΌΡ ΠΏΠ΅ΡΠ΅Π΄ Π²ΡΠ²ΠΎΠ΄ΠΎΠΌ Π½Π° ΠΏΡΠΎΠ΄ ΠΌΡ Π·Π°ΠΏΡΡΡΠΈΠ»ΠΈ Π½Π° Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ ΡΠ΅ΡΡΠΎΠ²ΠΎΠΉ ΡΡΠ΅Π΄Π΅ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΈΠ»ΠΈ ΡΠ°Π±ΠΎΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ. ΠΡΠΊΡΡΠ²Π°Π»ΠΈ Π΄ΠΎΡΠΊΡ, ΠΏΠ΅ΡΠ΅Π΄Π²ΠΈΠ³Π°Π»ΠΈ ΡΡΠΈΠΊΠ΅Ρ ΠΈ Π² ΡΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ βΡΠ±ΠΈΠ²Π°Π»ΠΈβ Π»ΠΈΠ΄Π΅ΡΠ° ΠΊΠ»Π°ΡΡΠ΅ΡΠ°. Π AWS Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π²ΡΠΊΠ»ΡΡΠΈΡΡ ΠΈΠ½ΡΡΠ°Π½Ρ ΡΠ΅ΡΠ΅Π· ΠΊΠΎΠ½ΡΠΎΠ»Ρ.
Π‘ΡΠΈΠΊΠ΅Ρ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ 10-20 ΡΠ΅ΠΊΡΠ½Π΄ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π»ΡΡ Π½Π°Π·Π°Π΄, Π° ΠΏΠΎΡΠΎΠΌ Π²Π½ΠΎΠ²Ρ Π½Π°ΡΠΈΠ½Π°Π» Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°ΡΡΡΡ. ΠΠ½Π°ΡΠΈΡ, ΠΊΠ»Π°ΡΡΠ΅Ρ Patroni ΡΡΠ°Π±ΠΎΡΠ°Π» Π²Π΅ΡΠ½ΠΎ: ΡΠΌΠ΅Π½ΠΈΠ» Π»ΠΈΠ΄Π΅ΡΠ°, ΠΎΡΠΏΡΠ°Π²ΠΈΠ» ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π² Π‘onsul, Π° Π‘onsul-template ΡΡΠ°Π·Ρ ΠΏΠΎΠ΄Ρ
Π²Π°ΡΠΈΠ» ΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, Π·Π°ΠΌΠ΅Π½ΠΈΠ» ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ PgBouncer ΠΈ ΠΎΡΠΏΡΠ°Π²ΠΈΠ» ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π½Π° reload.
ΠΠ°ΠΊ Π²ΡΠΆΠΈΡΡ ΠΏΠΎΠ΄ Π²ΡΡΠΎΠΊΠΎΠΉ Π½Π°Π³ΡΡΠ·ΠΊΠΎΠΉ ΠΈ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ Π΄Π°ΡΠ½ΡΠ°ΠΉΠΌ?
ΠΡΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΎΡΠ»ΠΈΡΠ½ΠΎ! ΠΠΎ ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ Π½ΠΎΠ²ΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ: ΠΠ°ΠΊ ΡΡΠΎ ΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΠΎΠ΄ Π²ΡΡΠΎΠΊΠΎΠΉ Π½Π°Π³ΡΡΠ·ΠΊΠΎΠΉ? ΠΠ°ΠΊ Π±ΡΡΡΡΠΎ ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ ΡΠ°ΡΠΊΠ°ΡΠ°ΡΡ Π²ΡΡ Π½Π° production?
ΠΡΠ²Π΅ΡΠΈΡΡ Π½Π° ΠΏΠ΅ΡΠ²ΡΠΉ Π²ΠΎΠΏΡΠΎΡ Π½Π°ΠΌ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΡΠ΅ΡΡΠΎΠ²Π°Ρ ΡΡΠ΅Π΄Π°, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΡ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΠΌ Π½Π°Π³ΡΡΠ·ΠΎΡΠ½ΠΎΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅. ΠΠ½Π° ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½Π° production ΠΏΠΎ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ΅ ΠΈ ΠΈΠΌΠ΅Π΅Ρ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ΅ΡΡΠΎΠ²ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎ ΠΎΠ±ΡΡΠΌΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°Π²Π½Ρ production. ΠΡ ΡΠ΅ΡΠ°Π΅ΠΌ ΠΏΡΠΎΡΡΠΎ βΡΠ±ΠΈΡΡβ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠ°ΡΡΠ΅ΡΠΎΠ² PostgreSQL Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ΅ΡΡΠ° ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ, ΡΡΠΎ Π±ΡΠ΄Π΅Ρ. ΠΠΎ ΠΏΠ΅ΡΠ΅Π΄ ΡΡΠΈΠΌ Π²Π°ΠΆΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ ΡΠ°ΡΠΊΠ°ΡΠΊΡ, Π²Π΅Π΄Ρ Π½Π° ΡΡΠΎΠΉ ΡΡΠ΅Π΄Π΅ Ρ Π½Π°Ρ Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°ΡΠ΄ΠΎΠ² PostgreSQL, ΡΠ°ΠΊ ΡΡΠΎ ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΠΎΡΠ»ΠΈΡΠ½ΠΎΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΊΡΠΈΠΏΡΠΎΠ² ΠΏΠ΅ΡΠ΅Π΄ ΠΏΡΠΎΠ΄ΠΎΠΌ.
ΠΠ±Π΅ Π·Π°Π΄Π°ΡΠΈ Π²ΡΠ³Π»ΡΠ΄ΡΡ Π°ΠΌΠ±ΠΈΡΠΈΠΎΠ·Π½ΠΎ, Π½ΠΎ Ρ Π½Π°Ρ PostgreSQL 9.6. ΠΠΎΠΆΠ΅Ρ ΠΌΡ ΡΡΠ°Π·Ρ Π½Π° 11.2 ΠΎΠ±Π½ΠΎΠ²ΠΈΠΌΡΡ?
ΠΡ ΡΠ΅ΡΠ°Π΅ΠΌ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ Π² 2 ΡΡΠ°ΠΏΠ°: ΡΠ½Π°ΡΠ°Π»Π° ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ Π²Π΅ΡΡΠΈΡ Π΄ΠΎ 11.2, ΠΏΠΎΡΠΎΠΌ Π·Π°ΠΏΡΡΡΠΈΡΡ Patroni.
ΠΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ PostgreSQL
ΠΠ»Ρ Π±ΡΡΡΡΠΎΠ³ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π²Π΅ΡΡΠΈΠΈ PostgreSQL Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠΏΡΠΈΡ -k, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠΎΠ·Π΄Π°ΡΡΡΡ hard link Π½Π° Π΄ΠΈΡΠΊΠ΅ ΠΈ Π½Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π² ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ Π²Π°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ . ΠΠ° Π±Π°Π·Π°Ρ Π² 300-400 ΠΠ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ 1 ΡΠ΅ΠΊΡΠ½Π΄Ρ.
Π£ Π½Π°Ρ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°ΡΠ΄ΠΎΠ², ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π½ΡΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π² Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΌΡ Π½Π°ΠΏΠΈΡΠ°Π»ΠΈ Ansible playbook, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π²Π΅ΡΡ ΠΏΡΠΎΡΠ΅ΡΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π·Π° Π½Π°Ρ:
/usr/lib/postgresql/11/bin/pg_upgrade
<b>--link </b>
--old-datadir='' --new-datadir=''
--old-bindir='' --new-bindir=''
--old-options=' -c config_file='
--new-options=' -c config_file='
ΠΠ΄Π΅ΡΡ Π²Π°ΠΆΠ½ΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΠΏΠ΅ΡΠ΅Π΄ Π·Π°ΠΏΡΡΠΊΠΎΠΌ Π°ΠΏΠ³ΡΠ΅ΠΉΠ΄Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π΅Π³ΠΎ Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ —check, ΡΡΠΎΠ±Ρ Π±ΡΡΡ ΡΠ²Π΅ΡΠ΅Π½Π½ΡΠΌ Π² Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π°ΠΏΠ³ΡΠ΅ΠΉΠ΄Π°. Π’Π°ΠΊ ΠΆΠ΅ Π½Π°Ρ ΡΡΠ΅Π½Π°ΡΠΈΠΉ Π΄Π΅Π»Π°Π΅Ρ ΠΏΠΎΠ΄ΠΌΠ΅Π½Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΠΎΠ² Π½Π° Π²ΡΠ΅ΠΌΡ Π°ΠΏΠ³ΡΠ΅ΠΉΠ΄Π°. Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ Ρ Π½Π°Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΠ»ΡΡ Π·Π° 30 ΡΠ΅ΠΊΡΠ½Π΄, ΡΡΠΎ ΠΎΡΠ»ΠΈΡΠ½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ.
ΠΠ°ΠΏΡΡΠΊ Patroni
ΠΠ»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π²ΡΠΎΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π²Π·Π³Π»ΡΠ½ΡΡΡ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Patroni. Π ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠΌ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ Π΅ΡΡΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Ρ initdb, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π½ΠΎΠ²ΠΎΠΉ Π±Π°Π·Ρ ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ Π·Π°ΠΏΡΡΠΊΠ΅ Patroni. ΠΠΎ ΡΠ°ΠΊ ΠΊΠ°ΠΊ Ρ Π½Π°Ρ Π΅ΡΡΡ ΡΠΆΠ΅ Π³ΠΎΡΠΎΠ²Π°Ρ Π±Π°Π·Π°, ΡΠΎ ΠΌΡ ΠΏΡΠΎΡΡΠΎ ΡΠ΄Π°Π»ΠΈΠ»ΠΈ ΡΡΠΎΡ ΡΠ°Π·Π΄Π΅Π» ΠΈΠ· ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ.
ΠΠΎΠ³Π΄Π° ΠΌΡ Π½Π°ΡΠ°Π»ΠΈ ΡΡΠ°Π²ΠΈΡΡ Patroni ΡΠΆΠ΅ Π½Π° Π³ΠΎΡΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡΠ΅Ρ PostgreSQL ΠΈ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π΅Π³ΠΎ, ΡΠΎ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΠΈΡΡ Ρ Π½ΠΎΠ²ΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ: ΠΎΠ±Π° ΡΠ΅ΡΠ²Π΅ΡΠ° Π·Π°ΠΏΡΡΠΊΠ°Π»ΠΈΡΡ ΠΊΠ°ΠΊ leader. Patroni Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π·Π½Π°Π΅Ρ ΠΎ ΡΠ°Π½Π½Π΅ΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° ΠΈ ΠΏΡΡΠ°Π΅ΡΡΡ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΎΠ±Π° ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΊΠ°ΠΊ Π΄Π²Π° ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ. ΠΠ»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π°Π»ΠΈΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Ρ Π΄Π°Π½Π½ΡΠΌΠΈ Π½Π° slave:
rm -rf /var/lib/postgresql/
ΠΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° slave!
ΠΡΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ ΡΠΈΡΡΠΎΠΉ ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈ Patroni Π΄Π΅Π»Π°Π΅Ρ basebackup leader ΠΈ Π²ΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π΅Π³ΠΎ Π½Π° ΡΠ΅ΠΏΠ»ΠΈΠΊΡ, Π° Π·Π°ΡΠ΅ΠΌ Π΄ΠΎΠ³ΠΎΠ½ΡΠ΅Ρ Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΏΠΎ wal-Π»ΠΎΠ³Π°ΠΌ.
ΠΡΡ ΠΎΠ΄Π½Π° ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ, Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΡ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΠΈΡΡ, β Π²ΡΠ΅ ΠΊΠ»Π°ΡΡΠ΅ΡΡ PostgreSQL ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π½Π°Π·ΡΠ²Π°ΡΡΡΡ main. ΠΠΎΠ³Π΄Π° ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΊΠ»Π°ΡΡΠ΅Ρ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π·Π½Π°Π΅Ρ ΠΏΡΠΎ Π΄ΡΡΠ³ΠΎΠΉ β ΡΡΠΎ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ. ΠΠΎ ΠΊΠΎΠ³Π΄Π° Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Patroni, ΡΠΎ Π²ΡΠ΅ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠΌΠ΅ΡΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ΅ ΠΈΠΌΡ. Π Π΅ΡΠ΅Π½ΠΈΠ΅ β ΠΏΠΎΠΌΠ΅Π½ΡΡΡ ΠΈΠΌΡ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ PostgreSQL.
ΠΠ°Π³ΡΡΠ·ΠΎΡΠ½ΡΠΉ ΡΠ΅ΡΡ
ΠΡ Π·Π°ΠΏΡΡΡΠΈΠ»ΠΈ ΡΠ΅ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠΌΠΈΡΠΈΡΡΠ΅Ρ ΡΠ°Π±ΠΎΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ Π½Π° Π΄ΠΎΡΠΊΠ°Ρ . ΠΠΎΠ³Π΄Π° Π½Π°Π³ΡΡΠ·ΠΊΠ° Π΄ΠΎΡΡΠΈΠ³Π»Π° Π½Π°ΡΠ΅Π³ΠΎ ΡΡΠ΅Π΄Π½Π΅Π³ΠΎ Π΄Π½Π΅Π²Π½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΌΡ ΠΏΠΎΠ²ΡΠΎΡΠΈΠ»ΠΈ ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊΠΎΠΉ ΠΆΠ΅ ΡΠ΅ΡΡ, ΠΌΡ Π²ΡΠΊΠ»ΡΡΠΈΠ»ΠΈ ΠΎΠ΄ΠΈΠ½ instance Ρ leader PostgreSQL. ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ failover ΡΡΠ°Π±ΠΎΡΠ°Π» ΡΠ°ΠΊ, ΠΊΠ°ΠΊ ΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π»ΠΈ: Patroni ΡΠΌΠ΅Π½ΠΈΠ» Π»ΠΈΠ΄Π΅ΡΠ°, Π‘onsul-template ΠΎΠ±Π½ΠΎΠ²ΠΈΠ» ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ PgBouncer ΠΈ ΠΎΡΠΏΡΠ°Π²ΠΈΠ» ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π½Π° reload. ΠΠΎ Π½Π°ΡΠΈΠΌ Π³ΡΠ°ΡΠΈΠΊΠ°ΠΌΠΈ Π² Grafana Π±ΡΠ»ΠΎ Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ Π΅ΡΡΡ Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ Π½Π° 20-30 ΡΠ΅ΠΊΡΠ½Π΄ ΠΈ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΎΠ±ΡΡΠΌ ΠΎΡΠΈΠ±ΠΎΠΊ Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ², ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ΠΌ ΠΊ Π±Π°Π·Π΅. ΠΡΠΎ Π½ΠΎΡΠΌΠ°Π»ΡΠ½Π°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ, ΡΠ°ΠΊΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄ΠΎΠΏΡΡΡΠΈΠΌΡ Π΄Π»Ρ Π½Π°ΡΠ΅Π³ΠΎ failover ΠΈ ΡΠΎΡΠ½ΠΎ Π»ΡΡΡΠ΅, ΡΠ΅ΠΌ Π΄Π°ΡΠ½ΡΠ°ΠΉΠΌ ΡΠ΅ΡΠ²ΠΈΡΠ°.
ΠΡΠ²ΠΎΠ΄ Patroni Π½Π° production
Π ΠΈΡΠΎΠ³Π΅ Ρ Π½Π°Ρ ΠΏΠΎΠ»ΡΡΠΈΠ»ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΠ»Π°Π½:
- ΠΠ΅ΠΏΠ»ΠΎΠΉ Π‘onsul-template Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ° PgBouncer ΠΈ Π·Π°ΠΏΡΡΠΊ;
- ΠΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ PostgreSQL Π΄ΠΎ Π²Π΅ΡΡΠΈΠΈ 11.2;
- Π‘ΠΌΠ΅Π½Π° ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠ»Π°ΡΡΠ΅ΡΠ°;
- ΠΠ°ΠΏΡΡΠΊ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° Patroni.
ΠΡΠΈ ΡΡΠΎΠΌ Π½Π°ΡΠ° ΡΡ Π΅ΠΌΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΡΠ½ΠΊΡ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π² Π»ΡΠ±ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΡΠ±ΡΠ°ΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ PgBouncer ΠΈΠ· ΡΠ°Π±ΠΎΡΡ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π½Π° Π½Π΅Π³ΠΎ Π΄Π΅ΠΏΠ»ΠΎΠΉ ΠΈ Π·Π°ΠΏΡΡΠΊ consul-template. Π’Π°ΠΊ ΠΌΡ ΠΈ ΡΠ΄Π΅Π»Π°Π»ΠΈ.
ΠΠ»Ρ Π±ΡΡΡΡΠΎΠΉ ΡΠ°ΡΠΊΠ°ΡΠΊΠΈ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ Ansible, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π²ΡΠ΅ playbook ΠΌΡ ΡΠΆΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΈΠ»ΠΈ Π½Π° ΡΠ΅ΡΡΠΎΠ²ΠΎΠΉ ΡΡΠ΅Π΄Π΅, Π° Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΡΡΠ΅Π½Π°ΡΠΈΡ Π±ΡΠ»ΠΎ ΠΎΡ 1,5 Π΄ΠΎ 2 ΠΌΠΈΠ½ΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ°ΡΠ΄Π°. ΠΡ ΠΌΠΎΠ³Π»ΠΈ Π²ΡΡ Π²ΡΠΊΠ°ΡΠΈΡΡ ΠΏΠΎΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎ Π½Π° ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°ΡΠ΄ Π±Π΅Π· ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π½Π°ΡΠ΅Π³ΠΎ ΡΠ΅ΡΠ²ΠΈΡΠ°, Π½ΠΎ Π½Π°ΠΌ ΠΏΡΠΈΡΠ»ΠΎΡΡ Π±Ρ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠΈΠ½ΡΡ Π²ΡΠΊΠ»ΡΡΠ°ΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ PostgreSQL. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ, ΡΡΠΈ Π΄Π°Π½Π½ΡΠ΅ Π΅ΡΡΡ Π½Π° ΡΡΠΎΠΌ ΡΠ°ΡΠ΄Π΅, Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π² ΡΡΠΎ Π²ΡΠ΅ΠΌΡ, Π° ΡΡΠΎ Π΄Π»Ρ Π½Π°Ρ Π½Π΅ΠΏΡΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎ.
ΠΡΡ
ΠΎΠ΄ΠΎΠΌ ΠΈΠ· ΡΡΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ ΡΡΠ°Π» ΠΏΠ»Π°Π½ΠΎΠ²ΡΠΉ maintenance, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΎΡ
ΠΎΠ΄ΠΈΡ Ρ Π½Π°Ρ ΠΊΠ°ΠΆΠ΄ΡΠ΅ 3 ΠΌΠ΅ΡΡΡΠ°. ΠΡΠΎ ΠΎΠΊΠ½ΠΎ Π΄Π»Ρ ΠΏΠ»Π°Π½ΠΎΠ²ΡΡ
ΡΠ°Π±ΠΎΡ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π²ΡΠΊΠ»ΡΡΠ°Π΅ΠΌ Π½Π°Ρ ΡΠ΅ΡΠ²ΠΈΡ ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ ΠΈΠ½ΡΡΠ°Π½ΡΡ Π±Π°Π· Π΄Π°Π½Π½ΡΡ
. ΠΠΎ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΎΡΡΠ°Π²Π°Π»Π°ΡΡ ΠΎΠ΄Π½Π° Π½Π΅Π΄Π΅Π»Ρ, ΠΈ ΠΌΡ ΡΠ΅ΡΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΠ΄ΠΎΠΆΠ΄Π°ΡΡ ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΈΡΡΡΡ. ΠΠ° Π²ΡΠ΅ΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΌΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΠ΄ΡΡΡΠ°Ρ
ΠΎΠ²Π°Π»ΠΈΡΡ: Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ°ΡΠ΄Π° PostgreSQL ΠΏΠΎΠ΄Π½ΡΠ»ΠΈ ΠΏΠΎ Π·Π°ΠΏΠ°ΡΠ½ΠΎΠΉ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ΅ Π½Π° ΡΠ»ΡΡΠ°ΠΉ Π½Π΅ΡΠ΄Π°ΡΠΈ, ΡΡΠΎΠ±Ρ ΡΠΎΡ
ΡΠ°Π½ΠΈΡΡ ΡΠ°ΠΌΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅, ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΏΠΎ Π½ΠΎΠ²ΠΎΠΌΡ ΠΈΠ½ΡΡΠ°Π½ΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ°ΡΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡΠ°ΡΡ Π½ΠΎΠ²ΠΎΠΉ ΡΠ΅ΠΏΠ»ΠΈΠΊΠΎΠΉ Π² ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅ Patroni, ΡΡΠΎΠ± Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π΄Π»Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ
. ΠΡΡ ΡΡΠΎ ΠΏΠΎΠΌΠΎΠ³Π»ΠΎ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΡΠ½ΠΈΠ·ΠΈΡΡ ΡΠΈΡΠΊ ΠΎΡΠΈΠ±ΠΊΠΈ.
ΠΡ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΡΠΈΠ»ΠΈ Π½Π°Ρ ΡΠ΅ΡΠ²ΠΈΡ, Π²ΡΠ΅ Π·Π°ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ ΠΊΠ°ΠΊ Π½Π°Π΄ΠΎ, ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΠ»ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ, Π½ΠΎ Π½Π° Π³ΡΠ°ΡΠΈΠΊΠ°Ρ
ΠΌΡ Π·Π°ΠΌΠ΅ΡΠΈΠ»ΠΈ Π°Π½ΠΎΠΌΠ°Π»ΡΠ½ΠΎ Π²ΡΡΠΎΠΊΡΡ Π½Π°Π³ΡΡΠ·ΠΊΡ Π½Π° Π‘onsul-ΡΠ΅ΡΠ²Π΅ΡΠ°.
ΠΠΎΡΠ΅ΠΌΡ ΠΌΡ Π½Π΅ ΡΠ²ΠΈΠ΄Π΅Π»ΠΈ ΡΡΠΎ Π½Π° ΡΠ΅ΡΡΠΎΠ²ΠΎΠΉ ΡΡΠ΅Π΄Π΅? ΠΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΎΡΠ΅Π½Ρ Ρ
ΠΎΡΠΎΡΠΎ ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ Infrastructure as code ΠΈ Π΄ΠΎΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π²ΡΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ, Π½Π°ΡΠΈΠ½Π°Ρ Ρ ΡΠ΅ΡΡΠΎΠ²ΡΡ
ΡΡΠ΅Π΄ ΠΈ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Ρ production. ΠΠ½Π°ΡΠ΅ ΠΎΡΠ΅Π½Ρ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ°ΠΊΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΊΠΎΡΠΎΡΡΡ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ ΠΌΡ. Π§ΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ? Π‘onsul ΡΠ½Π°ΡΠ°Π»Π° ΠΏΠΎΡΠ²ΠΈΠ»ΡΡ Π½Π° production, Π° ΠΏΠΎΡΠΎΠΌ Π½Π° ΡΠ΅ΡΡΠΎΠ²ΡΡ
ΡΡΠ΅Π΄Π°Ρ
, Π² ΠΈΡΠΎΠ³Π΅ Π½Π° ΡΠ΅ΡΡΠΎΠ²ΡΡ
ΡΡΠ΅Π΄Π°Ρ
Π²Π΅ΡΡΠΈΡ Consul Π±ΡΠ»Π° Π²ΡΡΠ΅, ΡΠ΅ΠΌ Π½Π° production. ΠΠ°ΠΊ ΡΠ°Π· Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΡΠ΅Π»ΠΈΠ·ΠΎΠ² Π±ΡΠ»Π° ΡΠ΅ΡΠ΅Π½Π° ΡΡΠ΅ΡΠΊΠ° CPU ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ consul-template. ΠΠΎΡΡΠΎΠΌΡ ΠΌΡ ΠΏΡΠΎΡΡΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΠ»ΠΈ Consul, ΡΠ΅ΡΠΈΠ² ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
Restart Patroni cluster
ΠΠ΄Π½Π°ΠΊΠΎ ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ Π½ΠΎΠ²ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ Π΄Π°ΠΆΠ΅ Π½Π΅ ΠΏΠΎΠ΄ΠΎΠ·ΡΠ΅Π²Π°Π»ΠΈ. ΠΡΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ Consul ΠΌΡ ΠΏΡΠΎΡΡΠΎ ΡΠ΄Π°Π»ΡΠ΅ΠΌ Π½ΠΎΠ΄Ρ Consul ΠΈΠ· ΠΊΠ»Π°ΡΡΠ΅ΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ consul leave β Patroni ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΠΊ Π΄ΡΡΠ³ΠΎΠΌΡ Consul ΡΠ΅ΡΠ²Π΅ΡΡ β Π²ΡΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. ΠΠΎ ΠΊΠΎΠ³Π΄Π° ΠΌΡ Π΄ΠΎΡΠ»ΠΈ Π΄ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΠΈΠ½ΡΡΠ°Π½ΡΠ° ΠΊΠ»Π°ΡΡΠ΅ΡΠ° Consul ΠΈ ΠΎΡΠΏΡΠ°Π²ΠΈΠ»ΠΈ Π΅ΠΌΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ consul leave, Π²ΡΠ΅ ΠΊΠ»Π°ΡΡΠ΅ΡΡ Patroni ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΡΠΈΠ»ΠΈΡΡ, Π° Π² Π»ΠΎΠ³Π°Ρ ΠΌΡ ΡΠ²ΠΈΠ΄Π΅Π»ΠΈ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΎΡΠΈΠ±ΠΊΡ:
ERROR: get_cluster
Traceback (most recent call last):
...
RetryFailedError: 'Exceeded retry deadline'
ERROR: Error communicating with DCS
<b>LOG: database system is shut down</b>
ΠΠ»Π°ΡΡΠ΅Ρ Patroni Π½Π΅ ΡΠΌΠΎΠ³ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠ²ΠΎΡΠΌ ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅ ΠΈ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΡΠΈΠ»ΡΡ.
ΠΠ»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΌΡ ΠΎΠ±ΡΠ°ΡΠΈΠ»ΠΈΡΡ ΠΊ Π°Π²ΡΠΎΡΠ°ΠΌ Patroni ΡΠ΅ΡΠ΅Π· issue Π½Π° github. ΠΠ½ΠΈ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΠ»ΠΈ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ Π½Π°ΡΠΈΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²:
consul:
consul.checks: []
bootstrap:
dcs:
retry_timeout: 8
ΠΡ ΡΠΌΠΎΠ³Π»ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠΈΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π½Π° ΡΠ΅ΡΡΠΎΠ²ΠΎΠΉ ΡΡΠ΅Π΄Π΅ ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π»ΠΈ ΡΠ°ΠΌ ΡΡΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, Π½ΠΎ, ΠΊ ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, ΠΎΠ½ΠΈ Π½Π΅ ΡΡΠ°Π±ΠΎΡΠ°Π»ΠΈ.
ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Π΄ΠΎ ΡΠΈΡ ΠΏΠΎΡ ΠΎΡΡΠ°ΡΡΡΡ Π½Π΅ΡΠ΅ΡΡΠ½Π½ΠΎΠΉ. ΠΡ ΠΏΠ»Π°Π½ΠΈΡΡΠ΅ΠΌ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ:
- ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π‘onsul-agent Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ½ΡΡΠ°Π½ΡΠ΅ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° Patroni;
- ΠΡΠΏΡΠ°Π²ΠΈΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π² ΠΊΠΎΠ΄Π΅.
ΠΠ°ΠΌ ΠΏΠΎΠ½ΡΡΠ½ΠΎ ΠΌΠ΅ΡΡΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ ΠΎΡΠΈΠ±ΠΊΠΈ: Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ default timeout, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΡΠ΅ΡΠ΅Π· ΡΠ°ΠΉΠ» ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ. ΠΡΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ° Π‘onsul ΠΈΠ· ΠΊΠ»Π°ΡΡΠ΅ΡΠ° ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π·Π°Π²ΠΈΡΠ°Π½ΠΈΠ΅ Π²ΡΠ΅Π³ΠΎ Π‘onsul-ΠΊΠ»Π°ΡΡΠ΅ΡΠ°, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π΄Π»ΠΈΡΡΡ Π΄ΠΎΠ»ΡΡΠ΅ ΡΠ΅ΠΊΡΠ½Π΄Ρ, ΠΈΠ·-Π·Π° ΡΡΠΎΠ³ΠΎ Patroni Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ Π²Π΅ΡΡ ΠΊΠ»Π°ΡΡΠ΅Ρ.
Π ΡΡΠ°ΡΡΡΡ, Π±ΠΎΠ»ΡΡΠ΅ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΌΡ Π½Π΅ Π²ΡΡΡΠ΅ΡΠΈΠ»ΠΈ.
ΠΡΠΎΠ³ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Patroni
ΠΠΎΡΠ»Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎΠ³ΠΎ Π·Π°ΠΏΡΡΠΊΠ° Patroni ΠΌΡ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΏΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ΅ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅. Π’Π΅ΠΏΠ΅ΡΡ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅ Π΅ΡΡΡ ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ ΠΊΠ²ΠΎΡΡΠΌΠ°: ΠΎΠ΄ΠΈΠ½ Π»ΠΈΠ΄Π΅Ρ ΠΈ Π΄Π²Π΅ ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈ, β Π΄Π»Ρ ΠΏΠΎΠ΄ΡΡΡΠ°Ρ
ΠΎΠ²ΠΊΠΈ Π½Π° ΡΠ»ΡΡΠ°ΠΉ split-brain ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ.
ΠΠ° production Patroni ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΡ
ΠΌΠ΅ΡΡΡΠ΅Π². ΠΠ° ΡΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΎΠ½ ΡΠΆΠ΅ ΡΡΠΏΠ΅Π» Π½Π°Ρ Π²ΡΡΡΡΠΈΡΡ. ΠΠ΅Π΄Π°Π²Π½ΠΎ Π² AWS ΡΠΌΠ΅Ρ Π»ΠΈΠ΄Π΅Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΠ², Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ failover ΡΡΠ°Π±ΠΎΡΠ°Π» ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΠ»ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ. Patroni Π²ΡΠΏΠΎΠ»Π½ΠΈΠ» ΡΠ²ΠΎΡ Π³Π»Π°Π²Π½ΡΡ Π·Π°Π΄Π°ΡΡ.
ΠΠ΅Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΈΡΠΎΠ³ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Patroni:
- Π£Π΄ΠΎΠ±ΡΡΠ²ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ. ΠΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ½ΡΡΠ°Π½ΡΠ΅ ΠΈ ΠΎΠ½Π° ΠΏΠΎΠ΄ΡΡΠ½Π΅ΡΡΡ Π½Π° Π²Π΅ΡΡ ΠΊΠ»Π°ΡΡΠ΅Ρ. ΠΡΠ»ΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠ° Π΄Π»Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, ΡΠΎ Patroni ΠΎΠ± ΡΡΠΎΠΌ ΡΠΎΠΎΠ±ΡΠΈΡ. Patroni ΠΌΠΎΠΆΠ΅Ρ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΡΠΈΡΡ Π²Π΅ΡΡ ΠΊΠ»Π°ΡΡΠ΅Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, ΡΡΠΎ ΡΠΎΠΆΠ΅ ΠΎΡΠ΅Π½Ρ ΡΠ΄ΠΎΠ±Π½ΠΎ.
- ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ failover ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΈ ΡΠΆΠ΅ ΡΡΠΏΠ΅Π» Π½Π°Ρ Π²ΡΡΡΡΠΈΡΡ.
- ΠΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ PostgreSQL Π±Π΅Π· Π΄Π°ΡΠ½ΡΠ°ΠΉΠΌΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ½Π°ΡΠ°Π»Π° ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈ Π½Π° Π½ΠΎΠ²ΡΡ Π²Π΅ΡΡΠΈΡ, Π·Π°ΡΠ΅ΠΌ ΡΠΌΠ΅Π½ΠΈΡΡ Π»ΠΈΠ΄Π΅ΡΠ° Π² ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅ Patroni ΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ ΡΡΠ°ΡΠΎΠ³ΠΎ Π»ΠΈΠ΄Π΅ΡΠ°. ΠΡΠΈ ΡΡΠΎΠΌ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ failover.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com