{"id":497959,"date":"2026-10-09T08:09:31","date_gmt":"2026-10-09T05:09:31","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=497959"},"modified":"2026-10-09T08:09:31","modified_gmt":"2026-10-09T05:09:31","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=497959","title":{"rendered":"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 HAProxy \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0440\u043e\u043b\u0435\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u0432 PostgreSQL \u0438 \u0437\u0430\u0449\u0438\u0442\u044b \u043e\u0442 split brain"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h2>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h2>\n<p>HAProxy \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438, \u0447\u0442\u043e\u0431\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0440\u043e\u043b\u044c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u0432 PostgreSQL: \u043c\u0430\u0441\u0442\u0435\u0440 \u0438\u043b\u0438 \u0440\u0435\u043f\u043b\u0438\u043a\u0430, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043d\u0430 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430.<\/p>\n<p>\u041e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 HAProxy \u0434\u043b\u044f \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0440\u043e\u043b\u0435\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u0432:<br \/>1) \u0447\u0435\u0440\u0435\u0437 Patroni REST API<br \/>2) \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 in_hot_standby, \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0430<br \/>3) \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c select pg_is_in_recovery();<br \/>\u0414\u0432\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f, \u0435\u0441\u043b\u0438 Patroni\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043d\u0430 \u043f\u0430\u0443\u0437\u0443 \u0438\u043b\u0438 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/96\/c5\/d4\/96c5d463bacfaa667cb33a9e0803b0e7.png\" alt=\"\u0442\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u044f HAProxy + PostgreSQL\" title=\"\u0442\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u044f HAProxy + PostgreSQL\" width=\"345\" height=\"361\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/96\/c5\/d4\/96c5d463bacfaa667cb33a9e0803b0e7.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/96\/c5\/d4\/96c5d463bacfaa667cb33a9e0803b0e7.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0442\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u044f HAProxy + PostgreSQL<\/figcaption><\/div>\n<\/figure>\n<h2>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 Patroni REST API<\/h2>\n<p>\u0414\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a HAProxy \u043c\u043e\u0436\u0435\u0442 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043f\u043e\u0440\u0442 Patroni REST API \u043f\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 HTTP \u0438\u043b\u0438 \u043d\u0430 \u043f\u043e\u0440\u0442\u044b \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u0432 PostgreSQL. \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u0443\u0435\u0442 HAProxy, \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u044b \u043d\u0435 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u044f\u044e\u0442 HAProxy \u043e \u0441\u043c\u0435\u043d\u0435 \u0441\u0432\u043e\u0438\u0445 \u0440\u043e\u043b\u0435\u0439. \u042d\u0442\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u044b \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0447\u0442\u043e\u0431\u044b HAProxy \u043c\u043e\u0433 \u0431\u044b\u0441\u0442\u0440\u043e \u0440\u0435\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0441\u043c\u0435\u043d\u0443 \u0440\u043e\u043b\u0438.<\/p>\n<p>\u0412 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 HAProxy \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0434\u0432\u0435 \u0441\u0435\u043a\u0446\u0438\u0438 listen \u0434\u043b\u044f \u043c\u0430\u0441\u0442\u0435\u0440\u0430 \u0438 \u0440\u0435\u043f\u043b\u0438\u043a:<\/p>\n<pre><code class=\"yaml\">listen primary bind *:8001 option httpchk OPTIONS \/primary http-check expect status 200 default-server inter 2s fastinter 100ms downinter 2s fall 3 rise 2 observe layer4 error-limit 1 on-error fastinter init-state down on-marked-down shutdown-sessions  server wtantor1 127.0.0.1:5432 maxconn 100 check addr 127.0.1.1 port 8008 server wtantor2 127.0.0.1:5433 maxconn 100 check addr 127.0.1.2 port 8008 server wtantor3 127.0.0.1:5434 maxconn 100 check addr 127.0.1.3 port 8008listen replica bind *:8002 option httpchk OPTIONS \/replica http-check expect status 200 default-server inter 2s fastinter 100ms downinter 2s fall 3 rise 2 observe layer4 error-limit 1 on-error fastinter init-state down on-marked-down shutdown-sessions  server rtantor1 127.0.0.1:5432 maxconn 100 check addr 127.0.1.1 port 8008 server rtantor2 127.0.0.1:5433 maxconn 100 check addr 127.0.1.2 port 8008 server rtantor3 127.0.0.1:5434 maxconn 100 check addr 127.0.1.3 port 8008<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper\"><\/span><\/a><\/div><\/pre>\n<p>IP-\u0430\u0434\u0440\u0435\u0441 Patroni REST API \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u043e\u0442 ip-\u0430\u0434\u0440\u0435\u0441\u0430 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 PostgreSQL. <\/p>\n<p>\u0414\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0443\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b init-state=down \u0438, \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c, \u0443 \u0440\u0435\u043f\u043b\u0438\u043a on-marked-down=shutdown-session. \u0414\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0443 \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0432 \u0441\u0435\u043a\u0446\u0438\u0438\u00a0 defaults.<\/p>\n<p><a href=\"https:\/\/its.1c.ru\/db\/metod8dev\/content\/5971\/hdoc\">\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0430\u044f<\/a> \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f haproxy.cfg \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043d\u0430 1\u0421 \u0418\u0422\u0421.<\/p>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 Patroni REST API \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e, \u0435\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f Patroni \u0438 \u043e\u043d \u043d\u0435 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043d\u0430 \u043f\u0430\u0443\u0437\u0443 (\u043f\u0435\u0440\u0435\u0432\u0435\u0434\u0451\u043d \u0432 mainenance mode). \u0420\u0435\u0436\u0438\u043c \u043f\u0430\u0443\u0437\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u0438 \u043f\u0435\u0440\u0435\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<h2>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0440\u043e\u043b\u0438 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 \u043f\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0443 in_hot_standby, \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0441\u044b\u043b\u0430\u0435\u043c\u043e\u043c\u0443 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c<\/h2>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430 \u043c\u0430\u0441\u0442\u0435\u0440\u0430 \u0438 \u0440\u0435\u043f\u043b\u0438\u043a\u0443 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e (\u0431\u0435\u0437 Patroni) \u043f\u043e\u043b\u0435\u0437\u043d\u044b, \u0435\u0441\u043b\u0438 Patroni \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0440\u0435\u0436\u0438\u043c \u043f\u0430\u0443\u0437\u044b \u0438\u043b\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f. \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f HAProxy \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0430 \u0438 &#171;\u0431\u0435\u0441\u0448\u043e\u0432\u043d\u043e&#187; \u043f\u0435\u0440\u0435\u0447\u0438\u0442\u0430\u043d\u0430: \u0441\u0442\u0430\u0440\u044b\u0435 \u0441\u0435\u0441\u0441\u0438\u0438 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043d\u0430 \u0441\u0442\u0430\u0440\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438, \u043d\u043e\u0432\u044b\u0435 &#8212; \u043d\u0430 \u043d\u043e\u0432\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438.<\/p>\n<p>\u0420\u043e\u043b\u044c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0431\u0435\u0437 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a REST API Patroni, \u043f\u0443\u0442\u0451\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u00a0 in_hot_standby, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 PostgreSQL \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438. <\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438:<\/p>\n<pre><code>listen master1  mode tcp  bind *:8001  option tcp-check tcp-check connect linger tcp-check send-binary 00000041000300007573657200706f7374677265730064617461626173650074656d706c61746531006c6f675f646973636f6e6e656374696f6e73006f66660000 tcp-check expect binary 696e5f686f745f7374616e646279006f666600  tcp-check send-binary 5800000004 # X - \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u0441\u0435\u0441\u0441\u0438\u0438 server r1 127.0.0.1:5432 check server r2 127.0.0.1:5433 check server r3 127.0.0.1:5434 check listen replica1 mode tcp balance leastconn bind *:8002 option tcp-check tcp-check connect linger tcp-check send-binary 00000041000300007573657200706f7374677265730064617461626173650074656d706c61746531006c6f675f646973636f6e6e656374696f6e73006f66660000 tcp-check expect binary 696e5f686f745f7374616e646279006f6e00  server r1 127.0.0.1:5432 check server r2 127.0.0.1:5433 check server r3 127.0.0.1:5434 check<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b tcp-check. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043a\u043b\u0438\u0435\u043d\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u043f\u0430\u043a\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f (Startup):    <\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/23\/b3\/ab\/23b3ab6ee5bd74674694d6262595cc0b.png\" alt=\"\u043f\u0430\u043a\u0435\u0442 Startup \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 PostgreSQL\" title=\"\u043f\u0430\u043a\u0435\u0442 Startup \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 PostgreSQL\" width=\"687\" height=\"85\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/23\/b3\/ab\/23b3ab6ee5bd74674694d6262595cc0b.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/23\/b3\/ab\/23b3ab6ee5bd74674694d6262595cc0b.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u043f\u0430\u043a\u0435\u0442 Startup \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 PostgreSQL<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u0430\u043a\u0435\u0442 Startup \u043f\u043e\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c \u043d\u0430 \u043f\u043e\u0440\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 postmaster \u0438 \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u0443\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u0435\u0441\u0441\u0438\u0438. \u0412 \u044d\u0442\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u043f\u0435\u0440\u0432\u044b\u043c\u0438 \u0438\u0434\u0443\u0442 4 \u0431\u0430\u0439\u0442\u0430 \u0434\u043b\u0438\u043d\u044b, \u0437\u0430\u0442\u0435\u043c \u0432\u0435\u0440\u0441\u0438\u044f \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430. \u0412 PostgreSQL 18 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u0435\u0440\u0441\u0438\u044f 3.0 \u0438 3.2, \u0438 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 3.1. \u0417\u0430\u0442\u0435\u043c \u0438\u0434\u0443\u0442 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0430. \u041a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430 \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u0430, \u043e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0442\u043e\u043c \u0436\u0435 \u043f\u0430\u043a\u0435\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c client_encoding00UTF8, \u0432 HEX-\u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u044d\u0442\u043e 636c69656e745f656e636f64696e670055544638, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 HAProxy:<\/p>\n<p><code>tcp-check send-binary &lt;hexstring&gt; [comment &lt;msg&gt;]<\/code><\/p>\n<p>\u0415\u0441\u043b\u0438 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f, \u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430.<\/p>\n<p>\u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0432 Startup \u043f\u0430\u043a\u0435\u0442 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b: user. \u0415\u0441\u043b\u0438 \u0435\u0433\u043e \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c, \u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0451\u043d \u043f\u0430\u043a\u0435\u0442 \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439 28000:<\/p>\n<p><code>FATAL: no PostgreSQL user name specified in startup packet <\/code><\/p>\n<p>\u041d\u0438 \u0438\u043c\u044f \u0431\u0430\u0437\u044b, \u043d\u0438 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430 \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438. \u0415\u0441\u043b\u0438 \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u043c\u044f \u0431\u0430\u0437\u044b, \u0442\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0451\u043d \u043a \u0431\u0430\u0437\u0435 \u0441 \u0435\u0433\u043e \u0438\u043c\u0435\u043d\u0435\u043c. \u041f\u0440\u0438\u043c\u0435\u0440 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e Startup \u043f\u0430\u043a\u0435\u0442\u0430:<\/p>\n<p><code>tcp-check send-binary 00000017000300007573657200706f7374677265730000 <\/code><\/p>\n<p>\u0421\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 (backend) \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0432 \u043f\u0430\u043a\u0435\u0442\u0435 TCP (TCPframe) \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 PostgreSQL:<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/c7\/8f\/66\/c78f6670e7fed3f24365d36b57915eeb.png\" alt=\"\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 PostgreSQL \u0432 TCP frame\" title=\"\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 PostgreSQL \u0432 TCP frame\" width=\"665\" height=\"52\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/c7\/8f\/66\/c78f6670e7fed3f24365d36b57915eeb.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/c7\/8f\/66\/c78f6670e7fed3f24365d36b57915eeb.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 PostgreSQL \u0432 TCP frame<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u0435\u0440\u0432\u044b\u0439 \u0431\u0430\u0439\u0442 \u043f\u0430\u043a\u0435\u0442\u0430 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 PostgreSQL (\u043a\u0440\u043e\u043c\u0435 \u043f\u0430\u043a\u0435\u0442\u0430 Startup) \u044d\u0442\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u00a0 (\u043e\u0431\u044b\u0447\u043d\u043e, \u0431\u0443\u043a\u0432\u0430 \u043b\u0430\u0442\u0438\u043d\u0441\u043a\u043e\u0433\u043e \u0430\u043b\u0444\u0430\u0432\u0438\u0442\u0430 \u0432 \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435) \u0432 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0435 ASCII, \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0449\u0438\u0439 \u0442\u0438\u043f \u043f\u0430\u043a\u0435\u0442\u0430 (\u043c\u0435\u0442\u043a\u0443, tag). \u0417\u0430\u0442\u0435\u043c \u0438\u0434\u0443\u0442 4 \u0431\u0430\u0439\u0442\u0430 \u0441 \u0434\u043b\u0438\u043d\u043e\u0439 \u043f\u0430\u043a\u0435\u0442\u0430, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u043f\u0435\u0440\u0432\u044b\u0439 \u0431\u0430\u0439\u0442. <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f (trust), \u0442\u043e \u0441\u0435\u0440\u0432\u0435\u0440 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u0430\u043a\u0435\u0442\u044b, \u043f\u0435\u0440\u0432\u044b\u0439 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0442\u0438\u043f\u0430 &#8216;R&#8217; (AuthentificationRequest) \u0441 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c \u0438\u0437 4 \u043d\u0443\u043b\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0442, \u0447\u0442\u043e \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0443\u0441\u043f\u0435\u0448\u043d\u0430 (AuthenticationOk): 520000000800000000.<\/p>\n<h3>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430, \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u0443\u044e\u0449\u0435\u0433\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 <\/h3>\n<p>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430 \u043d\u0443\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0437\u043d\u0430\u0442\u044c. \u043a\u0430\u043a \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438\/\u0438\u043b\u0438 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043f\u043e\u0434\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/1d\/60\/75\/1d607575463b0f1bf2fca832117631a4.png\" alt=\"\u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u043f\u0430\u043a\u0435\u0442\u0430 Startup \u0432 haproxy.cfg\" title=\"\u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u043f\u0430\u043a\u0435\u0442\u0430 Startup \u0432 haproxy.cfg\" width=\"688\" height=\"244\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/1d\/60\/75\/1d607575463b0f1bf2fca832117631a4.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/1d\/60\/75\/1d607575463b0f1bf2fca832117631a4.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u043f\u0430\u043a\u0435\u0442\u0430 Startup \u0432 haproxy.cfg<\/figcaption><\/div>\n<\/figure>\n<p>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430, \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u0443\u044e\u0449\u0435\u0433\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 (StartupMessage):<\/p>\n<p><code>000000<em>41<\/em><\/code> &#8212; \u0434\u043b\u0438\u043d\u0430 \u043f\u0430\u043a\u0435\u0442\u0430 (\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 PostgreSQL) 65 \u0431\u0430\u0439\u0442 \u0432 \u0448\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u0435\u0440\u0438\u0447\u043d\u043e\u043c \u0432\u0438\u0434\u0435 (HEX). \u0414\u043b\u0438\u043d\u0430 \u043f\u0430\u043a\u0435\u0442\u0430 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u0430, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 3.0. \u0414\u043b\u0438\u043d\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 4 \u0431\u0430\u0439\u0442\u0430 \u0438 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0437\u0430 \u043e\u0434\u043d\u0438\u043c \u0431\u0430\u0439\u0442\u043e\u043c \u0442\u0438\u043f\u0430 \u043f\u0430\u043a\u0435\u0442\u0430. \u0412\u0441\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u0438\u043c\u0435\u044e\u0442 \u0442\u0438\u043f, \u043a\u0440\u043e\u043c\u0435 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 Startup, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435\u0442 \u0431\u0430\u0439\u0442\u0430 \u0442\u0438\u043f\u0430. <\/p>\n<p><code><strong>00030000<\/strong><\/code> &#8212; \u0432\u0435\u0440\u0441\u0438\u044f \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 3.0, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 PostgreSQL 7.4 (2003\u0433.). \u0412 18 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0432\u0435\u0440\u0441\u0438\u044f \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 3.2, \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u0441 3.0 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0441\u0435\u0440\u0432\u0435\u0440 \u043c\u043e\u0436\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u043b\u044e\u0447 \u0434\u043b\u0438\u043d\u043e\u0439 \u043e\u0442 4 \u0434\u043e 256 \u0431\u0430\u0439\u0442 (\u0432 18 \u0432\u0435\u0440\u0441\u0438\u0438 32 \u0431\u0430\u0439\u0442\u0430), \u0430 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b 3.0 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043a\u043b\u044e\u0447 \u0434\u043b\u0438\u043d\u043e\u0439 4 \u0431\u0430\u0439\u0442. \u041a\u043b\u044e\u0447 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0441\u0435\u0441\u0441\u0438\u0438. \u041a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u043a\u043b\u044e\u0447 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0430\u0442\u0430\u043a\u0438 \u043d\u0430 \u043e\u0442\u043a\u0430\u0437 \u0432 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0438, \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u044f \u0441\u0435\u0441\u0441\u0438\u0438. \u0412\u0435\u0440\u0441\u0438\u0438 3.1 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u043e, \u043d\u043e PostgreSQL \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u044e 3.1 <strong>00030001<\/strong>. \u0414\u043b\u044f \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u0432\u0435\u0440\u0441\u0438\u0438 3.2 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442: <strong>00030002<\/strong>. \u041a\u043b\u0438\u0435\u043d\u0442 libpq \u0432\u0435\u0440\u0441\u0438\u0438 18 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u044e 3.0. PostgreSQL 18 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044b \u043e\u0442 3.0 \u0434\u043e 3.2. \u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b 2.0 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043b \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0432\u0435\u0440\u0441\u0438\u0438 PostgreSQL 14. \u041f\u0440\u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0438 \u043d\u0435\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u043e\u0439\u00a0 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 PostgreSQL \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u0430\u043a\u0435\u0442 45 = E (ErrorResponse) \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439:<\/p>\n<p><code>FATAL: unsupported frontend protocol 2.0: <strong>server supports 3.0 to 3.2 <\/strong><\/code><\/p>\n<p><code>7573657200<\/code> &#8212; \u0441\u0442\u0440\u043e\u043a\u0430 \u0441\u043e \u0441\u043b\u043e\u0432\u043e\u043c user, \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u044e\u0449\u0430\u044f\u0441\u044f \u043d\u0443\u043b\u0435\u0432\u044b\u043c \u0431\u0430\u0439\u0442\u043e\u043c, \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0449\u0438\u043c \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438. \u042d\u0442\u043e \u0441\u043b\u043e\u0432\u043e \u0438 \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043f\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<p><code>706f73746772657300<\/code> &#8212; \u0441\u043b\u043e\u0432\u043e postgres \u0434\u043b\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438. \u041c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0435 \u0438\u043c\u044f.<\/p>\n<p><code>646174616261736500<\/code> &#8212; \u0441\u043b\u043e\u0432\u043e database. \u042d\u0442\u043e \u0441\u043b\u043e\u0432\u043e \u0438 \u0438\u043c\u044f \u0431\u0430\u0437\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<p><code>74656d706c6174653100<\/code> &#8212; \u0441\u043b\u043e\u0432\u043e template1. \u041c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u043c\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, postgres. \u0415\u0441\u043b\u0438 \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u044c, \u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u0411\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 template1 \u0435\u0441\u0442\u044c \u0432\u043e \u0432\u0441\u0435\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430\u0445 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 PostgreSQL. <\/p>\n<p><code>6c6f675f646973636f6e6e656374696f6e73006f666600<\/code> = log_disconnections00off00 <\/p>\n<p>\u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u044d\u0442\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u043e\u0442\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f, \u0435\u0441\u043b\u0438 \u043e\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u043d\u0430 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0435 PostgreSQL. \u041b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c log_disconnection \u043d\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u043e. \u0423\u0442\u0438\u043b\u0438\u0442\u0430 psql \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b application_name00psql \u0438 client_encoding00UTF8, \u0438\u0445 \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c, \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0430 \u0432 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0443 \u0441\u0435\u0440\u0432\u0435\u0440\u0430. <\/p>\n<p>00 &#8212; \u043f\u0430\u043a\u0435\u0442 Startup \u0437\u0430\u0432\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u0435\u0449\u0451 \u043e\u0434\u043d\u0438\u043c \u043d\u0443\u043b\u0435\u0432\u044b\u043c \u0431\u0430\u0439\u0442\u043e\u043c.<\/p>\n<h3>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c <\/h3>\n<p>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u043d\u0443\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u043f\u043e\u0447\u0435\u043c\u0443 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0431\u0430\u0439\u0442 \u0438 \u0438\u0445 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e:<\/p>\n<p><code><strong>tcp-check expect binary 696e5f686f745f7374616e646279006f666600<\/strong><\/code><\/p>\n<p>\u0438\u043b\u0438<\/p>\n<p><code><strong>tcp-check expect binary 696e5f686f745f7374616e646279006f666600<\/strong><\/code><\/p>\n<p>\u00a0\u0421\u0435\u0432\u0435\u0440 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0434\u043d\u0438\u043c TCP-\u043f\u0430\u043a\u0435\u0442\u043e\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f:<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/f1\/ba\/06\/f1ba06e6e1f71ecc3ca313b8a39a62a1.png\" alt=\"\u043f\u0430\u043a\u0435\u0442\u044b \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c PostgreSQL \u043f\u043e\u0441\u043b\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u043a\u0430\u0446\u0438\u0438\" title=\"\u043f\u0430\u043a\u0435\u0442\u044b \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c PostgreSQL \u043f\u043e\u0441\u043b\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u043a\u0430\u0446\u0438\u0438\" width=\"1821\" height=\"1119\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/f1\/ba\/06\/f1ba06e6e1f71ecc3ca313b8a39a62a1.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/f1\/ba\/06\/f1ba06e6e1f71ecc3ca313b8a39a62a1.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u043f\u0430\u043a\u0435\u0442\u044b \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c PostgreSQL \u043f\u043e\u0441\u043b\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u043a\u0430\u0446\u0438\u0438<\/figcaption><\/div>\n<\/figure>\n<p>520000000800000000 &#8212; \u0431\u0430\u0439\u0442 \u0442\u0438\u043f\u0430 \u043f\u0430\u043a\u0435\u0442\u0430 52 = &#8216;<strong>R<\/strong>&#8216; (Authentification Request). \u0417\u0430\u0442\u0435\u043c \u0438\u0434\u0451\u0442 4 \u0431\u0430\u0439\u0442\u0430 \u0441 \u0434\u043b\u0438\u043d\u043e\u0439 \u043e\u0441\u0442\u0430\u0432\u0448\u0435\u0439\u0441\u044f \u0447\u0430\u0441\u0442\u0438 \u043f\u0430\u043a\u0435\u0442\u0430 &#8212; 8 \u0431\u0430\u0439\u0442. \u0427\u0435\u0442\u044b\u0440\u0435 \u043d\u0443\u043b\u044f &#8212; \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0443\u0441\u043f\u0435\u0448\u043d\u0430 (AuthenticationOk).<\/p>\n<p>53000000<em>1b496e74657276616c5374796c6500706f73746772657300<\/em> &#8212; \u0437\u0430\u0442\u0435\u043c \u0441\u0440\u0430\u0437\u0443 \u0438\u0434\u0451\u0442 \u043f\u0430\u043a\u0435\u0442 53 = &#8216;<strong>S<\/strong>&#8216; (ParameterStatus) \u0438 \u0435\u0433\u043e \u0434\u043b\u0438\u043d\u0430, &#8212; \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 27 \u0431\u0430\u0439\u0442. \u0412 \u043f\u0430\u043a\u0435\u0442\u0435 IntervalStyle00postgres.<\/p>\n<p>\u0422\u0430\u043a\u0438\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 15 &#8212; \u043f\u043e \u0447\u0438\u0441\u043b\u0443 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 PQparameterStatus.<\/p>\n<p>4b0000000c00156c427fa84d15 &#8212; \u043f\u0430\u043a\u0435\u0442 \u0442\u0438\u043f\u0430 4b = &#8216;<strong>K<\/strong>&#8216; (BackendKeyData). \u0414\u043b\u044f \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u0432\u0435\u0440\u0441\u0438\u0438 3.0 \u0434\u043b\u0438\u043d\u0430 \u043f\u0430\u043a\u0435\u0442\u0430 0c = 12 \u0431\u0430\u0439\u0442. \u041f\u0430\u043a\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u043e\u043c\u0435\u0440 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 PID = 00156c42 (4 \u0431\u0430\u0439\u0442\u0430) \u0438 \u043a\u043b\u044e\u0447 Cancel Key 7fa84d15 (4 \u0431\u0430\u0439\u0442\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u0432\u0435\u0440\u0441\u0438\u0438 3.0)\u00a0 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043b\u0438\u0435\u043d\u0442, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0435\u0440\u0432\u0430\u0442\u044c \u0441\u0435\u0441\u0441\u0438\u044e. \u0414\u043b\u044f \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u0432\u0435\u0440\u0441\u0438\u0438 3.2 \u0434\u043b\u0438\u043d\u0430 \u043a\u043b\u044e\u0447\u0430 32 \u0431\u0430\u0439\u0442\u0430 \u0438 \u043c\u043e\u0436\u0435\u0442 \u0432\u0430\u0440\u044c\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442 4 \u0434\u043e 256 \u0431\u0430\u0439\u0442.<\/p>\n<p>5a0000000549 &#8212; \u043f\u0430\u043a\u0435\u0442 \u0442\u0438\u043f\u0430 5a =<strong> <\/strong>&#8216;<strong>Z<\/strong>&#8216; (ReadyForQuery), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u044b. \u0414\u043b\u0438\u043d\u0430 \u043f\u0430\u043a\u0435\u0442\u0430 5 \u0431\u0430\u0439\u0442. 49 = <strong>I<\/strong> (Idle), \u0447\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0441\u0435\u0441\u0441\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u0430\u0438\u0432\u0430\u0435\u0442 \u0438 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \u043d\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u0430. \u041f\u0430\u043a\u0435\u0442\u044b \u0442\u0438\u043f\u0430 S \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u0432 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0439 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438.<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440, \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b HAProxy, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u0430:<\/p>\n<p><code><strong>tcp-check expect binary 520000000800000000<\/strong><\/code><strong> <\/strong><\/p>\n<p>\u0414\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0432 \u043e\u0442\u0432\u0435\u0442\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0431\u0430\u0439\u0442, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u043f\u0430\u043a\u0435\u0442\u0443 52 = &#8216;<strong>R<\/strong>&#8216; (Authentification Request) \u0441 payload \u043e\u0431 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438. <\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e, \u044d\u0442\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0438\u0437\u043b\u0438\u0448\u043d\u044f\u044f, \u043c\u043e\u0436\u043d\u043e \u0441\u0440\u0430\u0437\u0443 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 in_hot_standby, \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0440\u043e\u043b\u044c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 PostgreSQL.<\/p>\n<p>\u0414\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u043f\u0430\u043a\u0435\u0442\u0430 &#8216;<strong>S<\/strong>&#8216; \u0441 in_hot_standby=off (\u043c\u0430\u0441\u0442\u0435\u0440): <\/p>\n<p><code>\u00a0tcp-check expect binary 53000000<strong>17<\/strong>696e5f686f745f7374616e646279006f666600 <\/code><\/p>\n<p>\u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u043f\u0430\u043a\u0435\u0442\u0430 &#8216;<strong>S<\/strong>&#8216; \u0441 in_hot_standby=on (\u0440\u0435\u043f\u043b\u0438\u043a\u0430): <\/p>\n<p>\u00a0<code>tcp-check expect binary 53000000<strong>16<\/strong>696e5f686f745f7374616e646279006f6e00 <\/code><\/p>\n<p>\u041f\u0440\u0435\u0444\u0438\u043a\u0441 53000000<strong>17<\/strong> \u0438\u043b\u0438 53000000<strong>16<\/strong> \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u0441\u0442\u0430\u0432\u0448\u0430\u044f\u0441\u044f \u0447\u0430\u0441\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432\u0440\u044f\u0434 \u043b\u0438 \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u0442\u0441\u044f \u0432 \u043a\u0430\u043a\u043e\u043c-\u0442\u043e \u0434\u0440\u0443\u0433\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435.<\/p>\n<h3>\u041a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0435 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0435 \u0441\u0435\u0441\u0441\u0438\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 <\/h3>\n<p>\u0421\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 <a href=\"https:\/\/docs.tantorlabs.ru\/tdb\/ru\/18_4\/se\/libpq-status.html#LIBPQ-PQPARAMETERSTATUS\">https:\/\/docs.tantorlabs.ru\/tdb\/ru\/18_4\/se\/libpq-status.html#LIBPQ-PQPARAMETERSTATUS<\/a> . \u0422\u0430\u043a\u0436\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f, \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u0441\u0435\u0441\u0441\u0438\u0438. \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b default_transaction_read_only \u0438 in_hot_standby \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f, <strong>\u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 PostgreSQL \u0432\u0435\u0440\u0441\u0438\u0438 14<\/strong>. <strong>\u041f\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 in_hot_standby \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043b\u0438\u0447\u0438\u0442\u044c \u043c\u0430\u0441\u0442\u0435\u0440 \u043e\u0442 \u0440\u0435\u043f\u043b\u0438\u043a\u0438<\/strong>.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/b8\/36\/9d\/b8369d1d36761e34bfb12e85c8029353.png\" alt=\"\u043f\u0430\u043a\u0435\u0442 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044f \u0441\u0435\u0441\u0441\u0438\u0438 PostgreSQL\" title=\"\u043f\u0430\u043a\u0435\u0442 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044f \u0441\u0435\u0441\u0441\u0438\u0438 PostgreSQL\" width=\"1008\" height=\"296\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/b8\/36\/9d\/b8369d1d36761e34bfb12e85c8029353.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/b8\/36\/9d\/b8369d1d36761e34bfb12e85c8029353.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u043f\u0430\u043a\u0435\u0442 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044f \u0441\u0435\u0441\u0441\u0438\u0438 PostgreSQL<\/figcaption><\/div>\n<\/figure>\n<p>\u0414\u043b\u044f HAProxy \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <strong>linger<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 HAProxy \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043f\u0430\u043a\u0435\u0442, \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 (send-binary 5800000004), \u0431\u0435\u0437 \u043d\u0435\u0433\u043e \u0432 \u043b\u043e\u0433\u0435 PostgreSQL \u0431\u0443\u0434\u0443\u0442 \u043e\u0448\u0438\u0431\u043a\u0438:<\/p>\n<p><code>LOG: could not receive data from client: Connection reset by peer<\/code><\/p>\n<h2>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0440\u043e\u043b\u0438 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 SQL-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c <\/h2>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043cselectpg_is_in_recovery(); \u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a &#8212; \u043b\u0438\u0448\u043d\u0438\u0439 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 roundtrip, \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e &#8212; \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f SQL-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432. \u0412 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0435 \u0435\u0441\u0442\u044c \u043f\u0430\u043a\u0435\u0442\u044b &#8216;F&#8217; (FunctionCall), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u044f\u0434\u0440\u0430 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e. \u041e\u043d\u0438 \u043d\u0435 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u043d\u044b, \u0442\u0430\u043a \u043a\u0430\u043a \u0434\u043b\u044f \u0432\u044b\u0437\u043e\u0432\u0430 \u043d\u0443\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c OID \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0430 \u043e\u043d \u043d\u0435 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0441 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c\u0438 &#8216;Q&#8217; (Query) \u0431\u043e\u043b\u0435\u0435 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e.<\/p>\n<pre><code>listen master1  mode tcp  bind *:8001  option tcp-check tcp-check connect linger tcp-check send-binary 00000041000300007573657200706f7374677265730064617461626173650074656d706c61746531006c6f675f646973636f6e6e656374696f6e73006f66660000 tcp-check expect binary 5a000000 # \u0433\u043e\u0442\u043e\u0432 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u044b 5a = Z tcp-check send-binary 510000002073656c6563742070675f69735f696e5f7265636f7665727928293b00# \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 select pg_is_in_recovery();  tcp-check send-binary 5800000004 tcp-check expect binary 66430000000d # \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 66 = f = false server r1 127.0.0.1:5432 check server r2 127.0.0.1:5433 check server r3 127.0.0.1:5434 check listen replica1 mode tcp balance leastconn  bind *:8002  option tcp-check tcp-check connect linger tcp-check send-binary 00000041000300007573657200706f7374677265730064617461626173650074656d706c61746531006c6f675f646973636f6e6e656374696f6e73006f66660000 tcp-check expect binary 5a000000 # \u0433\u043e\u0442\u043e\u0432 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u044b tcp-check send-binary 510000002073656c6563742070675f69735f696e5f7265636f7665727928293b00 tcp-check send-binary 5800000004 tcp-check expect binary 74430000000d # \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 74 = t = true server r1 127.0.0.1:5432 check server r2 127.0.0.1:5433 check server r3 127.0.0.1:5434 check<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<h3>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 SQL \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c <\/h3>\n<p>\u042d\u0442\u043e\u0442 \u0440\u0430\u0437\u0434\u0435\u043b \u0441\u0442\u0430\u0442\u044c\u0438 \u043d\u0443\u0436\u0435\u043d, \u0435\u0441\u043b\u0438 \u0432\u044b \u0437\u0430\u0445\u043e\u0442\u0438\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0440\u043e\u043b\u0438 \u0438 \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/38\/82\/94\/38829431f9f13d94c8ea60383f112818.png\" alt=\"\u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u043f\u0440\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u0440\u043e\u043b\u0438 \u043c\u0430\u0441\u0442\u0435\u0440\/\u0440\u0435\u043f\u043b\u0438\u043a\u0430 SQL-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c\" title=\"\u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u043f\u0440\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u0440\u043e\u043b\u0438 \u043c\u0430\u0441\u0442\u0435\u0440\/\u0440\u0435\u043f\u043b\u0438\u043a\u0430 SQL-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c\" width=\"1669\" height=\"901\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/38\/82\/94\/38829431f9f13d94c8ea60383f112818.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/38\/82\/94\/38829431f9f13d94c8ea60383f112818.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u043f\u0440\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u0440\u043e\u043b\u0438 \u043c\u0430\u0441\u0442\u0435\u0440\/\u0440\u0435\u043f\u043b\u0438\u043a\u0430 SQL-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439 \u043f\u0430\u043a\u0435\u0442 \u0441 SQL-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c:<\/p>\n<p><code>tcp-check send-binary 510000002073656c6563742070675f69735f696e5f7265636f7665727928293b00<\/code><\/p>\n<p><code>5100000020 <\/code>&#8212; \u0432\u043d\u0430\u0447\u0430\u043b\u0435 \u0442\u0438\u043f (tag) \u043f\u0430\u043a\u0435\u0442\u0430 51 = &#8216;<strong>Q<\/strong>&#8216; (Query); \u0437\u0430\u0442\u0435\u043c \u0434\u043b\u0438\u043d\u0430 \u043f\u0430\u043a\u0435\u0442\u0430 0x20 = 32 \u0431\u0430\u0439\u0442\u0430; <\/p>\n<p>\u0437\u0430\u0442\u0435\u043c \u0441\u0442\u0440\u043e\u043a\u0430 \u0441 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c: select pg_is_in_recovery(); \u0438 \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u0431\u0430\u0439\u0442 00.<\/p>\n<p>TCP-\u043f\u0430\u043a\u0435\u0442 \u0441 \u043e\u0442\u0432\u0435\u0442\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u0430\u043a\u0435\u0442\u044b \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 PostgreSQL:<\/p>\n<p><code>540000002a000170675f69735f696e5f7265636f7665727900000000000000000000100001 <\/code><\/p>\n<p><code>ffffffff0000440000000b000100000001<strong>66<\/strong>430000000d5345 4c4543542031005a0000000549 <\/code><\/p>\n<p><code>5400000020<\/code> &#8212; \u043f\u0430\u043a\u0435\u0442 \u0442\u0438\u043f\u0430 54 = &#8216;<strong>T<\/strong>&#8216; (RowDescription). \u0414\u043b\u0438\u043d\u0430 2a = 42 \u0431\u0430\u0439\u0442\u0430. <\/p>\n<p><code>0001<\/code> &#8212; \u0447\u0438\u0441\u043b\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0432 \u043e\u0442\u0432\u0435\u0442\u0435.<\/p>\n<p><code>70675f69735f696e5f7265636f7665727900<\/code> &#8212; \u0438\u043c\u044f \u0441\u0442\u043e\u043b\u0431\u0446\u0430 pg_is_in_recovery.<\/p>\n<p>\u0417\u0430\u0442\u0435\u043c \u0438\u0434\u0443\u0442: OID \u0442\u0430\u0431\u043b\u0438\u0446\u044b (4 \u043d\u0443\u043b\u044f, \u0442\u0430\u043a \u043a\u0430\u043a \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0430 \u043d\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u0430); \u043d\u043e\u043c\u0435\u0440 \u0441\u0442\u043e\u043b\u0431\u0446\u0430 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 (2 \u043d\u0443\u043b\u044f); 00000010 &#8212; OID \u0442\u0438\u043f\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u0430 = 16 = bool, \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445;<\/p>\n<p><code>0001<\/code> &#8212; \u0434\u043b\u0438\u043d\u0430 \u0442\u0438\u043f\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u0434\u043b\u044f boolean 1 \u0431\u0430\u0439\u0442; ffffffff = -1 (\u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d), \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0442\u0438\u043f\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u0430 (typmod); \u0444\u043e\u0440\u043c\u0430\u0442 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 &#8212; 2 \u043d\u0443\u043b\u044f (\u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442, Text mode). \u0417\u0430\u0442\u0435\u043c \u0438\u0434\u0451\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435:<\/p>\n<p><code>440000000b<\/code> &#8212; \u043f\u0430\u043a\u0435\u0442 \u0442\u0438\u043f\u0430 44 = &#8216;<strong>D<\/strong>&#8216; (DataRow). \u0414\u043b\u0438\u043d\u0430 0b = 11 \u0431\u0430\u0439\u0442; 0001 &#8212; \u0447\u0438\u0441\u043b\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439; 00000001 &#8212; \u0434\u043b\u0438\u043d\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f 1 \u0431\u0430\u0439\u0442; <strong>66<\/strong> &#8212; \u0441\u0430\u043c\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <strong>f<\/strong>. \u0417\u0430\u0442\u0435\u043c \u0438\u0434\u0451\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435:<\/p>\n<p><code>430000000d<\/code> &#8212; \u043f\u0430\u043a\u0435\u0442 \u0442\u0438\u043f\u0430 43 = &#8216;<strong>C<\/strong>&#8216; (CommandComplete). \u0414\u043b\u0438\u043d\u0430 0d = 13 \u0431\u0430\u0439\u0442; \u0441\u0442\u0440\u043e\u043a\u0430 \u0441 \u0442\u044d\u0433\u043e\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u044b. \u0414\u043b\u044f \u043a\u043e\u043c\u0430\u043d\u0434 \u0442\u0438\u043f\u0430 select \u0432\u044b\u0434\u0430\u0451\u0442 \u0447\u0438\u0441\u043b\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0451\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a \u0432 \u0432\u0438\u0434\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 (\u0442\u044d\u0433\u0430)\u00a0\u00a0 SELECT \u0447\u0438\u0441\u043b\u043e. \u0422\u0430\u043a \u043a\u0430\u043a \u0441\u0442\u0440\u043e\u043a\u0430 \u043e\u0434\u043d\u0430, \u0442\u043e \u0447\u0438\u0441\u043b\u043e = 1. \u0417\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f \u043d\u0443\u043b\u0435\u0432\u044b\u043c \u0431\u0430\u0439\u0442\u043e\u043c (00).<\/p>\n<p>\u0414\u043b\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b insert \u0442\u044d\u0433: INSERT 0 \u0447\u0438\u0441\u043b\u043e. \u0420\u0430\u043d\u044c\u0448\u0435, \u0432\u043c\u0435\u0441\u0442\u043e 0 \u043c\u043e\u0433 \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f OID \u0442\u0430\u0431\u043b\u0438\u0446\u044b.<\/p>\n<p>\u0417\u0430\u0442\u0435\u043c \u0438\u0434\u0451\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435:<\/p>\n<p><code>5a0000000549<\/code> &#8212; \u043f\u0430\u043a\u0435\u0442 \u0442\u0438\u043f\u0430 5a = &#8216;<strong>Z<\/strong>&#8216; (ReadyForQuery). \u0414\u043b\u0438\u043d\u0430 5 \u0431\u0430\u0439\u0442. 49 &#8212; \u0441\u0442\u0430\u0442\u0443\u0441 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 <strong>I<\/strong> (<strong>I<\/strong>dle) \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \u043d\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u0430.<\/p>\n<p>\u041f\u0430\u043a\u0435\u0442 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0441\u0435\u0441\u0441\u0438\u0438, \u043f\u043e\u0441\u044b\u043b\u0430\u0435\u043c\u044b\u0439 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c:<\/p>\n<p><code>5800000004<\/code> &#8212; \u043f\u0430\u043a\u0435\u0442 \u0442\u0438\u043f\u0430 58 = &#8216;<strong>X<\/strong>&#8216; (Terminate) \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0433\u043e \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044f \u0441\u0435\u0441\u0441\u0438\u0438. \u0414\u043b\u0438\u043d\u0430 4 \u0431\u0430\u0439\u0442\u0430. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430 \u043a\u043b\u0438\u0435\u043d\u0442 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0442\u044c TCP-\u0441\u043e\u043a\u0435\u0442.<\/p>\n<p>\u0412 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 HAProxy, \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043e\u0442\u0441\u044b\u043b\u043a\u0438 \u043f\u0430\u043a\u0435\u0442\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0441\u0435\u0441\u0441\u0438\u0438 (<code>tcp-checksend-binary 5800000004<\/code>) \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u0434\u0442\u0438 \u0434\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 (tcp-checkexpect), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c\u0441\u044f \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a HAProxy \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0434\u0443\u0442 \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438.<\/p>\n<h2>\u0417\u0430\u0449\u0438\u0442\u0430 \u043e\u0442 split brain \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 HAProxy <\/h2>\n<p>\u00a0\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430 \u043c\u0430\u0441\u0442\u0435\u0440\u0430 \u0438 \u0440\u0435\u043f\u043b\u0438\u043a\u0443 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e (\u0431\u0435\u0437 Patroni) \u043f\u043e\u043b\u0435\u0437\u043d\u044b, \u0435\u0441\u043b\u0438 Patroni \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0440\u0435\u0436\u0438\u043c \u043f\u0430\u0443\u0437\u044b \u0438\u043b\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f. \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f HAProxy \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0430 \u0438 &#171;\u0431\u0435\u0441\u0448\u043e\u0432\u043d\u043e&#187; \u043f\u0435\u0440\u0435\u0447\u0438\u0442\u0430\u043d\u0430: \u0441\u0442\u0430\u0440\u044b\u0435 \u0441\u0435\u0441\u0441\u0438\u0438 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043d\u0430 \u0441\u0442\u0430\u0440\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438, \u043d\u043e\u0432\u044b\u0435 &#8212; \u043d\u0430 \u043d\u043e\u0432\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/e4\/1d\/28\/e41d2876cccafad783190bc59235c79e.png\" alt=\"\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 haproxy.cfg \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u043d\u0430 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u044c primary (\u043c\u0430\u0441\u0442\u0435\u0440\u0430)\" title=\"\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 haproxy.cfg \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u043d\u0430 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u044c primary (\u043c\u0430\u0441\u0442\u0435\u0440\u0430)\" width=\"1643\" height=\"881\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/e4\/1d\/28\/e41d2876cccafad783190bc59235c79e.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/e4\/1d\/28\/e41d2876cccafad783190bc59235c79e.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 haproxy.cfg \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u043d\u0430 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u044c primary (\u043c\u0430\u0441\u0442\u0435\u0440\u0430)<\/figcaption><\/div>\n<\/figure>\n<p>\u041e\u0434\u043d\u0430 \u0438\u0437 \u0437\u0430\u0434\u0430\u0447 Patroni &#8212; \u043d\u0435 \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u0434\u0432\u0443\u0445 \u043c\u0430\u0441\u0442\u0435\u0440\u043e\u0432 (split brain). \u0415\u0441\u043b\u0438 Patroni \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0432\u0435\u0434\u0451\u043d \u0432 \u0440\u0435\u0436\u0438\u043c \u043f\u0430\u0443\u0437\u044b, \u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u043c\u0430\u0441\u0442\u0435\u0440 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u043f\u0435\u0440\u0435\u0434 promote \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0440\u0435\u043f\u043b\u0438\u043a. HAProxy \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c, \u0447\u0442\u043e \u0441\u0440\u0435\u0434\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043d \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432, \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0441\u0435\u0440\u0432\u0435\u0440 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043c\u0430\u0441\u0442\u0435\u0440\u043e\u043c. \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438 \u0441 Patroni, \u043a\u0430\u043a \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0437\u0430\u0449\u0438\u0442\u0430 \u043e\u0442 split brain. <\/p>\n<p>\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f HAProxy \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0435\u0442\u0441\u044f: \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u0435\u043a\u0446\u0438\u0438 listen \u043c\u0430\u0441\u0442\u0435\u0440\u0430 \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u044f\u0437\u043a\u0443 \u0438\u0437 \u0434\u0432\u0443\u0445 \u0441\u0435\u043a\u0446\u0438\u0439 frontend \u0438 backend. \u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 listen \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u0441\u0435\u043a\u0446\u0438\u044e\u00a0 backend, \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b bind, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u0432 \u0441\u0435\u043a\u0446\u0438\u044e frontend. <\/p>\n<p>\u0412 \u0441\u0435\u043a\u0446\u0438\u044e frontend \u043c\u0430\u0441\u0442\u0435\u0440\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043c\u0430\u0441\u0442\u0435\u0440 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0438\u0437 \u0432\u0441\u0435\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432, \u0438\u043d\u0430\u0447\u0435 \u043e\u0442\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c \u0432 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0438 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u043c\u0438. \u0412\u044b\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f &#171;CP&#187; &#8212; \u0437\u0430\u0449\u0438\u0442\u0430 \u043e\u0442 \u0440\u0430\u0441\u0449\u0435\u043f\u043b\u0435\u043d\u0438\u044f (partition tolerance) \u0432\u043c\u0435\u0441\u0442\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438 (availability), \u043a\u0430\u043a \u0438 \u0432 Patroni. \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043c\u0430\u0441\u0442\u0435\u0440\u0430:<\/p>\n<pre><code>frontend masterf  mode tcp  bind *:8001 acl single_master nbsrv(master1) eq 1 tcp-request connection reject if !single_master  default_backend master1backend master1  mode tcp  option tcp-check ... \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430 \u043c\u0430\u0441\u0442\u0435\u0440\u0430  server r1 127.0.0.1:5432 check  server r2 127.0.0.1:5433 check  server r3 127.0.0.1:5434 check listen replica1 mode tcp  balance leastconn  bind *:8002  option tcp-check  ... \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430 \u0440\u0435\u043f\u043b\u0438\u043a\u0443  server r1 127.0.0.1:5432 check  server r2 127.0.0.1:5433 check  server r3 127.0.0.1:5434 check<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0414\u043b\u044f \u0440\u0435\u043f\u043b\u0438\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u043c\u0435\u043d\u044f\u0442\u044c \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0443 <code>listen<\/code>, \u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442 \u0438\u0437 \u0434\u0432\u0443\u0445 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432 frontend \u0438 backend:    <\/p>\n<pre><code>frontend replicaf  mode tcp  bind *:8002 use_backend replica1backend replica1 mode tcp  balance leastconn  option tcp-check  ... \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430 \u0440\u0435\u043f\u043b\u0438\u043a\u0443  server r1 127.0.0.1:5432 check  server r2 127.0.0.1:5433 check  server r3 127.0.0.1:5434 check<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<h2>pgbouncer \u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 in_hot_standby <\/h2>\n<p>\u041f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f 15 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, PostgreSQL 18 \u0432\u0435\u0440\u0441\u0438\u0438, \u0431\u0435\u0437 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0430, \u043f\u043e\u0441\u044b\u043b\u0430\u0435\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0443 \u043f\u0430\u043a\u0435\u0442 \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u044d\u0442\u0438\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 (<a href=\"http:\/\/docs.tantorlabs.ru\/tdb\/ru\/18_4\/se\/protocol-flow.html#PROTOCOL-ASYNC\">http:\/\/docs.tantorlabs.ru\/tdb\/ru\/18_4\/se\/protocol-flow.html#PROTOCOL-ASYNC<\/a> ). \u0422\u0430\u043a\u0436\u0435, \u0442\u0430\u043a\u043e\u0439 \u043f\u0430\u043a\u0435\u0442 \u043f\u043e\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0441\u043b\u0435 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438, \u0434\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f ReadyForQuery (&#8216;Z&#8217; ). \u041f\u0430\u043a\u0435\u0442 \u043d\u0435 \u043f\u043e\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f, \u0435\u0441\u043b\u0438 \u043a\u043b\u0438\u0435\u043d\u0442 \u043e\u0442\u043a\u0440\u044b\u043b \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044e. \u041f\u0430\u043a\u0435\u0442 \u043f\u043e\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043d\u0435 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438. \u0412 14 \u0432\u0435\u0440\u0441\u0438\u0438 PostgreSQL \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u0431\u044b\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b in_hot_standby \u0438 default_transaction_read_only, \u0432 16 \u0432\u0435\u0440\u0441\u0438\u0438 \u0431\u044b\u043b \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 scram_iterations, \u0432 18 \u0432\u0435\u0440\u0441\u0438\u0438 \u0431\u044b\u043b \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 search_path.\u00a0 \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 transaction_read_only \u043d\u0435 \u0432\u0445\u043e\u0434\u0438\u0442 \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0445 PostgreSQL.<\/p>\n<p>\u00a0pgbouncer \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 PQparameterStatus, \u043d\u043e<strong> \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u044b \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c<\/strong> ( <a href=\"http:\/\/www.pgbouncer.org\/config.html\">\u0440\u0430\u0437\u0434\u0435\u043b<\/a>, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043e\u043f\u0446\u0438\u044e track_extra_parameters) &#8212; 10 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0438\u0437 15. \u0412 \u044d\u0442\u043e\u0442 \u0441\u043f\u0438\u0441\u043e\u043a pgbouncer \u043d\u0435 \u0432\u0445\u043e\u0434\u0438\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 in_hot_standby, \u043e\u043d \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c. \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 default_transaction_read_only \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0441\u043c\u0435\u043d\u0435 \u0440\u043e\u043b\u0435\u0439 \u043c\u0430\u0441\u0442\u0435\u0440-\u0440\u0435\u043f\u043b\u0438\u043a\u0430. \u0415\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 (10 \u0448\u0442\u0443\u043a) \u0432 \u043e\u043f\u0446\u0438\u0438 track_extra_parameters, \u0442\u043e pgbouncer \u0431\u0443\u0434\u0435\u0442 \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u0441\u0432\u043e\u0435\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u0432 \u043e\u043f\u0446\u0438\u0438 track_extra_parameters, \u0438 pgbouncer \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u0441\u0435\u0441\u0441\u0438\u044f\u0445 \u0434\u043b\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, track_extra_parameters \u043f\u0443\u0441\u0442 \u0438 \u043d\u0435 \u043a\u044d\u0448\u0438\u0440\u0443\u0435\u0442 \u043d\u0438 \u043e\u0434\u0438\u043d \u0438\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 10 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0431\u0443\u0434\u0443\u0442 \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u0435\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043e\u043f\u0446\u0438\u044f server_reset_query_always=1.<\/p>\n<h2>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 pgbouncer: \u043d\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 in_hot_standby,\u0435\u0441\u043b\u0438 \u043e\u043d \u043f\u043e\u043c\u0435\u043d\u044f\u043b\u0441\u044f<\/h2>\n<p>\u0415\u0441\u043b\u0438 \u0440\u0435\u043f\u043b\u0438\u043a\u0430 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043c\u0430\u0441\u0442\u0435\u0440\u043e\u043c, \u0442\u043e in_hot_standby \u043c\u0435\u043d\u044f\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441 true \u043d\u0430 false, \u043d\u043e <strong>\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430<\/strong> \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 pgbouncer \u0441\u0435\u0441\u0441\u0438\u0438 \u043d\u0435 \u0440\u0430\u0437\u0440\u044b\u0432\u0430\u044e\u0442\u0441\u044f, \u0438 <strong>pgbouncer \u0432\u044b\u0434\u0430\u0451\u0442 \u0441\u0432\u043e\u0438\u043c \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 in_hot_standby=true, \u0445\u043e\u0442\u044f \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 in_hot_standby=false<\/strong>. \u042d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 PostgreSQL \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 S \u043f\u0430\u043a\u0435\u0442\u044b \u0441 \u043d\u043e\u0432\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c, \u043d\u043e pgbouncer \u044d\u0442\u0438 \u043f\u0430\u043a\u0435\u0442\u044b \u043d\u0435 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u0442.<\/p>\n<p>pgbouncer \u043c\u043e\u0436\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0435\u0440\u0435\u0434 HAProxy. \u0422\u0430\u043a\u0438\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 <a href=\"http:\/\/haproxy.com\/user-spotlight-series\/load-balancing-and-high-availability-on-postgres-using-haproxy\">\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f<\/a> , \u0447\u0442\u043e\u0431\u044b \u043a\u043b\u0438\u0435\u043d\u0442\u044b \u043d\u0435 \u0437\u0430\u043c\u0435\u0447\u0430\u043b\u0438 \u0440\u0430\u0437\u0440\u044b\u0432\u0430 \u0441\u0435\u0441\u0441\u0438\u0439, \u0442\u0430\u043a \u043a\u0430\u043a pgbouncer \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u0435\u0441\u0441\u0438\u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0431\u043e\u044f \u0441\u0435\u0441\u0441\u0438\u0439 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0441\u043c\u0435\u043d\u044b \u0440\u043e\u043b\u0435\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430\u043c\u0438. \u0412 \u0442\u0430\u043a\u0438\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u0445, \u043c\u043e\u0436\u043d\u043e \u0441\u0442\u0430\u0432\u0438\u0442\u044c pgbouncer \u043d\u0430 \u043f\u0430\u0443\u0437\u0443 \u043f\u0435\u0440\u0435\u0434 switchover.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/ca\/6c\/4f\/ca6c4fd1957cfa50f8b9db0997abec5e.png\" alt=\"pgbouncer \u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 in_hot_standby\" title=\"pgbouncer \u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 in_hot_standby\" width=\"1637\" height=\"1011\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/ca\/6c\/4f\/ca6c4fd1957cfa50f8b9db0997abec5e.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/ca\/6c\/4f\/ca6c4fd1957cfa50f8b9db0997abec5e.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>pgbouncer \u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 in_hot_standby<\/figcaption><\/div>\n<\/figure>\n<p>\u0418\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e, \u043a\u043b\u0438\u0435\u043d\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0434\u0441\u043e\u0435\u0434\u0438\u043d\u044f\u044e\u0442\u0441\u044f \u043a pgbouncer, \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442 \u0432 \u043f\u0430\u043a\u0435\u0442\u0435 PQparameterStatus \u043b\u043e\u0436\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438 \u043c\u043e\u0433\u0443\u0442 \u0440\u0430\u0437\u043e\u0440\u0432\u0430\u0442\u044c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u043a\u043b\u0438\u0435\u043d\u0442 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 target_session_attrs=primary \u0438\u043b\u0438 target_session_attrs=read-write. \u041f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<p><code><strong>psql \"postgres:\/\/127.0.0.1:5432\/postgres?target_session_attrs=primary\"<\/strong><\/code><\/p>\n<p><code>psql: error: connection to server at \"127.0.0.1\", port 5434 failed: server is in hot standby mode<\/code><\/p>\n<p>\u0422\u0430\u043a\u0438\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u044b \u043c\u043e\u0433\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <strong>target_session_attrs=any<\/strong> \u0438\u043b\u0438, \u043f\u0440\u0438 \u043f\u0440\u043e\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0438 \u0440\u0435\u043f\u043b\u0438\u043a\u0438, \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0437\u043e\u0440\u0432\u0430\u0442\u044c \u0441\u0435\u0441\u0441\u0438\u0438 pgbouncer \u0441 PostgreSQL:<\/p>\n<p><code><strong>psql \"postgres:\/\/127.0.0.1:6432\/postgres?target_session_attrs=primary\"<\/strong><\/code><\/p>\n<p><code>psql: error: connection to server at \"127.0.0.1\", port 5434 failed: server is in hot standby mode <\/code><\/p>\n<p><code><strong>psql -q \"postgres:\/\/127.0.0.1:6432\/postgres?target_session_attrs=any\" <\/strong><\/code><\/p>\n<p><code>postgres=#<\/code><\/p>\n<p>\u00a0\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0432: <a href=\"http:\/\/github.com\/pgbouncer\/pgbouncer\/issues\/859\">http:\/\/github.com\/pgbouncer\/pgbouncer\/issues\/859<\/a> <\/p>\n<p><a href=\"http:\/\/github.com\/keycloak\/keycloak\/issues\/49515\">\u041f\u0440\u0438\u043c\u0435\u0440<\/a>, \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f\u043c\u0438 \u0447\u0435\u0440\u0435\u0437 pgbouncer, \u0435\u0441\u043b\u0438 \u043a\u043b\u0438\u0435\u043d\u0442 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 targetServerType=primary.<\/p>\n<p>\u00a0\u0420\u0430\u0437\u043e\u0440\u0432\u0430\u0442\u044c \u0441\u0435\u0441\u0441\u0438\u0438 pgbouncer \u0441 PostgreSQL \u043c\u043e\u0436\u043d\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <strong>RECONNECT<\/strong>, \u043f\u043e\u0434\u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0432\u0448\u0438\u0441\u044c \u043d\u0430 \u043f\u043e\u0440\u0442 pgbouncer \u043a \u0431\u0430\u0437\u0435 \u0441 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c pgbouncer. \u0414\u043b\u044f \u043f\u043e\u0441\u044b\u043b\u043a\u0438 \u044d\u0442\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u043d\u0443\u0436\u043d\u043e \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c Patroni, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438 \u043f\u0440\u043e\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0438 \u0440\u0435\u043f\u043b\u0438\u043a\u0438 \u0434\u043e \u043c\u0430\u0441\u0442\u0435\u0440\u0430, Patroni \u043f\u043e\u0434\u0441\u043e\u0435\u0434\u0438\u043d\u044f\u043b\u0441\u044f \u043a pgbouncer \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b \u043a\u043e\u043c\u0430\u043d\u0434\u0443 RECONNECT. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u0444\u0430\u0439\u043b <code>\/opt\/tantor\/etc\/patroni\/callback.sh<\/code>:<\/p>\n<pre><code class=\"bash\">#!\/usr\/bin\/bash ACTION=$1; ROLE=$2; CLUSTER_NAME=$3; [ \"$ACTION\" = \"on_role_change\" ] &amp;&amp; [ \"$ROLE\" = \"primary\" ] &amp;&amp; psql -h localhost -p 6432 -d pgbouncer -c \"RECONNECT\"\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432\u044b\u0437\u043e\u0432\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0432 \/opt\/tantor\/etc\/patroni\/patroni.yml:postgresql: callbacks:  on_role_change: \/opt\/tantor\/etc\/patroni\/callback.sh<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p><strong>\u0415\u0441\u043b\u0438 pgbouncer \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043c\u0435\u0436\u0434\u0443 \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c\u0438 \u0438 HAProxy, \u0442\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043d\u0435\u0442, \u0442\u0430\u043a \u043a\u0430\u043a HAProxy \u0440\u0430\u0437\u0440\u044b\u0432\u0430\u0435\u0442 \u0441\u0435\u0441\u0441\u0438\u0438 pgbouncer \u0441 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430\u043c\u0438, \u0441\u043c\u0435\u043d\u0438\u0432\u0448\u0438\u043c\u0438 \u0440\u043e\u043b\u0438<\/strong>.<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041f\u043e\u043b\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 haproxy.cfg, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u0448\u0430\u0431\u043b\u043e\u043d:<\/p>\n<pre><code>global log stderr format iso local0 errdefaults mode tcp balance leastconn #  \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440, \u0433\u0434\u0435 \u043c\u0435\u043d\u044c\u0448\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e random log    global option tcplog option dontlognull retries 2 # \u0435\u0441\u043b\u0438 \u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0435 \u043e\u0442\u0432\u0435\u0442\u0438\u043b, \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u0435\u0449\u0451 2 \u0440\u0430\u0437\u0430 \u043f\u0435\u0440\u0435\u0434 \u0432\u044b\u0434\u0430\u0447\u0435\u0439 \u043e\u0448\u0438\u0431\u043a\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0443 option redispatch  # \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u043f\u043e\u0441\u043b\u0435 \u0438\u0441\u0447\u0435\u0440\u043f\u0430\u043d\u0438\u044f retries timeout queue   1m # \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0430, \u043f\u0435\u0440\u0435\u0434 \u0432\u044b\u0434\u0430\u0447\u0435\u0439 \u0435\u043c\u0443 \u043e\u0448\u0438\u0431\u043a\u0438 timeout connect 1s # \u0442\u0430\u0439\u043c\u0430\u0443\u0442 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f HAProxy \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u043c timeout client  3h # \u0432\u0440\u0435\u043c\u044f \u043d\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0430, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f net.ipv4.tcp_keepalive_time = 7200 timeout server  3h # \u0432\u0440\u0435\u043c\u044f \u043d\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0441\u0435\u0440\u0432\u0435\u0440\u0430 timeout check 2s # \u0442\u0430\u0439\u043c\u0430\u0443\u0442 \u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 maxconn 100 # \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0430 \u0438\u043b\u0438 \u0431\u044d\u043a\u0435\u043d\u0434\u0430 \u043f\u0435\u0440\u0435\u0434 \u043f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u043e\u0439 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c default-server inter 2s fastinter 100ms downinter 2s fall 3 rise 2 observe layer4 error-limit 1 on-error fastinter init-state down on-marked-down shutdown-sessions listen stats mode http bind *:8000 stats enable stats uri \/ stats refresh 10s stats show-legendslisten primary bind *:8001 option httpchk OPTIONS \/primary http-check expect status 200 server wtantor1 127.0.0.1:5432 maxconn 100 check addr 127.0.1.1 port 8008 server wtantor2 127.0.0.1:5433 maxconn 100 check addr 127.0.1.2 port 8008 server wtantor3 127.0.0.1:5434 maxconn 100 check addr 127.0.1.3 port 8008listen replica bind *:8002 option httpchk OPTIONS \/replica http-check expect status 200 server rtantor1 127.0.0.1:5432 maxconn 100 check addr 127.0.1.1 port 8008 server rtantor2 127.0.0.1:5433 maxconn 100 check addr 127.0.1.2 port 8008 server rtantor3 127.0.0.1:5434 maxconn 100 check addr 127.0.1.3 port 8008listen master1 mode tcp bind *:8003 option tcp-check tcp-check connect linger tcp-check send-binary 00000041000300007573657200706f7374677265730064617461626173650074656d706c61746531006c6f675f646973636f6e6e656374696f6e73006f66660000 #\u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u0441\u043b\u043e\u0432\u0430 \u0432 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0435 ASCII, \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0432 HEX-\u0444\u043e\u0440\u043c\u0430\u0442\u0435: user00postgres00database00template100log_disconnections00off00 tcp-check expect binary 696e5f686f745f7374616e646279006f666600 # in_hot_standby off=6f6666 on=6f6e tcp-check send-binary 5800000004 # \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u0441\u0435\u0441\u0441\u0438\u0438 'X' = 58, \u0434\u043b\u0438\u043d\u0430 4 \u0431\u0430\u0439\u0442\u0430 server r1 127.0.0.1:5432 check server r2 127.0.0.1:5433 check server r3 127.0.0.1:5434 checklisten replica1 mode tcp bind *:8004 option tcp-check tcp-check connect linger tcp-check send-binary 00000041000300007573657200706f7374677265730064617461626173650074656d706c61746531006c6f675f646973636f6e6e656374696f6e73006f66660000  tcp-check expect binary 696e5f686f745f7374616e646279006f6e00 # off=6f6666 on=6f6e tcp-check send-binary 5800000004 server r1 127.0.0.1:5432 check server r2 127.0.0.1:5433 check server r3 127.0.0.1:5434 checkfrontend masterf mode tcp bind *:8005 acl single_master nbsrv(masterb) eq 1 tcp-request connection reject if !single_master default_backend masterbbackend masterb mode tcp option tcp-check tcp-check connect linger tcp-check send-binary 00000041000300007573657200706f7374677265730064617461626173650074656d706c61746531006c6f675f646973636f6e6e656374696f6e73006f66660000 # \u043f\u0430\u043a\u0435\u0442 Startup tcp-check expect binary 5a000000 # 'Z' - \u0433\u043e\u0442\u043e\u0432 \u043a \u043f\u0440\u0438\u0435\u043c\u0443 \u043a\u043e\u043c\u0430\u043d\u0434 tcp-check send-binary 510000002073656c6563742070675f69735f696e5f7265636f7665727928293b00 # 'Q' \u0437\u0430\u043f\u0440\u043e\u0441 select pg_is_in_recovery(); tcp-check send-binary 5800000004 # 'X' - \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u0441\u0435\u0441\u0441\u0438\u0438 tcp-check expect binary 66430000000d # fC - false Complete \u0438\u043b\u0438 7443 = tC server r1 127.0.0.1:5432 check server r2 127.0.0.1:5433 check server r3 127.0.0.1:5434 checklisten replicaf mode tcp bind *:8006 option tcp-check tcp-check connect linger tcp-check send-binary 00000041000300007573657200706f7374677265730064617461626173650074656d706c61746531006c6f675f646973636f6e6e656374696f6e73006f66660000 # \u043f\u0430\u043a\u0435\u0442 Startup tcp-check expect binary 5a000000 # Z = 5a tcp-check send-binary 510000002073656c6563742070675f69735f696e5f7265636f7665727928293b00 # 'Q', \u0437\u0430\u043f\u0440\u043e\u0441 select pg_is_in_recovery();00 tcp-check send-binary 5800000004 # 'X' - \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u0441\u0435\u0441\u0441\u0438\u0438 tcp-check expect binary 74430000000d # fC - false Complete \u0438\u043b\u0438 7443 = tC server r1 127.0.0.1:5432 check server r2 127.0.0.1:5433 check server r3 127.0.0.1:5434 check<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0412\u044b\u0431\u043e\u0440 \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u043e\u0432, \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 Patroni, pgbouncer \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043d\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f. \u042d\u0442\u043e \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u043d\u0438\u0436\u043a\u0435 Tantor DBA2-18, \u0433\u043b\u0430\u0432\u044b \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u044b\u043b\u043e\u0436\u0435\u043d\u044b \u0432 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0435 \u043d\u0430 <a href=\"http:\/\/dba1.ru\">http:\/\/dba1.ru<\/a>.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/e1\/74\/bd\/e174bdc6817d43c9f7e4b8af62e2584b.png\" alt=\"\" title=\"\" width=\"1821\" height=\"1119\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/e1\/74\/bd\/e174bdc6817d43c9f7e4b8af62e2584b.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/e1\/74\/bd\/e174bdc6817d43c9f7e4b8af62e2584b.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<\/div>\n<\/details>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1092218\/\">https:\/\/habr.com\/ru\/articles\/1092218\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435HAProxy \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438, \u0447\u0442\u043e\u0431\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0440\u043e\u043b\u044c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u0432 PostgreSQL: \u043c\u0430\u0441\u0442\u0435\u0440 \u0438\u043b\u0438 \u0440\u0435\u043f\u043b\u0438\u043a\u0430, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043d\u0430 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430.\u041e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 HAProxy \u0434\u043b\u044f \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0440\u043e\u043b\u0435\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u0432:1) \u0447\u0435\u0440\u0435\u0437 Patroni REST API2) \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 in_hot_standby, \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u04303) \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c select pg_is_in_recovery();\u0414\u0432\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f, \u0435\u0441\u043b\u0438 Patroni\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043d\u0430 \u043f\u0430\u0443\u0437\u0443 \u0438\u043b\u0438 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f.\u0442\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u044f HAProxy + PostgreSQL\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 Patroni REST API\u0414\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a HAProxy \u043c\u043e\u0436\u0435\u0442 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043f\u043e\u0440\u0442 Patroni REST API \u043f\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 HTTP \u0438\u043b\u0438 \u043d\u0430 \u043f\u043e\u0440\u0442\u044b \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u0432 PostgreSQL. \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u0443\u0435\u0442 HAProxy, \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u044b \u043d\u0435 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u044f\u044e\u0442 HAProxy \u043e \u0441\u043c\u0435\u043d\u0435 \u0441\u0432\u043e\u0438\u0445 \u0440\u043e\u043b\u0435\u0439. \u042d\u0442\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u044b \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0447\u0442\u043e\u0431\u044b HAProxy \u043c\u043e\u0433 \u0431\u044b\u0441\u0442\u0440\u043e \u0440\u0435\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0441\u043c\u0435\u043d\u0443 \u0440\u043e\u043b\u0438.\u0412 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 HAProxy \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0434\u0432\u0435 \u0441\u0435\u043a\u0446\u0438\u0438 listen \u0434\u043b\u044f \u043c\u0430\u0441\u0442\u0435\u0440\u0430 \u0438 \u0440\u0435\u043f\u043b\u0438\u043a:listen primary bind *:8001 option httpchk OPTIONS \/primary http-check expect status 200 default-server inter 2s fastinter 100ms downinter 2s fall 3 rise 2 observe layer4 error-limit 1 on-error fastinter init-state down on-marked-down shutdown-sessions  server wtantor1 127.0.0.1:5432 maxconn 100 check addr 127.0.1.1 port 8008 server wtantor2 127.0.0.1:5433 maxconn 100 check addr 127.0.1.2 port 8008 server wtantor3 127.0.0.1:5434 maxconn 100 check addr 127.0.1.3 port 8008listen replica bind *:8002 option httpchk OPTIONS \/replica http-check expect status 200 default-server inter 2s fastinter 100ms downinter 2s fall 3 rise 2 observe layer4 error-limit 1 on-error fastinter init-state down on-marked-down shutdown-sessions  server rtantor1 127.0.0.1:5432 maxconn 100 check addr 127.0.1.1 port 8008 server rtantor2 127.0.0.1:5433 maxconn 100 check addr 127.0.1.2 port 8008 server rtantor3 127.0.0.1:5434 maxconn 100 check addr 127.0.1.3 port 8008IP-\u0430\u0434\u0440\u0435\u0441 Patroni REST API \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u043e\u0442 ip-\u0430\u0434\u0440\u0435\u0441\u0430 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 PostgreSQL. \u0414\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0443\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b init-state=down \u0438, \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c, \u0443 \u0440\u0435\u043f\u043b\u0438\u043a on-marked-down=shutdown-session. \u0414\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0443 \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0432 \u0441\u0435\u043a\u0446\u0438\u0438\u00a0 defaults.\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f haproxy.cfg \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043d\u0430 1\u0421 \u0418\u0422\u0421.\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 Patroni REST API \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e, \u0435\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f Patroni \u0438 \u043e\u043d \u043d\u0435 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043d\u0430 \u043f\u0430\u0443\u0437\u0443 (\u043f\u0435\u0440\u0435\u0432\u0435\u0434\u0451\u043d \u0432 mainenance mode). \u0420\u0435\u0436\u0438\u043c \u043f\u0430\u0443\u0437\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u0438 \u043f\u0435\u0440\u0435\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0440\u043e\u043b\u0438 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 \u043f\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0443 in_hot_standby, \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0441\u044b\u043b\u0430\u0435\u043c\u043e\u043c\u0443 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430 \u043c\u0430\u0441\u0442\u0435\u0440\u0430 \u0438 \u0440\u0435\u043f\u043b\u0438\u043a\u0443 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e (\u0431\u0435\u0437 Patroni) \u043f\u043e\u043b\u0435\u0437\u043d\u044b, \u0435\u0441\u043b\u0438 Patroni \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0440\u0435\u0436\u0438\u043c \u043f\u0430\u0443\u0437\u044b \u0438\u043b\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f. \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f HAProxy \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0430 \u0438 &#171;\u0431\u0435\u0441\u0448\u043e\u0432\u043d\u043e&#187; \u043f\u0435\u0440\u0435\u0447\u0438\u0442\u0430\u043d\u0430: \u0441\u0442\u0430\u0440\u044b\u0435 \u0441\u0435\u0441\u0441\u0438\u0438 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043d\u0430 \u0441\u0442\u0430\u0440\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438, \u043d\u043e\u0432\u044b\u0435 &#8212; \u043d\u0430 \u043d\u043e\u0432\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438.\u0420\u043e\u043b\u044c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0431\u0435\u0437 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a REST API Patroni, \u043f\u0443\u0442\u0451\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u00a0 in_hot_standby, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 PostgreSQL \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438. \u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438:listen master1  mode tcp  bind *:8001  option tcp-check tcp-check connect linger tcp-check send-binary 00000041000300007573657200706f7374677265730064617461626173650074656d706c61746531006c6f675f646973636f6e6e656374696f6e73006f66660000 tcp-check expect binary 696e5f686f745f7374616e646279006f666600  tcp-check send-binary 5800000004 # X &#8212; \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u0441\u0435\u0441\u0441\u0438\u0438 server r1 127.0.0.1:5432 check server r2 127.0.0.1:5433 check server r3 127.0.0.1:5434 check listen replica1 mode tcp balance leastconn bind *:8002 option tcp-check tcp-check connect linger tcp-check send-binary 00000041000300007573657200706f7374677265730064617461626173650074656d706c61746531006c6f675f646973636f6e6e656374696f6e73006f66660000 tcp-check expect binary 696e5f686f745f7374616e646279006f6e00  server r1 127.0.0.1:5432 check server r2 127.0.0.1:5433 check server r3 127.0.0.1:5434 check\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b tcp-check. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043a\u043b\u0438\u0435\u043d\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u043f\u0430\u043a\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f (Startup):    \u043f\u0430\u043a\u0435\u0442 Startup \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 PostgreSQL\u041f\u0430\u043a\u0435\u0442 Startup \u043f\u043e\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c \u043d\u0430 \u043f\u043e\u0440\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 postmaster \u0438 \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u0443\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u0435\u0441\u0441\u0438\u0438. \u0412 \u044d\u0442\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u043f\u0435\u0440\u0432\u044b\u043c\u0438 \u0438\u0434\u0443\u0442 4 \u0431\u0430\u0439\u0442\u0430 \u0434\u043b\u0438\u043d\u044b, \u0437\u0430\u0442\u0435\u043c \u0432\u0435\u0440\u0441\u0438\u044f \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430. \u0412 PostgreSQL 18 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u0435\u0440\u0441\u0438\u044f 3.0 \u0438 3.2, \u0438 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 3.1. \u0417\u0430\u0442\u0435\u043c \u0438\u0434\u0443\u0442 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0430. \u041a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430 \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u0430, \u043e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0442\u043e\u043c \u0436\u0435 \u043f\u0430\u043a\u0435\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c client_encoding00UTF8, \u0432 HEX-\u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u044d\u0442\u043e 636c69656e745f656e636f64696e670055544638, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 HAProxy:tcp-check send-binary &lt;hexstring&gt; [comment &lt;msg&gt;]\u0415\u0441\u043b\u0438 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f, \u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430.\u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0432 Startup \u043f\u0430\u043a\u0435\u0442 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b: user. \u0415\u0441\u043b\u0438 \u0435\u0433\u043e \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c, \u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0451\u043d \u043f\u0430\u043a\u0435\u0442 \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439 28000:FATAL: no PostgreSQL user name specified in startup packet \u041d\u0438 \u0438\u043c\u044f \u0431\u0430\u0437\u044b, \u043d\u0438 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430 \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438. \u0415\u0441\u043b\u0438 \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u043c\u044f \u0431\u0430\u0437\u044b, \u0442\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0451\u043d \u043a \u0431\u0430\u0437\u0435 \u0441 \u0435\u0433\u043e \u0438\u043c\u0435\u043d\u0435\u043c. \u041f\u0440\u0438\u043c\u0435\u0440 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e Startup \u043f\u0430\u043a\u0435\u0442\u0430:tcp-check send-binary 00000017000300007573657200706f7374677265730000 \u0421\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 (backend) \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0432 \u043f\u0430\u043a\u0435\u0442\u0435 TCP (TCPframe) \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 PostgreSQL:\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 PostgreSQL \u0432 TCP frame\u041f\u0435\u0440\u0432\u044b\u0439 \u0431\u0430\u0439\u0442 \u043f\u0430\u043a\u0435\u0442\u0430 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 PostgreSQL (\u043a\u0440\u043e\u043c\u0435 \u043f\u0430\u043a\u0435\u0442\u0430 Startup) \u044d\u0442\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u00a0 (\u043e\u0431\u044b\u0447\u043d\u043e, \u0431\u0443\u043a\u0432\u0430 \u043b\u0430\u0442\u0438\u043d\u0441\u043a\u043e\u0433\u043e \u0430\u043b\u0444\u0430\u0432\u0438\u0442\u0430 \u0432 \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435) \u0432 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0435 ASCII, \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0449\u0438\u0439 \u0442\u0438\u043f \u043f\u0430\u043a\u0435\u0442\u0430 (\u043c\u0435\u0442\u043a\u0443, tag). \u0417\u0430\u0442\u0435\u043c \u0438\u0434\u0443\u0442 4 \u0431\u0430\u0439\u0442\u0430 \u0441 \u0434\u043b\u0438\u043d\u043e\u0439 \u043f\u0430\u043a\u0435\u0442\u0430, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u043f\u0435\u0440\u0432\u044b\u0439 \u0431\u0430\u0439\u0442. \u0415\u0441\u043b\u0438 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f (trust), \u0442\u043e \u0441\u0435\u0440\u0432\u0435\u0440 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u0430\u043a\u0435\u0442\u044b, \u043f\u0435\u0440\u0432\u044b\u0439 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0442\u0438\u043f\u0430 &#8216;R&#8217; (AuthentificationRequest) \u0441 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c \u0438\u0437 4 \u043d\u0443\u043b\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0442, \u0447\u0442\u043e \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0443\u0441\u043f\u0435\u0448\u043d\u0430 (AuthenticationOk): 520000000800000000.\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430, \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u0443\u044e\u0449\u0435\u0433\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430 \u043d\u0443\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0437\u043d\u0430\u0442\u044c. \u043a\u0430\u043a \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438\/\u0438\u043b\u0438 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043f\u043e\u0434\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f.\u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u043f\u0430\u043a\u0435\u0442\u0430 Startup \u0432 haproxy.cfg\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430, \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u0443\u044e\u0449\u0435\u0433\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 (StartupMessage):00000041 &#8212; \u0434\u043b\u0438\u043d\u0430 \u043f\u0430\u043a\u0435\u0442\u0430 (\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 PostgreSQL) 65 \u0431\u0430\u0439\u0442 \u0432 \u0448\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u0435\u0440\u0438\u0447\u043d\u043e\u043c \u0432\u0438\u0434\u0435 (HEX). \u0414\u043b\u0438\u043d\u0430 \u043f\u0430\u043a\u0435\u0442\u0430 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u0430, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 3.0. \u0414\u043b\u0438\u043d\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 4 \u0431\u0430\u0439\u0442\u0430 \u0438 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0437\u0430 \u043e\u0434\u043d\u0438\u043c \u0431\u0430\u0439\u0442\u043e\u043c \u0442\u0438\u043f\u0430 \u043f\u0430\u043a\u0435\u0442\u0430. \u0412\u0441\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u0438\u043c\u0435\u044e\u0442 \u0442\u0438\u043f, \u043a\u0440\u043e\u043c\u0435 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 Startup, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435\u0442 \u0431\u0430\u0439\u0442\u0430 \u0442\u0438\u043f\u0430. 00030000 &#8212; \u0432\u0435\u0440\u0441\u0438\u044f \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 3.0, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 PostgreSQL 7.4 (2003\u0433.). \u0412 18 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0432\u0435\u0440\u0441\u0438\u044f \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 3.2, \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u0441 3.0 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0441\u0435\u0440\u0432\u0435\u0440 \u043c\u043e\u0436\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u043b\u044e\u0447 \u0434\u043b\u0438\u043d\u043e\u0439 \u043e\u0442 4 \u0434\u043e 256 \u0431\u0430\u0439\u0442 (\u0432 18 \u0432\u0435\u0440\u0441\u0438\u0438 32 \u0431\u0430\u0439\u0442\u0430), \u0430 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b 3.0 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043a\u043b\u044e\u0447 \u0434\u043b\u0438\u043d\u043e\u0439 4 \u0431\u0430\u0439\u0442. \u041a\u043b\u044e\u0447 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0441\u0435\u0441\u0441\u0438\u0438. \u041a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u043a\u043b\u044e\u0447 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0430\u0442\u0430\u043a\u0438 \u043d\u0430 \u043e\u0442\u043a\u0430\u0437 \u0432 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0438, \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u044f \u0441\u0435\u0441\u0441\u0438\u0438. \u0412\u0435\u0440\u0441\u0438\u0438 3.1 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u043e, \u043d\u043e PostgreSQL \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u044e 3.1 00030001. \u0414\u043b\u044f \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u0432\u0435\u0440\u0441\u0438\u0438 3.2 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442: 00030002. \u041a\u043b\u0438\u0435\u043d\u0442 libpq \u0432\u0435\u0440\u0441\u0438\u0438 18 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u044e 3.0. PostgreSQL 18 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044b \u043e\u0442 3.0 \u0434\u043e 3.2. \u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b 2.0 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043b \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0432\u0435\u0440\u0441\u0438\u0438 PostgreSQL 14. \u041f\u0440\u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0438 \u043d\u0435\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u043e\u0439\u00a0 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 PostgreSQL \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u0430\u043a\u0435\u0442 45 = E (ErrorResponse) \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439:FATAL: unsupported frontend protocol 2.0: server supports 3.0 to 3.2 7573657200 &#8212; \u0441\u0442\u0440\u043e\u043a\u0430 \u0441\u043e \u0441\u043b\u043e\u0432\u043e\u043c user, \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u044e\u0449\u0430\u044f\u0441\u044f \u043d\u0443\u043b\u0435\u0432\u044b\u043c \u0431\u0430\u0439\u0442\u043e\u043c, \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0449\u0438\u043c \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438. \u042d\u0442\u043e \u0441\u043b\u043e\u0432\u043e \u0438 \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043f\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e.706f73746772657300 &#8212; \u0441\u043b\u043e\u0432\u043e postgres \u0434\u043b\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438. \u041c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0435 \u0438\u043c\u044f.646174616261736500 &#8212; \u0441\u043b\u043e\u0432\u043e database. \u042d\u0442\u043e \u0441\u043b\u043e\u0432\u043e \u0438 \u0438\u043c\u044f \u0431\u0430\u0437\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e.74656d706c6174653100 &#8212; \u0441\u043b\u043e\u0432\u043e template1. \u041c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u043c\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, postgres. \u0415\u0441\u043b\u0438 \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u044c, \u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u0411\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 template1 \u0435\u0441\u0442\u044c \u0432\u043e \u0432\u0441\u0435\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430\u0445 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 PostgreSQL. 6c6f675f646973636f6e6e656374696f6e73006f666600 = log_disconnections00off00 \u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u044d\u0442\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u043e\u0442\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f, \u0435\u0441\u043b\u0438 \u043e\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u043d\u0430 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0435 PostgreSQL. \u041b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c log_disconnection \u043d\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u043e. \u0423\u0442\u0438\u043b\u0438\u0442\u0430 psql \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b application_name00psql \u0438 client_encoding00UTF8, \u0438\u0445 \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c, \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0430 \u0432 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0443 \u0441\u0435\u0440\u0432\u0435\u0440\u0430. 00 &#8212; \u043f\u0430\u043a\u0435\u0442 Startup \u0437\u0430\u0432\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u0435\u0449\u0451 \u043e\u0434\u043d\u0438\u043c \u043d\u0443\u043b\u0435\u0432\u044b\u043c \u0431\u0430\u0439\u0442\u043e\u043c.\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u043d\u0443\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u043f\u043e\u0447\u0435\u043c\u0443 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0431\u0430\u0439\u0442 \u0438 \u0438\u0445 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e:tcp-check expect binary 696e5f686f745f7374616e646279006f666600\u0438\u043b\u0438tcp-check expect binary 696e5f686f745f7374616e646279006f666600\u00a0\u0421\u0435\u0432\u0435\u0440 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0434\u043d\u0438\u043c TCP-\u043f\u0430\u043a\u0435\u0442\u043e\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f:\u043f\u0430\u043a\u0435\u0442\u044b \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c PostgreSQL \u043f\u043e\u0441\u043b\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u043a\u0430\u0446\u0438\u0438520000000800000000 &#8212; \u0431\u0430\u0439\u0442 \u0442\u0438\u043f\u0430 \u043f\u0430\u043a\u0435\u0442\u0430 52 = &#8216;R&#8217; (Authentification Request). \u0417\u0430\u0442\u0435\u043c \u0438\u0434\u0451\u0442 4 \u0431\u0430\u0439\u0442\u0430 \u0441 \u0434\u043b\u0438\u043d\u043e\u0439 \u043e\u0441\u0442\u0430\u0432\u0448\u0435\u0439\u0441\u044f \u0447\u0430\u0441\u0442\u0438 \u043f\u0430\u043a\u0435\u0442\u0430 &#8212; 8 \u0431\u0430\u0439\u0442. \u0427\u0435\u0442\u044b\u0440\u0435 \u043d\u0443\u043b\u044f &#8212; \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0443\u0441\u043f\u0435\u0448\u043d\u0430 (AuthenticationOk).530000001b496e74657276616c5374796c6500706f73746772657300 &#8212; \u0437\u0430\u0442\u0435\u043c \u0441\u0440\u0430\u0437\u0443 \u0438\u0434\u0451\u0442 \u043f\u0430\u043a\u0435\u0442 53 = &#8216;S&#8217; (ParameterStatus) \u0438 \u0435\u0433\u043e \u0434\u043b\u0438\u043d\u0430, &#8212; \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 27 \u0431\u0430\u0439\u0442. \u0412 \u043f\u0430\u043a\u0435\u0442\u0435 IntervalStyle00postgres.\u0422\u0430\u043a\u0438\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 15 &#8212; \u043f\u043e \u0447\u0438\u0441\u043b\u0443 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 PQparameterStatus.4b0000000c00156c427fa84d15 &#8212; \u043f\u0430\u043a\u0435\u0442 \u0442\u0438\u043f\u0430 4b = &#8216;K&#8217; (BackendKeyData). \u0414\u043b\u044f \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u0432\u0435\u0440\u0441\u0438\u0438 3.0 \u0434\u043b\u0438\u043d\u0430 \u043f\u0430\u043a\u0435\u0442\u0430 0c = 12 \u0431\u0430\u0439\u0442. \u041f\u0430\u043a\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u043e\u043c\u0435\u0440 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 PID = 00156c42 (4 \u0431\u0430\u0439\u0442\u0430) \u0438 \u043a\u043b\u044e\u0447 Cancel Key 7fa84d15 (4 \u0431\u0430\u0439\u0442\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u0432\u0435\u0440\u0441\u0438\u0438 3.0)\u00a0 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043b\u0438\u0435\u043d\u0442, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0435\u0440\u0432\u0430\u0442\u044c \u0441\u0435\u0441\u0441\u0438\u044e. \u0414\u043b\u044f \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u0432\u0435\u0440\u0441\u0438\u0438 3.2 \u0434\u043b\u0438\u043d\u0430 \u043a\u043b\u044e\u0447\u0430 32 \u0431\u0430\u0439\u0442\u0430 \u0438 \u043c\u043e\u0436\u0435\u0442 \u0432\u0430\u0440\u044c\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442 4 \u0434\u043e 256 \u0431\u0430\u0439\u0442.5a0000000549 &#8212; \u043f\u0430\u043a\u0435\u0442 \u0442\u0438\u043f\u0430 5a = &#8216;Z&#8217; (ReadyForQuery), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u044b. \u0414\u043b\u0438\u043d\u0430 \u043f\u0430\u043a\u0435\u0442\u0430 5 \u0431\u0430\u0439\u0442. 49 = I (Idle), \u0447\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0441\u0435\u0441\u0441\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u0430\u0438\u0432\u0430\u0435\u0442 \u0438 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \u043d\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u0430. \u041f\u0430\u043a\u0435\u0442\u044b \u0442\u0438\u043f\u0430 S \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u0432 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0439 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438.\u041f\u0440\u0438\u043c\u0435\u0440, \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b HAProxy, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u0430:tcp-check expect binary 520000000800000000 \u0414\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0432 \u043e\u0442\u0432\u0435\u0442\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0431\u0430\u0439\u0442, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u043f\u0430\u043a\u0435\u0442\u0443 52 = &#8216;R&#8217; (Authentification Request) \u0441 payload \u043e\u0431 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438. \u041e\u0434\u043d\u0430\u043a\u043e, \u044d\u0442\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-497959","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/497959","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=497959"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/497959\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=497959"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=497959"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=497959"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}