ΠΠ° ΡΠ΅Π³ΠΎΠ΄Π½ΡΡΠ½ΠΈΠΉ Π΄Π΅Π½Ρ Π²ΡΡΠΎΠΊΠ°Ρ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΡ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π²ΡΠ΅Π³Π΄Π° ΠΈ Π²Π΅Π·Π΄Π΅, Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΊΡΡΠΏΠ½ΡΡ
Π΄ΠΎΡΠΎΠ³ΠΈΡ
ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ
. ΠΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ ΡΠ°ΠΉΡΡ Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΠΌ Β«ΠΠ·Π²ΠΈΠ½ΠΈΡΠ΅, ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΡΡ ΡΠ΅Ρ
Π½ΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΠ΅Β» Π΅ΡΡ Π²ΡΡΡΠ΅ΡΠ°ΡΡΡΡ, Π½ΠΎ ΠΎΠ±ΡΡΠ½ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΠ½ΠΈΡΡ
ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠ»ΡΠ±ΠΊΡ. ΠΡΠΈΠ±Π°Π²ΠΈΠΌ ΠΊ ΡΡΠΎΠΌΡ ΠΆΠΈΠ·Π½Ρ Π² ΠΎΠ±Π»Π°ΠΊΠ°Ρ
, ΠΊΠΎΠ³Π΄Π° Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ° Π½ΡΠΆΠ΅Π½ Π»ΠΈΡΡ ΠΎΠ΄ΠΈΠ½ Π²ΡΠ·ΠΎΠ² ΠΊ API, ΠΏΡΠΈΡΠ΅ΠΌ Π΄ΡΠΌΠ°ΡΡ ΠΎ Β«ΠΆΠ΅Π»Π΅Π·Π½ΠΎΠΉΒ» ΡΠΊΡΠΏΠ»ΡΠ°ΡΠ°ΡΠΈΠΈ Π½Π΅ Π½Π°Π΄ΠΎ. Π ΡΠΆΠ΅ Π½Π΅ ΠΎΡΡΠ°Π΅ΡΡΡ ΠΎΠΏΡΠ°Π²Π΄Π°Π½ΠΈΠΉ, ΠΏΠΎΡΠ΅ΠΌΡ ΠΊΡΠΈΡΠΈΡΠ½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° Π½Π΅ Π±ΡΠ»Π° ΡΠ΄Π΅Π»Π°Π½Π° Π½Π°Π΄Π΅ΠΆΠ½ΠΎ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠ»Π°ΡΡΠ΅ΡΠ½ΡΡ
ΡΠ΅Ρ
Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ ΠΈ ΡΠ΅Π·Π΅ΡΠ²ΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
ΠΡ ΡΠ°ΡΡΠΊΠ°ΠΆΠ΅ΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΌΡ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π»ΠΈ Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ Π½Π°Π΄ΡΠΆΠ½ΠΎΡΡΠΈ Π±Π°Π· Π΄Π°Π½Π½ΡΡ
Π² ΡΠ²ΠΎΠΈΡ
ΡΠ΅ΡΠ²ΠΈΡΠ°Ρ
ΠΈ ΠΊ ΡΠ΅ΠΌΡ ΠΏΡΠΈΡΠ»ΠΈ. ΠΠ»ΡΡ Π΄Π΅ΠΌΠΎ Ρ Π΄Π°Π»Π΅ΠΊΠΎ ΠΈΠ΄ΡΡΠΈΠΌΠΈ Π²ΡΠ²ΠΎΠ΄Π°ΠΌΠΈ.
ΠΠ΅Π³Π°ΡΠΈ Π² Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ Π²ΡΡΠΎΠΊΠΎΠΉ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΠΈ
ΠΡΠ΅ Π»ΡΡΡΠ΅ ΡΡΠΎ Π²ΠΈΠ΄Π½ΠΎ Π² ΡΠ°Π·ΡΠ΅Π·Π΅ ΡΠ°Π·Π²ΠΈΡΠΈΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ opensource-ΡΠΈΡΡΠ΅ΠΌ. Π‘ΡΠ°ΡΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π²ΡΠ½ΡΠΆΠ΄Π΅Π½Ρ Π±ΡΠ»ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Π²ΡΡΠΎΠΊΠΎΠΉ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΠΈ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΡΠΏΡΠΎΡΠ°. Π ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎ ΠΈΡ Π±ΡΠ»ΠΎ ΡΠ°Π·Π½ΡΠΌ. Π Π΅ΡΠ΅Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΡ ΡΡΠ°Π²ΡΡ Π²ΡΡΠΎΠΊΡΡ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΡ Π² ΠΎΡΠ½ΠΎΠ²Ρ ΡΠ²ΠΎΠ΅ΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, MongoDB ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½ΠΈΡΡΠ΅Ρ ΠΊΠ»Π°ΡΡΠ΅Ρ ΠΊΠ°ΠΊ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ. ΠΠ»Π°ΡΡΠ΅Ρ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΡΠ΅ΡΡΡ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΠΎ, ΡΡΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΈΠ»ΡΠ½ΡΠΌ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½ΡΠΌ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎΠΌ ΡΡΠΎΠΉ Π‘Π£ΠΠ.
ΠΠ΅ΡΠ½ΡΠΌΡΡ ΠΊ PostgreSQL. ΠΡΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΡΠ°ΡΠ΅ΠΉΡΠΈΡ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ opensource-ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ², ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ΅Π»ΠΈΠ· ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠΎΡΡΠΎΡΠ»ΡΡ Π² 95-ΠΌ Π³ΠΎΠ΄Ρ ΠΏΡΠΎΡΠ»ΠΎΠ³ΠΎ Π²Π΅ΠΊΠ°. ΠΠΎΠΌΠ°Π½Π΄Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° Π΄ΠΎΠ»Π³ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ Π½Π΅ ΡΡΠΈΡΠ°Π»Π° Π²ΡΡΠΎΠΊΡΡ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΡ Π·Π°Π΄Π°ΡΠ΅ΠΉ, ΠΊΠΎΡΠΎΡΡΡ Π½ΡΠΆΠ½ΠΎ ΡΠ΅ΡΠ°ΡΡ ΡΠΎ ΡΡΠΎΡΠΎΠ½Ρ ΡΠΈΡΡΠ΅ΠΌΡ. ΠΠΎΡΡΠΎΠΌΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠΎΠΏΠΈΠΉ Π΄Π°Π½Π½ΡΡ ΡΡΠ°Π»Π° Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠΉ ΡΠΎΠ»ΡΠΊΠΎ Π² Π²Π΅ΡΡΠΈΠΈ 8.2 Π² 2006-ΠΌ, Π½ΠΎ ΠΎΠ½Π° Π±ΡΠ»Π° ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ (log shipping). Π 2010 Π² Π²Π΅ΡΡΠΈΠΈ 9.0 ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ²Π°Ρ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡ, ΠΈ ΠΎΠ½Π° ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ½ΠΎΠ²ΠΎΠΉ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ°ΠΌΡΡ ΡΠ°Π·Π½ΡΡ ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΠ². ΠΡΠΎ, ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ, ΠΎΡΠ΅Π½Ρ ΡΠ΄ΠΈΠ²Π»ΡΠ΅Ρ Π»ΡΠ΄Π΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡΡΡΡ Ρ PostgreSQL ΠΏΠΎΡΠ»Π΅ Enterprise SQL ΠΈΠ»ΠΈ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ NoSQL β ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΎΡ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π° ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΎΡΡΠΎ ΠΏΠ°ΡΠ° master-replica Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠΉ ΠΈΠ»ΠΈ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠΉ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠ΅ΠΉ. ΠΡΠΈ ΡΡΠΎΠΌ Π² ΡΡΠΎΠΊΠ΅ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠ΅ΡΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ Π²ΡΡΡΠ½ΡΡ, ΠΈ Π²ΠΎΠΏΡΠΎΡ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΡΡΡ ΡΠ΅ΡΠ°ΡΡ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ.
ΠΠ°ΠΊ ΠΌΡ ΡΠ΅ΡΠΈΠ»ΠΈ Π΄Π΅Π»Π°ΡΡ Π½Π°Π΄ΡΠΆΠ½ΡΠΉ PostgreSQL ΠΈ ΡΡΠΎ ΠΌΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π²ΡΠ±ΡΠ°Π»ΠΈ
Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, PostgreSQL Π½Π΅ ΡΡΠ°Π» Π±Ρ ΡΠ°ΠΊΠΈΠΌ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠΌ, Π΅ΡΠ»ΠΈ Π±Ρ Π½Π΅ Π±ΡΠ»ΠΎ ΠΎΠ³ΡΠΎΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠΌΠΎΠ³Π°ΡΡ ΠΏΠΎΡΡΡΠΎΠΈΡΡ ΠΎΡΠΊΠ°Π·ΠΎΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, Π½Π΅ ΡΡΠ΅Π±ΡΡΡΠ΅Π΅ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎΠ³ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΡ. Π ΠΎΠ±Π»Π°ΠΊΠ΅
ΠΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ, ΠΌΡ Ρ ΠΎΡΠ΅Π»ΠΈ ΡΠΏΡΠΎΡΡΠΈΡΡ Π²ΡΠ΅ΠΌ ΠΆΠΈΠ·Π½Ρ ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠΉ ΡΠ°ΠΊΡΡ ΠΈΠ½ΡΡΠ°Π»Π»ΡΡΠΈΡ PostgreSQL, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠ³Π»Π° ΡΠ»ΡΠΆΠΈΡΡ ΠΎΡΠ½ΠΎΠ²ΠΎΠΉ Π΄Π»Ρ Π²ΡΡΠΎΠΊΠΎΠ΄ΠΎΡΡΡΠΏΠ½ΡΡ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ², Π·Π° ΠΊΠΎΡΠΎΡΠΎΠΉ Π½Π΅ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΡΠ»Π΅Π΄ΠΈΡΡ ΠΈ ΠΏΡΠΎΡΡΠΏΠ°ΡΡΡΡ Π½ΠΎΡΡΡ, ΡΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅. Π ΡΡΠΎΠΌ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ΅ Π΅ΡΡΡ ΠΈ ΡΡΠ°ΡΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½Π½ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ, ΠΈ ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΡΡ ΡΡΠΈΠ»ΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ Π½Π°ΡΠ°Π±ΠΎΡΠΊΠΈ.
Π‘Π΅Π³ΠΎΠ΄Π½Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π²ΡΡΠΎΠΊΠΎΠΉ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΠΈ ΡΠΏΠΈΡΠ°Π΅ΡΡΡ Π½Π΅ Π² ΡΠ΅Π·Π΅ΡΠ²ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ (ΡΡΠΎ ΡΠ°ΠΌΠΎ ΡΠΎΠ±ΠΎΠΉ), Π° Π² ΠΊΠΎΠ½ΡΠ΅Π½ΡΡΡ β Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΏΠΎ Π²ΡΠ±ΠΎΡΡ Π»ΠΈΠ΄Π΅ΡΠ° (Leader election). Π§Π°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΊΡΡΠΏΠ½ΡΠ΅ Π°Π²Π°ΡΠΈΠΈ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΡΡ Π½Π΅ ΠΈΠ·-Π·Π° Π½Π΅Ρ
Π²Π°ΡΠΊΠΈ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ², Π° ΠΈΠ·-Π·Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ ΠΊΠΎΠ½ΡΠ΅Π½ΡΡΡΠΎΠΌ: Π½Π΅ Π²ΡΠ±ΡΠ°Π»ΡΡ Π½ΠΎΠ²ΡΠΉ Π»ΠΈΠ΄Π΅Ρ, ΠΏΠΎΡΠ²ΠΈΠ»ΠΈΡΡ Π΄Π²Π° Π»ΠΈΠ΄Π΅ΡΠ° Π² ΡΠ°Π·Π½ΡΡ
Π΄Π°ΡΠ°ΡΠ΅Π½ΡΡΠ°Ρ
ΠΈ Ρ.ΠΏ. ΠΡΠΈΠΌΠ΅Ρ β Π°Π²Π°ΡΠΈΡ Π½Π° MySQL-ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅ Github β ΠΎΠ½ΠΈ Π½Π°ΠΏΠΈΡΠ°Π»ΠΈ
ΠΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ Π±Π°Π·Π° Π² ΡΡΠΎΠΌ Π²ΠΎΠΏΡΠΎΡΠ΅ ΠΎΡΠ΅Π½Ρ ΡΠ΅ΡΡΠ΅Π·Π½Π°Ρ. Π‘ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, Π΅ΡΡΡ
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π»ΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΎΡΡΡΡΠΏΠ»Π΅Π½ΠΈΡ ΡΠΊΠ°ΠΆΡ, ΡΡΠΎ ΠΌΡ ΡΠ°ΠΊΠΆΠ΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π»ΠΈ ΠΈ multi-master ΡΠ΅ΡΠ΅Π½ΠΈΡ, ΡΠΎ Π΅ΡΡΡ ΠΊΠ»Π°ΡΡΠ΅ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΠΎ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°ΡΡ Π½Π° Π·Π°ΠΏΠΈΡΡ. ΠΠ΄Π½Π°ΠΊΠΎ ΠΏΠΎ Π΄Π²ΡΠΌ Π³Π»Π°Π²Π½ΡΠΌ ΠΏΡΠΈΡΠΈΠ½Π°ΠΌ ΡΠ΅ΡΠΈΠ»ΠΈ Π½Π΅ Π΄Π΅Π»Π°ΡΡ ΡΠ°ΠΊΠΎΠΉ ΠΊΠ»Π°ΡΡΠ΅Ρ. ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , ΡΠ°ΠΊΠΈΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΈΠΌΠ΅ΡΡ Π²ΡΡΠΎΠΊΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ ΠΈ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, Π±ΠΎΠ»ΡΡΠ΅ ΡΡΠ·Π²ΠΈΠΌΡΡ ΠΌΠ΅ΡΡ. ΠΡΠ΄Π΅Ρ ΡΡΠΆΠ΅Π»ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ Π²ΡΠ΅Ρ ΡΠ»ΡΡΠ°Π΅Π². ΠΠΎ-Π²ΡΠΎΡΡΡ , Π² ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ PostgreSQL ΠΏΠ΅ΡΠ΅ΡΡΠ°Π΅Ρ Π±ΡΡΡ ΡΠΈΡΡΡΠΌ (native), Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π±ΡΠ΄ΡΡ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½Ρ, Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ ΠΌΠΎΠ³ΡΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ ΡΠΊΡΡΡΡΠ΅ Π±Π°Π³ΠΈ.
Patroni
ΠΡΠ°ΠΊ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Patroni? Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Π½Π΅ ΡΡΠ°Π»ΠΈ ΠΈΠ·ΠΎΠ±ΡΠ΅ΡΠ°ΡΡ Π²Π΅Π»ΠΎΡΠΈΠΏΠ΅Π΄ ΠΈ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΠΎΡΠ½ΠΎΠ²Π΅ ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½Π½ΡΡ DCS-ΡΠ΅ΡΠ΅Π½ΠΈΠΉ. ΠΠ° ΠΎΡΠΊΡΠΏ Π΅ΠΌΡ ΠΎΡΠ΄Π°ΡΡΡΡ Π²ΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΉ, Π²ΡΠ±ΠΎΡΠΎΠΌ Π»ΠΈΠ΄Π΅ΡΠ° ΠΈ ΠΊΠ²ΠΎΡΡΠΌΠΎΠΌ. ΠΡ Π²ΡΠ±ΡΠ°Π»ΠΈ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ etcd.
ΠΠ°Π»Π΅Π΅ Patroni Π·Π°Π½ΠΈΠΌΠ°Π΅ΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΌ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Π²ΡΠ΅Ρ Π½Π°ΡΡΡΠΎΠ΅ΠΊ Π½Π° PostgreSQL ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΠΌΠΈ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄ Π½Π° switchover ΠΈ failover (ΡΠΎ Π΅ΡΡΡ β ΡΡΠ°ΡΠ½ΠΎΠ³ΠΎ ΠΈ Π½Π΅ΡΡΠ°ΡΠ½ΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΌΠ°ΡΡΠ΅ΡΠ°). ΠΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ Π² ΠΎΠ±Π»Π°ΠΊΠ΅ MCS ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠ»Π°ΡΡΠ΅Ρ ΠΈΠ· ΠΌΠ°ΡΡΠ΅ΡΠ°, ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠΉ ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈ ΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΡ ΡΠ΅ΠΏΠ»ΠΈΠΊ. ΠΡΠΈΡΡΡΡΡΠ²ΠΈΠ΅ ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠΉ ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΡΠΎΡ ΡΠ°Π½Π½ΠΎΡΡΡ Π΄Π°Π½Π½ΡΡ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ Π½Π° 2 ΡΠ΅ΡΠ²Π΅ΡΠ°Ρ , ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΠ° ΡΠ΅ΠΏΠ»ΠΈΠΊΠ° Π±ΡΠ΄Π΅Ρ Π³Π»Π°Π²Π½ΡΠΌ Β«ΠΊΠ°Π½Π΄ΠΈΠ΄Π°ΡΠΎΠΌ Π² ΠΌΠ°ΡΡΠ΅ΡΠ°Β».
Π’Π°ΠΊ ΠΊΠ°ΠΊ etcd ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ Π½Π° ΡΠ΅Ρ ΠΆΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠ°Ρ , ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² 3 ΠΈΠ»ΠΈ 5, Π΄Π»Ρ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠ²ΠΎΡΡΠΌΠ°. Π’Π°ΠΊΠΎΠΉ ΠΊΠ»Π°ΡΡΠ΅Ρ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΡΠ΅ΡΡΡ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΠΎ Π½Π° ΡΡΠ΅Π½ΠΈΠ΅ (ΠΎ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ Π½Π° Π·Π°ΠΏΠΈΡΡ Ρ ΠΏΠΈΡΠ°Π» Π²ΡΡΠ΅). Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΡΠΈΡΡΠ²Π°ΡΡ, ΡΡΠΎ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΌ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΠΌ ΡΠ²ΠΎΠΉΡΡΠ²Π΅Π½Π½ΠΎ ΠΎΡΡΡΠ°Π²Π°Π½ΠΈΠ΅, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΏΡΠΈ Π²ΡΡΠΎΠΊΠΈΡ Π½Π°Π³ΡΡΠ·ΠΊΠ°Ρ .
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΠΊΠΈΡ ΡΠ΅ΠΏΠ»ΠΈΠΊ Π½Π° ΡΡΠ΅Π½ΠΈΠ΅ (hot standby) ΠΎΠ±ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΠΎ Π΄Π»Ρ Π·Π°Π΄Π°Ρ ΠΎΡΡΠ΅ΡΠ½ΠΎΡΡΠΈ ΠΈΠ»ΠΈ Π°Π½Π°Π»ΠΈΡΠΈΠΊΠΈ ΠΈ ΡΠ°Π·Π³ΡΡΠΆΠ°Π΅Ρ ΠΌΠ°ΡΡΠ΅Ρ-ΡΠ΅ΡΠ²Π΅Ρ.
ΠΡΠ»ΠΈ Π²Ρ Π·Π°Ρ ΠΎΡΠΈΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ°ΠΊΠΎΠΉ ΠΊΠ»Π°ΡΡΠ΅Ρ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ, ΡΠΎ Π²Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ:
- ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΈΡΡ 3 ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ², Π½Π°ΡΡΡΠΎΠΈΡΡ IP-Π°Π΄ΡΠ΅ΡΠ°ΡΠΈΡ ΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π° firewall ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌΠΈ;
- ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΠ°ΠΊΠ΅ΡΡ Π΄Π»Ρ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² etcd, Patroni, PostgreSQL;
- Π½Π°ΡΡΡΠΎΠΈΡΡ etcd ΠΊΠ»Π°ΡΡΠ΅Ρ;
- Π½Π°ΡΡΡΠΎΠΈΡΡ ΡΠ»ΡΠΆΠ±Ρ patroni Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ PostgreSQL.
Π’ΠΎ Π΅ΡΡΡ Π² ΠΎΠ±ΡΠ΅ΠΉ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΡΠΎΡΡΠ°Π²ΠΈΡΡ Π΄Π΅ΡΡΡΠΎΠΊ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈ Π½ΠΈΠ³Π΄Π΅ Π½Π΅ ΠΎΡΠΈΠ±ΠΈΡΡΡΡ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΡΠΎΡΠ½ΠΎ ΡΡΠΎΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ configuration management tool, ΡΠ°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ Ansible, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ. ΠΡΠΈ ΡΡΠΎΠΌ Π·Π΄Π΅ΡΡ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ Π²ΡΡΠΎΠΊΠΎΠ΄ΠΎΡΡΡΠΏΠ½ΡΠΉ TCP-Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²ΡΠΈΠΊ. Π‘Π΄Π΅Π»Π°ΡΡ Π΅Π³ΠΎ β ΠΎΡΠ΄Π΅Π»ΡΠ½Π°Ρ ΡΠ°Π±ΠΎΡΠ°.
ΠΠ»Ρ ΡΠ΅Ρ , ΠΊΠΎΠΌΡ Π½ΡΠΆΠ΅Π½ Π³ΠΎΡΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡΠ΅Ρ, Π½ΠΎ Π½Π΅ Ρ ΠΎΡΠ΅ΡΡΡ Π²ΠΎ Π²ΡΡΠΌ ΡΡΠΎΠΌ ΠΊΠΎΠ²ΡΡΡΡΡΡΡ, ΠΌΡ ΠΏΠΎΡΡΠ°ΡΠ°Π»ΠΈΡΡ ΡΠΏΡΠΎΡΡΠΈΡΡ ΠΆΠΈΠ·Π½Ρ ΠΈ ΡΠ΄Π΅Π»Π°Π»ΠΈ Π³ΠΎΡΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡΠ΅Ρ Π½Π° Patroni Ρ ΡΠ΅Π±Ρ Π² ΠΎΠ±Π»Π°ΠΊΠ΅, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠ΅ΡΡΠΈΡΡ Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΠΎ. ΠΠΎΠΌΠΈΠΌΠΎ ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ΅ΡΠ°, ΠΌΡ ΡΠ΄Π΅Π»Π°Π»ΠΈ:
- TCP-Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²ΡΠΈΠΊ; ΠΏΠΎ ΡΠ°Π·Π½ΡΠΌ ΠΏΠΎΡΡΠ°ΠΌ ΠΎΠ½ Π²ΡΠ΅Π³Π΄Π° ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΌΠ°ΡΡΠ΅Ρ, ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΡ ΠΈΠ»ΠΈ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΡ ΡΠ΅ΠΏΠ»ΠΈΠΊΡ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ;
- API Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π°ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠ΅ΡΠ° Patroni.
ΠΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΡΠ»Π°ΡΡΡ ΠΈ ΡΠ΅ΡΠ΅Π· API ΠΎΠ±Π»Π°ΠΊΠ° MCS, ΠΈ Π²Π΅Π±-ΠΊΠΎΠ½ΡΠΎΠ»Ρ.
ΠΠ΅ΠΌΠΎ
ΠΠ»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ PostgreSQL ΠΊΠ»Π°ΡΡΠ΅ΡΠ° Π² ΠΎΠ±Π»Π°ΠΊΠ΅ MCS Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ ΠΏΠΎΠ²Π΅Π΄Π΅Ρ ΡΠ΅Π±Ρ ΠΆΠΈΠ²ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°Ρ Ρ Π‘Π£ΠΠ.
ΠΠ°Π»Π΅Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ ΠΊΠΎΠ΄ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ΄Π΅Ρ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡΠΊΡΡΡΡΠ²Π΅Π½Π½ΡΠ΅ ΡΠΎΠ±ΡΡΠΈΡ ΠΈ ΡΠΎΠΎΠ±ΡΠ°ΡΡ ΠΎΠ± ΡΡΠΎΠΌ Π½Π° ΡΠΊΡΠ°Π½. Π ΡΠ»ΡΡΠ°Π΅ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΎΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠΎΠΎΠ±ΡΠ°ΡΡ ΠΎΠ± ΡΡΠΎΠΌ ΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ ΡΠ²ΠΎΡ ΡΠ°Π±ΠΎΡΡ Π² ΡΠΈΠΊΠ»Π΅, ΠΏΠΎΠΊΠ° ΠΌΡ Π΅Π³ΠΎ Π½Π΅ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠ΅ΠΉ Ctrl + C.
from __future__ import print_function
from datetime import datetime
from random import randint
from time import sleep
import psycopg2
def main():
try:
connection = psycopg2.connect(user = "admin",
password = "P@ssw0rd",
host = "89.208.87.38",
port = "5432",
database = "myproddb")
cursor = connection.cursor()
cursor.execute("SELECT version();")
record = cursor.fetchone()
print("Connection opened to", record[0])
cursor.execute(
"INSERT INTO log VALUES ({});".format(randint(1, 10000)))
connection.commit()
cursor.execute("SELECT COUNT(event_id) from log;")
record = cursor.fetchone()
print("Logged a value, overall count: {}".format(record[0]))
except Exception as error:
print ("Error while connecting to PostgreSQL", error)
finally:
if connection:
cursor.close()
connection.close()
print("Connection closed")
if __name__ == '__main__':
try:
while True:
try:
print(datetime.now())
main()
sleep(3)
except Exception as e:
print("Caught error:n", e)
sleep(1)
except KeyboardInterrupt:
print("exit")
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ PostgreSQL. Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΊΠ»Π°ΡΡΠ΅Ρ Π² ΠΎΠ±Π»Π°ΠΊΠ΅ MCS, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ API. Π ΠΎΠ±ΡΡΠ½ΠΎΠΌ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π΅, Π³Π΄Π΅ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ OS_TOKEN ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ ΡΠΎΠΊΠ΅Π½ Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ API (ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ openstack token issue), Π½Π°Π±Π΅ΡΠ΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΊΠ»Π°ΡΡΠ΅Ρ:
cat <<EΠF > pgc10.json
{"cluster":{"name":"postgres10","allow_remote_access":true,"datastore":{"type":"postgresql","version":"10"},"databases":[{"name":"myproddb"}],"users":[{"databases":[{"name":"myproddb"}],"name":"admin","password":"P@ssw0rd"}],"instances":[{"key_name":"shared","availability_zone":"DP1","flavorRef":"d659fa16-c7fb-42cf-8a5e-9bcbe80a7538","nics":[{"net-id":"b91eafed-12b1-4a46-b000-3984c7e01599"}],"volume":{"size":50,"type":"DP1"}},{"key_name":"shared","availability_zone":"DP1","flavorRef":"d659fa16-c7fb-42cf-8a5e-9bcbe80a7538","nics":[{"net-id":"b91eafed-12b1-4a46-b000-3984c7e01599"}],"volume":{"size":50,"type":"DP1"}},{"key_name":"shared","availability_zone":"DP1","flavorRef":"d659fa16-c7fb-42cf-8a5e-9bcbe80a7538","nics":[{"net-id":"b91eafed-12b1-4a46-b000-3984c7e01599"}],"volume":{"size":50,"type":"DP1"}}]}}
EOF
curl -s -H "X-Auth-Token: $OS_TOKEN"
-H 'Accept: application/json'
-H 'Content-Type: application/json'
-d @pgc10.json https://infra.mail.ru:8779/v1.0/ce2a41bbd1434013b85bdf0ba07c770f/clusters
ΠΠΎΠ³Π΄Π° ΠΊΠ»Π°ΡΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΉΠ΄Π΅Ρ Π² ΡΡΠ°ΡΡΡ ACTIVE, Π²ΡΠ΅ ΠΏΠΎΠ»Ρ ΠΏΠΎΠ»ΡΡΠ°Ρ Π°ΠΊΡΡΠ°Π»ΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ β ΠΊΠ»Π°ΡΡΠ΅Ρ Π³ΠΎΡΠΎΠ².
Π GUI:
ΠΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡΡΡ ΠΈ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ°Π±Π»ΠΈΡΡ:
psql -h 89.208.87.38 -U admin -d myproddb
Password for user admin:
psql (11.1, server 10.7)
Type "help" for help.
myproddb=> CREATE TABLE log (event_id integer NOT NULL);
CREATE TABLE
myproddb=> INSERT INTO log VALUES (1),(2),(3);
INSERT 0 3
myproddb=> SELECT * FROM log;
event_id
----------
1
2
3
(3 rows)
myproddb=>
Π ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΡΠΊΠ°ΠΆΠ΅ΠΌ Π°ΠΊΡΡΠ°Π»ΡΠ½ΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ PostgreSQL. ΠΡ ΡΠΊΠ°ΠΆΠ΅ΠΌ Π°Π΄ΡΠ΅Ρ TCP-Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²ΡΠΈΠΊΠ°, ΡΠ΅ΠΌ ΡΠ°ΠΌΡΠΌ ΠΎΡΠΏΠ°Π΄ΡΡ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ Π² ΡΡΡΠ½ΠΎΠΌ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ Π½Π° Π°Π΄ΡΠ΅Ρ ΠΌΠ°ΡΡΠ΅ΡΠ°. ΠΠ°ΠΏΡΡΡΠΈΠΌ Π΅Π³ΠΎ. ΠΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ, ΡΠΎΠ±ΡΡΠΈΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ Π»ΠΎΠ³ΠΈΡΡΡΡΡΡ Π² Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
.
ΠΠ»Π°Π½ΠΎΠ²ΠΎΠ΅ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠ΅ΡΠ°
Π’Π΅ΠΏΠ΅ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΡΠ΅ΠΌ ΡΠ°Π±ΠΎΡΡ Π½Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΡΠΈ ΠΏΠ»Π°Π½ΠΎΠ²ΠΎΠΌ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ ΠΌΠ°ΡΡΠ΅ΡΠ°:
ΠΠ°Π±Π»ΡΠ΄Π°Π΅ΠΌ Π·Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ. ΠΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠ΅ΡΡΠ²Π°Π΅ΡΡΡ, Π½ΠΎ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ ΡΡΠΎ Π²ΡΠ΅Π³ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΠΊΡΠ½Π΄, Π² ΡΡΠΎΠΌ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ 9.
ΠΠ°Π΄Π΅Π½ΠΈΠ΅ ΠΌΠ°ΡΠΈΠ½Ρ
Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ ΡΡΠΌΠΈΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ, ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΌΠ°ΡΡΠ΅ΡΠ°. ΠΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΠΏΡΠΎΡΡΠΎ Π²ΡΠΊΠ»ΡΡΠΈΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½Ρ ΡΠ΅ΡΠ΅Π· ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Horizon, ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΡΠ°ΡΠ½ΠΎΠ΅ Π²ΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅. Π’Π°ΠΊΠΎΠ΅ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½ΠΎ Π²ΡΠ΅ΠΌΠΈ ΡΠ»ΡΠΆΠ±Π°ΠΌΠΈ, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅, Patroni.
ΠΠ°ΠΌ ΠΆΠ΅ Π½ΡΠΆΠ½ΠΎ Π½Π΅ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌΠΎΠ΅ Π²ΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅. ΠΠΎΡΡΠΎΠΌΡ Ρ ΠΏΠΎΠΏΡΠΎΡΠΈΠ» Π½Π°ΡΠΈΡ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠΎΠ² Π² ΡΠ΅ΡΡΠΎΠ²ΡΡ ΡΠ΅Π»ΡΡ Π²ΡΠΊΠ»ΡΡΠΈΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½Ρ β ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΌΠ°ΡΡΠ΅ΡΠ° β Π½Π΅ΡΡΠ°ΡΠ½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ.
Π ΡΡΠΎ ΠΆΠ΅ Π²ΡΠ΅ΠΌΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π»ΠΎ ΡΠ°Π±ΠΎΡΡ Π½Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ, ΡΠ°ΠΊΠΎΠ΅ ΡΠΊΡΡΡΠ΅Π½Π½ΠΎΠ΅ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠ΅ΡΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠΉΡΠΈ Π½Π΅Π·Π°ΠΌΠ΅ΡΠ½ΠΎ.
2019-03-29 10:45:56.071234
Connection opened to PostgreSQL 10.7 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36), 64-bit
Logged a value, overall count: 453
Connection closed
2019-03-29 10:45:59.205463
Connection opened to PostgreSQL 10.7 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36), 64-bit
Logged a value, overall count: 454
Connection closed
2019-03-29 10:46:02.661440
Error while connecting to PostgreSQL server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
Caught error:
local variable 'connection' referenced before assignment
β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦β¦.. - Π·Π΄Π΅ΡΡ ΠΊΠ°ΠΊΠΎΠ΅-ΡΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΎΡΠΈΠ±ΠΎΠΊ
2019-03-29 10:46:30.930445
Error while connecting to PostgreSQL server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
Caught error:
local variable 'connection' referenced before assignment
2019-03-29 10:46:31.954399
Connection opened to PostgreSQL 10.7 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36), 64-bit
Logged a value, overall count: 455
Connection closed
2019-03-29 10:46:35.409800
Connection opened to PostgreSQL 10.7 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36), 64-bit
Logged a value, overall count: 456
Connection closed
^Cexit
ΠΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠΌΠΎΠ³Π»ΠΎ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ ΡΠ²ΠΎΡ ΡΠ°Π±ΠΎΡΡ ΠΌΠ΅Π½Π΅Π΅ ΡΠ΅ΠΌ ΡΠ΅ΡΠ΅Π· 30 ΡΠ΅ΠΊΡΠ½Π΄. ΠΠ°, ΠΊΠ°ΠΊΠΎΠ΅-ΡΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΡΠ΅ΡΠ²ΠΈΡΠ° ΡΡΠΏΠ΅Π΅Ρ Π·Π°ΠΌΠ΅ΡΠΈΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΠΎ ΡΠ΅ΡΡΠ΅Π·Π½Π°Ρ ΠΏΠΎΠ»ΠΎΠΌΠΊΠ° ΡΠ΅ΡΠ²Π΅ΡΠ°, ΡΠ°ΠΊΠΎΠ΅ ΡΠ»ΡΡΠ°Π΅ΡΡΡ Π½Π΅ ΡΠ°ΠΊ ΡΠ°ΡΡΠΎ. ΠΡΠΈ ΡΡΠΎΠΌ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ (Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ) Π²ΡΡΠ΄ Π»ΠΈ ΡΡΠΏΠ΅Π» Π±Ρ ΠΎΡΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°ΠΊ ΠΆΠ΅ Π±ΡΡΡΡΠΎ, Π΅ΡΠ»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ½ Π½Π΅ ΡΠΈΠ΄Π΅Π» Π² ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ Π½Π°Π³ΠΎΡΠΎΠ²Π΅ ΡΠΎ ΡΠΊΡΠΈΠΏΡΠΎΠΌ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ.
ΠΡΠ²ΠΎΠ΄
ΠΠ°ΠΊ ΠΌΠ½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΡΠ°ΠΊΠΎΠΉ ΠΊΠ»Π°ΡΡΠ΅Ρ Π΄Π°Π΅Ρ ΠΊΠΎΠ»ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ Π΄Π»Ρ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠΎΠ². ΠΠΎ ΡΡΡΠΈ, ΡΠ΅ΡΡΠ΅Π·Π½ΡΠ΅ ΠΏΠΎΠ»ΠΎΠΌΠΊΠΈ ΠΈ Π²ΡΡ
ΠΎΠ΄Ρ ΠΈΠ· ΡΡΡΠΎΡ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² ΠΠ Π½Π΅ Π±ΡΠ΄ΡΡ Π·Π°ΠΌΠ΅ΡΠ½Ρ Π΄Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. ΠΠ΅ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΡΠΈΠ½ΠΈΡΡ ΡΡΠΎ-ΡΠΎ Π² ΡΠΏΠ΅ΡΠΊΠ΅ ΠΈ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΡΡΡ Π½Π° Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, ΡΠ΅ΡΠ²Π΅ΡΡ ΠΈ Ρ.ΠΏ. Π Π΅ΡΠ»ΠΈ ΡΠ°ΠΊΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² Π²ΠΈΠ΄Π΅ Π³ΠΎΡΠΎΠ²ΠΎΠ³ΠΎ ΡΠ΅ΡΠ²ΠΈΡΠ° Π² ΠΎΠ±Π»Π°ΠΊΠ΅, ΡΠΎ Π½Π΅ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΡΡΠ°ΡΠΈΡΡ Π²ΡΠ΅ΠΌΡ Π½Π° Π΅Π³ΠΎ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΡ. ΠΠΎΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ Π·Π°Π½ΠΈΠΌΠ°ΡΡΡΡ ΡΠ΅ΠΌ-ΡΠΎ ΠΏΠΎΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π΅Π΅.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com