25.2. ТÑанÑлÑÑÐ¸Ñ Ð¶ÑÑналов на ÑезеÑвнÑе ÑеÑвеÑÑ
- 25.2.1. ÐланиÑование
- 25.2.2. РабоÑа ÑезеÑвного ÑеÑвеÑа
- 25.2.3. ÐодгоÑовка главного ÑеÑвеÑа Ð´Ð»Ñ ÑабоÑÑ Ñ ÑезеÑвнÑми
- 25.2.4. ÐаÑÑÑойка ÑезеÑвного ÑеÑвеÑа
- 25.2.5. ÐоÑÐ¾ÐºÐ¾Ð²Ð°Ñ ÑепликаÑиÑ
- 25.2.6. СлоÑÑ ÑепликаÑии
- 25.2.7. ÐаÑÐºÐ°Ð´Ð½Ð°Ñ ÑепликаÑиÑ
- 25.2.8. Ð¡Ð¸Ð½Ñ ÑÐ¾Ð½Ð½Ð°Ñ ÑепликаÑиÑ
- 25.2.9. ÐепÑеÑÑвное аÑÑ Ð¸Ð²Ð¸Ñование на ÑезеÑвном ÑеÑвеÑе
- 25.2.2. РабоÑа ÑезеÑвного ÑеÑвеÑа
ÐоÑÑоÑÐ½Ð½Ð°Ñ Ð°ÑÑ Ð¸Ð²Ð°ÑÐ¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÐºÐ»Ð°ÑÑеÑной конÑигÑÑаÑии вÑÑокой ÑÑепени доÑÑÑпноÑÑи (HA) Ñ Ð¾Ð´Ð½Ð¸Ð¼ или неÑколÑкими ÑезеÑвнÑми ÑеÑвеÑами, ÑпоÑобнÑми замениÑÑ Ð²ÐµÐ´ÑÑий ÑеÑÐ²ÐµÑ Ð² ÑлÑÑае вÑÑ Ð¾Ð´Ð° его из ÑÑÑоÑ. ТакÑÑ ÑеализаÑÐ¸Ñ Ð¾ÑказоÑÑÑойÑивоÑÑи ÑаÑÑо назÑваÑÑ ÑÑплÑй ÑезеÑв или ÑÑанÑлÑÑÐ¸Ñ Ð¶ÑÑналов.
ÐедÑÑий и ÑезеÑвнÑй ÑеÑвеÑÑ ÑабоÑаÑÑ ÑовмеÑÑно Ð´Ð»Ñ Ð¾Ð±ÐµÑпеÑÐµÐ½Ð¸Ñ ÑÑой возможноÑÑи, пÑи ÑÑом они ÑвÑÐ·Ð°Ð½Ñ Ð¾Ð¿Ð¾ÑÑедованно. ÐедÑÑий ÑеÑÐ²ÐµÑ ÑабоÑÐ°ÐµÑ Ð² Ñежиме поÑÑоÑнной аÑÑ Ð¸Ð²Ð°Ñии изменений, в Ñо вÑÐµÐ¼Ñ ÐºÐ°Ðº каждÑй ÑезеÑвнÑй ÑеÑÐ²ÐµÑ ÑабоÑÐ°ÐµÑ Ð² Ñежиме поÑÑоÑнного пÑиÑма аÑÑ Ð¸Ð²Ð½ÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹, полÑÑÐ°Ñ ÑÐ°Ð¹Ð»Ñ WAL Ð¾Ñ Ð²ÐµÐ´ÑÑего. ÐÐ»Ñ Ð¾Ð±ÐµÑпеÑÐµÐ½Ð¸Ñ ÑÑой возможноÑÑи не ÑÑебÑеÑÑÑ Ð²Ð½Ð¾ÑиÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² ÑаблиÑÑ ÐÐ, поÑÑÐ¾Ð¼Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸ÑÑÑиÑоваÑÑ Ð´Ð°Ð½Ð½Ð¾Ðµ ÑеÑение ÑепликаÑии пÑоÑе, Ñем ÑÑд дÑÑÐ³Ð¸Ñ . Так же ÑÐ°ÐºÐ°Ñ ÐºÐ¾Ð½ÑигÑÑаÑÐ¸Ñ Ð¾ÑноÑиÑелÑно Ñлабо влиÑÐµÑ Ð½Ð° пÑоизводиÑелÑноÑÑÑ Ð²ÐµÐ´ÑÑего ÑеÑвеÑа.
ÐепоÑÑедÑÑвеннÑÑ Ð¿ÐµÑедаÑÑ Ð·Ð°Ð¿Ð¸Ñей WAL Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ ÑеÑвеÑа ÐРна дÑÑгой обÑÑно назÑваÑÑ ÑÑанÑлÑÑией жÑÑналов (или доÑÑавкой жÑÑналов). Postgres Pro ÑеализÑÐµÑ ÑÑанÑлÑÑÐ¸Ñ Ð¶ÑÑналов на ÑÑовне Ñайлов, пеÑÐµÐ´Ð°Ð²Ð°Ñ Ð·Ð°Ð¿Ð¸Ñи WAL по Ð¾Ð´Ð½Ð¾Ð¼Ñ ÑÐ°Ð¹Ð»Ñ (ÑегменÑÑ WAL) единовÑеменно. Ð¤Ð°Ð¹Ð»Ñ WAL (ÑазмеÑом 16 ÐÐ) можно легко и ÑÑÑекÑивно пеÑедаÑÑ Ð½Ð° лÑбое ÑаÑÑÑоÑние, бÑÐ´Ñ Ñо ÑоÑедний ÑеÑвеÑ, дÑÑÐ³Ð°Ñ ÑиÑÑема в меÑÑной ÑеÑи или ÑеÑÐ²ÐµÑ Ð½Ð° дÑÑгом кÑÐ°Ñ ÑвеÑа. ТÑебÑÐµÐ¼Ð°Ñ Ð¿ÑопÑÑÐºÐ½Ð°Ñ ÑпоÑобноÑÑÑ Ð¿Ñи Ñаком Ð¿Ð¾Ð´Ñ Ð¾Ð´Ðµ опÑеделÑеÑÑÑ ÑкоÑоÑÑÑÑ Ð·Ð°Ð¿Ð¸Ñи ÑÑанзакÑий на ведÑÑем ÑеÑвеÑе. ТÑанÑлÑÑÐ¸Ñ Ð¶ÑÑналов на ÑÑовне запиÑей более ÑÑагменÑаÑÐ½Ð°Ñ Ð¾Ð¿ÐµÑаÑиÑ, пÑи коÑоÑой Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ WAL пеÑедаÑÑÑÑ Ð¿Ð¾ÑледоваÑелÑно ÑеÑез ÑеÑевое Ñоединение (Ñм. ÐодÑаздел 25.2.5).
СледÑÐµÑ Ð¾ÑмеÑиÑÑ, ÑÑо ÑÑанÑлÑÑÐ¸Ñ Ð¶ÑÑналов аÑинÑ
Ñонна, Ñо еÑÑÑ Ð·Ð°Ð¿Ð¸Ñи WAL доÑÑавлÑÑÑÑÑ Ð¿Ð¾Ñле завеÑÑÐµÐ½Ð¸Ñ ÑÑанзакÑии. Ð ÑезÑлÑÑаÑе обÑазÑеÑÑÑ Ð¾ÐºÐ½Ð¾, когда возможна поÑеÑÑ Ð´Ð°Ð½Ð½ÑÑ
пÑи оÑказе ÑеÑвеÑа: бÑдÑÑ ÑÑеÑÑÐ½Ñ ÐµÑÑ Ð½Ðµ пеÑеданнÑе ÑÑанзакÑии. Ð Ð°Ð·Ð¼ÐµÑ ÑÑого окна пÑи ÑÑанÑлÑÑии Ñайлов жÑÑналов Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾Ð³ÑаниÑен паÑамеÑÑом archive_timeout, коÑоÑÑй Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑинимаÑÑ Ð·Ð½Ð°Ñение менÑÑе неÑколÑкиÑ
ÑекÑнд. Тем не менее подобнÑе заниженнÑе знаÑÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð¿Ð¾ÑÑебоваÑÑ ÑÑÑеÑÑвенного ÑвелиÑÐµÐ½Ð¸Ñ Ð¿ÑопÑÑкной ÑпоÑобноÑÑи, необÑ
одимой Ð´Ð»Ñ ÑÑанÑлÑÑии Ñайлов. ÐÑи поÑоковой ÑепликаÑии (Ñм. ÐодÑаздел 25.2.5) окно возможноÑÑи поÑеÑи даннÑÑ
гоÑаздо менÑÑе.
СкоÑоÑÑÑ Ð²Ð¾ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð¾ÑÑаÑоÑно вÑÑока, обÑÑно ÑезеÑвнÑй ÑеÑÐ²ÐµÑ ÑÑановиÑÑÑ Ð¿Ð¾Ð»Ð½Ð¾ÑÑÑÑ Ð´Ð¾ÑÑÑпнÑм ÑеÑез мгновение поÑле акÑиваÑии. Ð ÑезÑлÑÑаÑе Ñакое ÑеÑение назÑваеÑÑÑ ÑÑплÑм ÑезеÑвом, ÑÑо обеÑпеÑÐ¸Ð²Ð°ÐµÑ Ð¾ÑлиÑнÑÑ Ð¾ÑказоÑÑÑойÑивоÑÑÑ. ÐоÑÑÑановление ÑеÑвеÑа из аÑÑ Ð¸Ð²Ð½Ð¾Ð¹ копии Ð±Ð°Ð·Ñ Ð¸ пÑименение изменений обÑÑно пÑоиÑÑ Ð¾Ð´Ð¸Ñ ÑÑÑеÑÑвенно долÑÑе. ÐоÑÑÐ¾Ð¼Ñ Ñакие дейÑÑÐ²Ð¸Ñ Ð¾Ð±ÑÑно ÑÑебÑÑÑÑÑ Ð¿Ñи воÑÑÑановлении поÑле аваÑии, не Ð´Ð»Ñ Ð¾ÑказоÑÑÑойÑивоÑÑи. Так же ÑезеÑвнÑй ÑеÑÐ²ÐµÑ Ð¼Ð¾Ð¶ÐµÑ Ð¾Ð±ÑабаÑÑваÑÑ ÑиÑаÑÑие запÑоÑÑ. Ð ÑÑом ÑлÑÑае он назÑваеÑÑÑ ÑеÑвеÑом гоÑÑÑего ÑезеÑва. См. Раздел 25.4 Ð´Ð»Ñ Ð¿Ð¾Ð´Ñобной инÑоÑмаÑии.
25.2.1. ÐланиÑование
ÐбÑÑно ÑазÑмно подбиÑаÑÑ Ð²ÐµÐ´ÑÑий и ÑезеÑвнÑй ÑеÑвеÑÑ Ñак, ÑÑÐ¾Ð±Ñ Ð¾Ð½Ð¸ бÑли макÑималÑно Ð¿Ð¾Ñ Ð¾Ð¶Ð¸, как минимÑм Ñ ÑоÑки зÑÐµÐ½Ð¸Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ . Тогда в ÑаÑÑноÑÑи, пÑÑи, ÑвÑзаннÑе Ñ ÑаблиÑнÑми пÑоÑÑÑанÑÑвами, могÑÑ Ð¿ÐµÑедаваÑÑÑÑ Ð±ÐµÐ· изменений. Таким обÑазом, как на ведÑÑем, Ñак и на ÑезеÑвнÑÑ ÑеÑвеÑÐ°Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñе пÑÑи монÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð»Ñ ÑаблиÑнÑÑ Ð¿ÑоÑÑÑанÑÑв пÑи иÑполÑзовании ÑÑой возможноÑÑи ÐÐ. УÑиÑÑвайÑе, ÑÑо еÑли CREATE TABLESPACE вÑполнена на ведÑÑем ÑеÑвеÑе, Ð½Ð¾Ð²Ð°Ñ ÑоÑка монÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð»Ñ ÑÑой ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ñже должна ÑÑÑеÑÑвоваÑÑ Ð½Ð° ÑезеÑвнÑÑ ÑеÑвеÑÐ°Ñ Ð´Ð¾ ÐµÑ Ð²ÑполнениÑ. ÐппаÑаÑÐ½Ð°Ñ ÑаÑÑÑ Ð½Ðµ должна бÑÑÑ Ð² ÑоÑноÑÑи одинаковой, но опÑÑ Ð¿Ð¾ÐºÐ°Ð·ÑваеÑ, ÑÑо ÑопÑовождаÑÑ Ð¸Ð´ÐµÐ½ÑиÑнÑе ÑиÑÑÐµÐ¼Ñ Ð»ÐµÐ³Ñе, Ñем две ÑазлиÑнÑе на пÑоÑÑжении жизненного Ñикла пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸ ÑиÑÑемÑ. РлÑбом ÑлÑÑае аÑÑ Ð¸ÑекÑÑÑа обоÑÑÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° бÑÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ð¾Ð¹ â напÑимеÑ, ÑÑанÑлÑÑÐ¸Ñ Ð¶ÑÑналов Ñ 32-биÑной на 64-биÑнÑÑ ÑиÑÑÐµÐ¼Ñ Ð½Ðµ бÑÐ´ÐµÑ ÑабоÑаÑÑ.
РобÑем ÑлÑÑае ÑÑанÑлÑÑÐ¸Ñ Ð¶ÑÑналов Ð¼ÐµÐ¶Ð´Ñ ÑеÑвеÑами Ñ ÑазлиÑнÑми оÑновнÑми веÑÑиÑми Postgres Pro невозможна. ÐолиÑика главной гÑÑÐ¿Ð¿Ñ ÑазÑабоÑки Postgres Pro ÑоÑÑÐ¾Ð¸Ñ Ð² Ñом, ÑÑÐ¾Ð±Ñ Ð½Ðµ вноÑиÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² диÑковÑе ÑоÑмаÑÑ Ð¿Ñи обновлениÑÑ ÐºÐ¾ÑÑекÑиÑÑÑÑей веÑÑии, Ñаким обÑазом, ведÑÑий и ÑезеÑвнÑй ÑеÑвеÑÑ, имеÑÑие ÑазнÑе коÑÑекÑиÑÑÑÑие веÑÑии, могÑÑ ÑабоÑаÑÑ ÑÑпеÑно. Тем не менее ÑоÑмалÑно ÑÐ°ÐºÐ°Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð½Ðµ поддеÑживаеÑÑÑ, поÑÑÐ¾Ð¼Ñ ÑекомендÑеÑÑÑ Ð¿Ð¾Ð´Ð´ÐµÑживаÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²ÑÑ Ð²ÐµÑÑÐ¸Ñ Ð²ÐµÐ´ÑÑего и ÑезеÑвнÑÑ ÑеÑвеÑов, наÑколÑко ÑÑо возможно. ÐÑи обновлении коÑÑекÑиÑÑÑÑей веÑÑии безопаÑнее бÑÐ´ÐµÑ Ð² пеÑвÑÑ Ð¾ÑеÑÐµÐ´Ñ Ð¾Ð±Ð½Ð¾Ð²Ð¸ÑÑ ÑезеÑвнÑе ÑеÑвеÑÑ â Ð½Ð¾Ð²Ð°Ñ ÐºÐ¾ÑÑекÑиÑÑÑÑÐ°Ñ Ð²ÐµÑÑÐ¸Ñ Ñ Ð±Ð¾Ð»ÑÑей веÑоÑÑноÑÑÑÑ Ð¿ÑоÑиÑÐ°ÐµÑ Ñайл WAL пÑедÑдÑÑей коÑÑекÑиÑÑÑÑей веÑÑии, Ñем наобоÑоÑ.
25.2.2. РабоÑа ÑезеÑвного ÑеÑвеÑа
СеÑÐ²ÐµÑ Ð¿ÐµÑеÑ
Ð¾Ð´Ð¸Ñ Ð² Ñежим ожиданиÑ, еÑли в каÑалоге даннÑÑ
пÑи запÑÑке ÑеÑвеÑа еÑÑÑ Ñайл standby.signal.
СеÑвеÑ, ÑабоÑаÑÑий в Ñежиме ÑезеÑвного, поÑледоваÑелÑно пÑименÑÐµÑ ÑÐ°Ð¹Ð»Ñ WAL, полÑÑеннÑе Ð¾Ñ Ð³Ð»Ð°Ð²Ð½Ð¾Ð³Ð¾. РезеÑвнÑй ÑеÑÐ²ÐµÑ Ð¼Ð¾Ð¶ÐµÑ ÑиÑаÑÑ ÑÐ°Ð¹Ð»Ñ WAL из аÑÑ
ива WAL (Ñм. restore_command) или напÑÑмÑÑ Ñ Ð³Ð»Ð°Ð²Ð½Ð¾Ð³Ð¾ ÑеÑвеÑа по ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ TCP (поÑÐ¾ÐºÐ¾Ð²Ð°Ñ ÑепликаÑиÑ). РезеÑвнÑй ÑеÑÐ²ÐµÑ Ñакже бÑÐ´ÐµÑ Ð¿ÑÑаÑÑÑÑ Ð²Ð¾ÑÑÑановиÑÑ Ð»Ñбой Ñайл WAL, найденнÑй в клаÑÑеÑе ÑезеÑвного в каÑалоге pg_wal. ÐÑо обÑÑно пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ð¿Ð¾Ñле пеÑезапÑÑка ÑеÑвеÑа, когда он пÑименÑÐµÑ Ð·Ð°Ð½Ð¾Ð²Ð¾ ÑÐ°Ð¹Ð»Ñ WAL, полÑÑеннÑе Ð¾Ñ Ð³Ð»Ð°Ð²Ð½Ð¾Ð³Ð¾ ÑеÑвеÑа пеÑед пеÑезапÑÑком. Ðо можно и вÑÑÑнÑÑ ÑкопиÑоваÑÑ ÑÐ°Ð¹Ð»Ñ Ð² каÑалог pg_wal, ÑÑÐ¾Ð±Ñ Ð¿ÑимениÑÑ Ð¸Ñ
в лÑбой Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð²Ñемени.
Ð Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð·Ð°Ð¿ÑÑка ÑезеÑвнÑй ÑеÑÐ²ÐµÑ Ð½Ð°ÑÐ¸Ð½Ð°ÐµÑ Ð²Ð¾ÑÑÑанавливаÑÑ Ð²Ñе доÑÑÑпнÑе ÑÐ°Ð¹Ð»Ñ WAL, ÑазмеÑÑннÑе в аÑÑ
ивном каÑалоге, Ñказанном в команде restore_command. Ðо доÑÑижении конÑа доÑÑÑпнÑÑ
Ñайлов WAL или пÑи Ñбое ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ restore_command ÑеÑÐ²ÐµÑ Ð¿ÑÑаеÑÑÑ Ð²Ð¾ÑÑÑановиÑÑ Ð²Ñе ÑÐ°Ð¹Ð»Ñ WAL, доÑÑÑпнÑе в каÑалоге pg_wal. ÐÑли ÑÑо не ÑдаÑÑÑÑ Ð¸ поÑÐ¾ÐºÐ¾Ð²Ð°Ñ ÑепликаÑÐ¸Ñ Ð½Ð°ÑÑÑоена, ÑезеÑвнÑй ÑеÑÐ²ÐµÑ Ð¿ÑÑаеÑÑÑ Ð¿ÑиÑоединиÑÑÑÑ Ðº ведÑÑÐµÐ¼Ñ Ð¸ наÑаÑÑ Ð·Ð°ÐºÐ°ÑиваÑÑ Ð¿Ð¾Ñок WAL Ñ Ð¿Ð¾Ñледней подÑвеÑждÑнной запиÑи, найденной в аÑÑ
иве или pg_wal. ÐÑли ÑÑо дейÑÑвие законÑилоÑÑ Ð½ÐµÑдаÑей, или поÑÐ¾ÐºÐ¾Ð²Ð°Ñ ÑепликаÑÐ¸Ñ Ð½Ðµ наÑÑÑоена, или Ñоединение позднее ÑазоÑвалоÑÑ, ÑезеÑвнÑй ÑеÑÐ²ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑаеÑÑÑ Ðº ÑÐ°Ð³Ñ 1 и пÑÑаеÑÑÑ Ð²Ð¾ÑÑÑановиÑÑ ÑÐ°Ð¹Ð»Ñ Ð¸Ð· аÑÑ
ива вновÑ. Цикл обÑаÑÐµÐ½Ð¸Ñ Ð·Ð° Ñайлами WAL к аÑÑ
ивÑ, pg_wal, и ÑеÑез поÑоковÑÑ ÑепликаÑÐ¸Ñ Ð¿ÑодолжаеÑÑÑ Ð´Ð¾ оÑÑановки ÑеÑвеÑа или его повÑÑÐµÐ½Ð¸Ñ Ð´Ð¾ ведÑÑего.
Режим ÑезеÑва завеÑÑаеÑÑÑ Ð¸ ÑеÑÐ²ÐµÑ Ð¿ÐµÑеклÑÑаеÑÑÑ Ð² обÑÑнÑй ÑабоÑий Ñежим пÑи полÑÑении ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ pg_ctl promote, в ÑезÑлÑÑаÑе вÑзова pg_promote() или пÑи обнаÑÑжении Ñайла-ÑÑиггеÑа (promote_trigger_file). ÐеÑед пеÑеклÑÑением ÑеÑÐ²ÐµÑ Ð²Ð¾ÑÑÑÐ°Ð½Ð¾Ð²Ð¸Ñ Ð²Ñе ÑÐ°Ð¹Ð»Ñ WAL, непоÑÑедÑÑвенно доÑÑÑпнÑе из аÑÑ
ива или pg_wal, но пÑÑаÑÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑиÑÑÑÑ Ðº Ð³Ð»Ð°Ð²Ð½Ð¾Ð¼Ñ ÑеÑвеÑÑ Ð¾Ð½ болÑÑе не бÑдеÑ.
25.2.3. ÐодгоÑовка главного ÑеÑвеÑа Ð´Ð»Ñ ÑабоÑÑ Ñ ÑезеÑвнÑми
ÐаÑÑÑойка поÑÑоÑнного аÑÑ Ð¸Ð²Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð½Ð° ведÑÑем ÑеÑвеÑе в аÑÑ Ð¸Ð²Ð½Ñй каÑалог, доÑÑÑпнÑй Ñ ÑезеÑвного, опиÑана в Разделе 24.3. РаÑположение аÑÑ Ð¸Ð²Ð° должно бÑÑÑ Ð´Ð¾ÑÑÑпно Ñ ÑезеÑвного ÑеÑвеÑа даже пÑи оÑклÑÑении главного, Ñо еÑÑÑ ÐµÐ³Ð¾ ÑледÑÐµÑ ÑазмеÑÑиÑÑ Ð½Ð° ÑезеÑвном или дÑÑгом довеÑенном, но не на главном ÑеÑвеÑе.
ÐÑи иÑполÑзовании поÑоковой ÑепликаÑии ÑледÑÐµÑ Ð½Ð°ÑÑÑоиÑÑ Ñежим аÑÑенÑиÑикаÑии на ведÑÑем ÑеÑвеÑе, ÑÑÐ¾Ð±Ñ ÑазÑеÑиÑÑ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ñ ÑезеÑвнÑÑ
. ÐÐ»Ñ ÑÑого ÑоздаÑÑ ÑÐ¾Ð»Ñ Ð¸ обеÑпеÑиÑÑ Ð¿Ð¾Ð´Ñ
одÑÑÑÑ Ð·Ð°Ð¿Ð¸ÑÑ Ð² Ñайле pg_hba.conf в Ñазделе доÑÑÑпа к ÐÐ replication. Так же ÑледÑÐµÑ ÑбедиÑÑÑÑ, ÑÑо Ð´Ð»Ñ Ð¿Ð°ÑамеÑÑа max_wal_senders задаÑÑÑÑ Ð´Ð¾ÑÑаÑоÑно болÑÑое знаÑение в конÑигÑÑаÑионном Ñайле ведÑÑего ÑеÑвеÑа. ÐÑи иÑполÑзовании ÑлоÑов Ð´Ð»Ñ ÑепликаÑии Ñакже доÑÑаÑоÑно болÑÑое знаÑение нÑжно задаÑÑ Ð´Ð»Ñ max_replication_slots.
Создание базовой ÑезеÑвной копии, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾Ð¹ Ð´Ð»Ñ Ð·Ð°Ð¿ÑÑка ÑезеÑвного ÑеÑвеÑа, опиÑано в ÐодÑазделе 24.3.2.
25.2.4. ÐаÑÑÑойка ÑезеÑвного ÑеÑвеÑа
ÐÐ»Ñ Ð·Ð°Ð¿ÑÑка ÑезеÑвного ÑеÑвеÑа нÑжно воÑÑÑановиÑÑ ÑезеÑвнÑÑ ÐºÐ¾Ð¿Ð¸Ñ, ÑнÑÑÑÑ Ñ Ð²ÐµÐ´ÑÑего (Ñм. ÐодÑаздел 24.3.4). ÐаÑем нÑжно ÑоздаÑÑ Ñайл standby.signal в каÑалоге даннÑÑ
клаÑÑеÑа ÑезеÑвного ÑеÑвеÑа. ÐадайÑе в restore_command обÑÑнÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ ÐºÐ¾Ð¿Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ñайлов из аÑÑ
ива WAL. ÐÑли планиÑÑеÑÑÑ Ð½ÐµÑколÑко ÑезеÑвнÑÑ
ÑеÑвеÑов в ÑелÑÑ
оÑказоÑÑÑойÑивоÑÑи, знаÑением паÑамеÑÑа recovery_target_timeline должно бÑÑÑ latest (знаÑение по ÑмолÑаниÑ), ÑÑÐ¾Ð±Ñ ÑезеÑвнÑй ÑеÑÐ²ÐµÑ Ð¿ÐµÑеÑ
одил на новÑÑ Ð»Ð¸Ð½Ð¸Ñ Ð²Ñемени, обÑазÑемÑÑ Ð¿Ñи обÑабоÑке оÑказа и пеÑеклÑÑении на дÑÑгой ÑеÑвеÑ.
ÐÑимеÑание
Ðоманда restore_command должна немедленно завеÑÑиÑÑÑÑ Ð¿Ñи оÑÑÑÑÑÑвии Ñайла; ÑеÑÐ²ÐµÑ Ð¿Ð¾Ð²ÑоÑÐ¸Ñ ÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð¿Ñи Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑи.
ÐÑи Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑи поÑоковой ÑепликаÑии задайÑе в primary_conninfo паÑамеÑÑÑ ÑÑÑоки ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð´Ð»Ñ libpq, вклÑÑÐ°Ñ Ð¸Ð¼Ñ (или IP-адÑеÑ) ÑеÑвеÑа и вÑÑ, ÑÑо ÑÑебÑеÑÑÑ Ð´Ð»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑÐµÐ½Ð¸Ñ Ðº ведÑÑÐµÐ¼Ñ ÑеÑвеÑÑ. ÐÑли ведÑÑий ÑÑебÑÐµÑ Ð¿Ð°ÑÐ¾Ð»Ñ Ð´Ð»Ñ Ð°ÑÑенÑиÑикаÑии, паÑÐ¾Ð»Ñ Ñакже должен бÑÑÑ Ñказан в primary_conninfo.
ÐÑли ÑезеÑвнÑй ÑеÑÐ²ÐµÑ Ð½Ð°ÑÑÑаиваеÑÑÑ Ð² ÑелÑÑ Ð¾ÑказоÑÑÑойÑивоÑÑи, на нÑм ÑледÑÐµÑ Ð½Ð°ÑÑÑоиÑÑ Ð°ÑÑ Ð¸Ð²Ð°ÑÐ¸Ñ WAL, ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¸ аÑÑенÑиÑикаÑиÑ, как на ведÑÑем ÑеÑвеÑе, поÑÐ¾Ð¼Ñ ÑÑо ÑезеÑвнÑй ÑеÑÐ²ÐµÑ ÑÑÐ°Ð½ÐµÑ Ð²ÐµÐ´ÑÑим поÑле оÑÑабоÑки оÑказа.
ÐÑи иÑполÑзовании аÑÑ
ива WAL его ÑÐ°Ð·Ð¼ÐµÑ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑменÑÑен Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ, задаваемой в archive_cleanup_command, еÑли она бÑÐ´ÐµÑ ÑдалÑÑÑ ÑайлÑ, ÑÑавÑие ненÑжнÑми Ð´Ð»Ñ ÑезеÑвного ÑеÑвеÑа. УÑилиÑа pg_archivecleanup ÑазÑабоÑана ÑпеÑиалÑно Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² archive_cleanup_command пÑи ÑипиÑной конÑигÑÑаÑии Ñ Ð¾Ð´Ð½Ð¸Ð¼ ÑезеÑвнÑм ÑеÑвеÑом (Ñм. pg_archivecleanup). ÐамеÑÑÑе, ÑÑо еÑли аÑÑ
ив иÑполÑзÑеÑÑÑ Ð² ÑелÑÑ
ÑезеÑвиÑованиÑ, необÑ
одимо ÑоÑ
ÑанÑÑÑ Ð²Ñе ÑайлÑ, ÑÑебÑÑÑиеÑÑ Ð´Ð»Ñ Ð²Ð¾ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÐºÐ°Ðº минимÑм Ñ Ð¿Ð¾Ñледней базовой ÑезеÑвной копии, даже еÑли они не нÑÐ¶Ð½Ñ Ð´Ð»Ñ ÑезеÑвного ÑеÑвеÑа.
ÐÑоÑÑой пÑÐ¸Ð¼ÐµÑ ÐºÐ¾Ð½ÑигÑÑаÑии:
primary_conninfo = 'host=192.168.1.50 port=5432 user=foo password=foopass options=''-c wal_sender_timeout=5000''' restore_command = 'cp /path/to/archive/%f %p' archive_cleanup_command = 'pg_archivecleanup /path/to/archive %r'
Ðожно поддеÑживаÑÑ Ð»Ñбое колиÑеÑÑво ÑезеÑвнÑÑ
ÑеÑвеÑов, но пÑи пÑименении поÑоковой ÑепликаÑии необÑ
одимо ÑбедиÑÑÑÑ, ÑÑо знаÑение max_wal_senders на ведÑÑем доÑÑаÑоÑно болÑÑое, ÑÑÐ¾Ð±Ñ Ð²Ñе они могли подклÑÑиÑÑÑÑ Ð¾Ð´Ð½Ð¾Ð²Ñеменно.
25.2.5. ÐоÑÐ¾ÐºÐ¾Ð²Ð°Ñ ÑепликаÑиÑ
ÐÑи поÑоковой ÑепликаÑии ÑезеÑвнÑй ÑеÑÐ²ÐµÑ Ð¼Ð¾Ð¶ÐµÑ ÑабоÑаÑÑ Ñ Ð¼ÐµÐ½ÑÑей задеÑжкой, Ñем пÑи ÑÑанÑлÑÑии Ñайлов. РезеÑвнÑй ÑеÑÐ²ÐµÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑаеÑÑÑ Ðº ведÑÑемÑ, коÑоÑÑй пеÑедаÑÑ Ð¿Ð¾Ñок запиÑей WAL ÑезеÑÐ²Ð½Ð¾Ð¼Ñ Ð² Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð¸Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ, не дожидаÑÑÑ Ð¾ÐºÐ¾Ð½ÑÐ°Ð½Ð¸Ñ Ð·Ð°Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñайла WAL.
ÐоÑÐ¾ÐºÐ¾Ð²Ð°Ñ ÑепликаÑÐ¸Ñ Ð°ÑинÑ
Ñонна по ÑмолÑÐ°Ð½Ð¸Ñ (Ñм. ÐодÑаздел 25.2.8), Ñо еÑÑÑ Ð¸Ð¼ÐµÐµÑÑÑ Ð½ÐµÐ±Ð¾Ð»ÑÑÐ°Ñ Ð·Ð°Ð´ÐµÑжка Ð¼ÐµÐ¶Ð´Ñ Ð¿Ð¾Ð´ÑвеÑждением ÑÑанзакÑии на ведÑÑем ÑеÑвеÑе и поÑвлением ÑÑиÑ
изменений на ÑезеÑвном. Тем не менее ÑÑа задеÑжка гоÑаздо менÑÑе, Ñем пÑи ÑÑанÑлÑÑии Ñайлов жÑÑналов, обÑÑно в пÑеделаÑ
одной ÑекÑндÑ, еÑли ÑезеÑвнÑй ÑеÑÐ²ÐµÑ Ð´Ð¾ÑÑаÑоÑно моÑнÑй и ÑпÑавлÑеÑÑÑ Ñ Ð½Ð°Ð³ÑÑзкой. ÐÑи поÑоковой ÑепликаÑии наÑÑÑаиваÑÑ archive_timeout Ð´Ð»Ñ ÑменÑÑÐµÐ½Ð¸Ñ Ð¾ÐºÐ½Ð° поÑенÑиалÑной поÑеÑи даннÑÑ
не ÑÑебÑеÑÑÑ.
ÐÑи поÑоковой ÑепликаÑии без поÑÑоÑнной аÑÑ
иваÑии на ÑÑовне Ñайлов, ÑеÑÐ²ÐµÑ Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð·Ð±Ð°Ð²Ð¸ÑÑÑÑ Ð¾Ñ ÑÑаÑÑÑ
ÑегменÑов WAL до Ñого, как ÑезеÑвнÑй полÑÑÐ¸Ñ Ð¸Ñ
. Ð ÑÑом ÑлÑÑае ÑезеÑвнÑй ÑеÑÐ²ÐµÑ Ð¿Ð¾ÑÑебÑÐµÑ Ð¿Ð¾Ð²ÑоÑной иниÑиализаÑии из новой базовой ÑезеÑвной копии. ÐÑого можно избежаÑÑ, ÑÑÑановив Ð´Ð»Ñ wal_keep_size доÑÑаÑоÑно болÑÑое знаÑение, пÑи коÑоÑом ÑегменÑÑ WAL бÑдÑÑ Ð·Ð°ÑиÑÐµÐ½Ñ Ð¾Ñ Ñанней оÑиÑÑки, либо наÑÑÑоив ÑÐ»Ð¾Ñ ÑепликаÑии Ð´Ð»Ñ ÑезеÑвного ÑеÑвеÑа. ÐÑли Ñ ÑезеÑвного ÑеÑвеÑа доÑÑÑпен аÑÑ
ив WAL, ÑÑого не ÑÑебÑеÑÑÑ, Ñак как ÑезеÑвнÑй Ð¼Ð¾Ð¶ÐµÑ Ð²Ñегда обÑаÑиÑÑÑÑ Ðº аÑÑ
Ð¸Ð²Ñ Ð´Ð»Ñ Ð²Ð¾ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿ÑопÑÑеннÑÑ
ÑегменÑов.
ЧÑÐ¾Ð±Ñ Ð½Ð°ÑÑÑоиÑÑ Ð¿Ð¾ÑоковÑÑ ÑепликаÑиÑ, ÑнаÑала наÑÑÑойÑе ÑезеÑвнÑй ÑеÑÐ²ÐµÑ Ð² Ñежиме пеÑедаÑи жÑÑналов в виде Ñайлов, как опиÑано в Разделе 25.2. ÐаÑем пеÑеклÑÑиÑе его в Ñежим поÑоковой ÑепликаÑии, ÑÑÑановив в primary_conninfo ÑÑÑÐ¾ÐºÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ, ÑказÑваÑÑÑÑ Ð½Ð° ведÑÑий. ÐаÑÑÑойÑе listen_addresses и паÑамеÑÑÑ Ð°ÑÑенÑиÑикаÑии (Ñм. pg_hba.conf) на ведÑÑем ÑеÑвеÑе Ñаким обÑазом, ÑÑÐ¾Ð±Ñ ÑезеÑвнÑй Ñмог подклÑÑиÑÑÑÑ Ðº пÑевдобазе replication ведÑÑего (Ñм. ÐодÑаздел 25.2.5.1).
Ð ÑиÑÑÐµÐ¼Ð°Ñ , поддеÑживаÑÑÐ¸Ñ Ð¿Ð°ÑамеÑÑ ÑокеÑа keepalive, Ð¿Ð¾Ð´Ñ Ð¾Ð´ÑÑие знаÑÐµÐ½Ð¸Ñ tcp_keepalives_idle, tcp_keepalives_interval и tcp_keepalives_count помогÑÑ Ð²ÐµÐ´ÑÑÐµÐ¼Ñ Ð²Ð¾Ð²ÑÐµÐ¼Ñ Ð·Ð°Ð¼ÐµÑиÑÑ ÑазÑÑв ÑоединениÑ.
УÑÑановиÑе макÑималÑное колиÑеÑÑво одновÑеменнÑÑ Ñоединений Ñ ÑезеÑвнÑÑ ÑеÑвеÑов (Ñм. опиÑание max_wal_senders).
ÐÑи запÑÑке ÑезеÑвного ÑеÑвеÑа Ñ Ð¿ÑавилÑно ÑÑÑановленнÑм primary_conninfo ÑезеÑвнÑй подклÑÑиÑÑÑ Ðº ведÑÑÐµÐ¼Ñ Ð¿Ð¾Ñле воÑпÑÐ¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð²ÑеÑ
Ñайлов WAL, доÑÑÑпнÑÑ
из аÑÑ
ива. ÐÑи ÑÑпеÑном ÑÑÑановлении ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ ÑвидеÑÑ walreceiver на ÑезеÑвном ÑеÑвеÑе и ÑооÑвеÑÑÑвÑÑÑий пÑоÑеÑÑ walsender на ведÑÑем.
25.2.5.1. ÐÑÑенÑиÑикаÑиÑ
ÐÑаво иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑепликаÑии оÑÐµÐ½Ñ Ð²Ð°Ð¶Ð½Ð¾ огÑаниÑиÑÑ Ñак, ÑÑÐ¾Ð±Ñ ÑолÑко довеÑеннÑе полÑзоваÑели могли ÑиÑаÑÑ Ð¿Ð¾Ñок WAL, Ñак как из него можно извлеÑÑ ÐºÐ¾Ð½ÑиденÑиалÑнÑÑ Ð¸Ð½ÑоÑмаÑиÑ. РезеÑвнÑй ÑеÑÐ²ÐµÑ Ð´Ð¾Ð»Ð¶ÐµÐ½ аÑÑенÑиÑиÑиÑоваÑÑÑÑ Ð½Ð° главном Ð¾Ñ Ð¸Ð¼ÐµÐ½Ð¸ полÑзоваÑÐµÐ»Ñ Ñ Ð¿Ñавом REPLICATION или Ð¾Ñ Ð¸Ð¼ÐµÐ½Ð¸ ÑÑпеÑполÑзоваÑелÑ. ÐаÑÑоÑÑелÑно ÑекомендÑеÑÑÑ ÑоздаваÑÑ Ð²Ñделенного полÑзоваÑÐµÐ»Ñ Ñ Ð¿Ñавами REPLICATION и LOGIN ÑпеÑиалÑно Ð´Ð»Ñ ÑепликаÑии. ХоÑÑ Ð¿Ñаво REPLICATION даÑÑ Ð¾ÑÐµÐ½Ñ ÑиÑокие полномоÑиÑ, оно не позволÑÐµÑ Ð¼Ð¾Ð´Ð¸ÑиÑиÑоваÑÑ Ð´Ð°Ð½Ð½Ñе в ведÑÑей ÑиÑÑеме, Ñогда как Ñ Ð¿Ñавом SUPERUSER ÑÑо можно делаÑÑ.
СпиÑок аÑÑенÑиÑикаÑии клиенÑов Ð´Ð»Ñ ÑепликаÑии ÑодеÑжиÑÑÑ Ð² pg_hba.conf в запиÑÑÑ
Ñ ÑÑÑановленнÑм знаÑением replication в поле database. ÐапÑимеÑ, еÑли ÑезеÑвнÑй ÑеÑÐ²ÐµÑ Ð·Ð°Ð¿ÑÑен на компÑÑÑеÑе Ñ IP-адÑеÑом 192.168.1.100 и ÑÑÑÑÐ½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑ Ð´Ð»Ñ ÑепликаÑии foo, админиÑÑÑаÑÐ¾Ñ Ð¼Ð¾Ð¶ÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ ÑледÑÑÑÑÑ ÑÑÑÐ¾ÐºÑ Ð² Ñайл pg_hba.conf ведÑÑего:
# РазÑеÑиÑÑ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ "foo" Ñ ÐºÐ¾Ð¼Ð¿ÑÑÑеÑа 192.168.1.100 подклÑÑаÑÑÑÑ Ðº ÑÑÐ¾Ð¼Ñ # ÑеÑвеÑÑ Ð² каÑеÑÑве паÑÑнÑÑа ÑепликаÑии, еÑли бÑл пеÑедан пÑавилÑнÑй паÑолÑ. # # TYPE DATABASE USER ADDRESS METHOD host replication foo 192.168.1.100/32 md5
ÐÐ¼Ñ ÐºÐ¾Ð¼Ð¿ÑÑÑеÑа и Ð½Ð¾Ð¼ÐµÑ Ð¿Ð¾ÑÑа Ð´Ð»Ñ Ð²ÐµÐ´ÑÑего, Ð¸Ð¼Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑаÑÑегоÑÑ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð¸ паÑÐ¾Ð»Ñ ÑказÑваÑÑÑÑ Ð² primary_conninfo. ÐаÑÐ¾Ð»Ñ Ñакже Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð·Ð°Ð´Ð°Ð½ в Ñайле ~/.pgpass на ÑезеÑвном ÑеÑвеÑе (в поле database нÑжно ÑказаÑÑ replication). ÐапÑимеÑ, еÑли ведÑÑий пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑÐµÐ½Ð¸Ñ Ð¿Ð¾ IP-адÑеÑÑ 192.168.1.50, ÑеÑез поÑÑ 5432, полÑзоваÑÐµÐ»Ñ Ð´Ð»Ñ ÑепликаÑии foo Ñ Ð¿Ð°Ñолем foopass, админиÑÑÑаÑÐ¾Ñ Ð¼Ð¾Ð¶ÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ ÑледÑÑÑÑÑ ÑÑÑÐ¾ÐºÑ Ð² Ñайл postgresql.conf на ÑезеÑвном ÑеÑвеÑе:
# РезеÑвнÑй ÑеÑÐ²ÐµÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑаеÑÑÑ Ðº ведÑÑемÑ, ÑабоÑаÑÑÐµÐ¼Ñ Ð½Ð° компÑÑÑеÑе 192.168.1.50 # (поÑÑ 5432), Ð¾Ñ Ð¸Ð¼ÐµÐ½Ð¸ полÑзоваÑÐµÐ»Ñ "foo" Ñ Ð¿Ð°Ñолем "foopass". primary_conninfo = 'host=192.168.1.50 port=5432 user=foo password=foopass'
25.2.5.2. ÐониÑоÑинг
ÐажнÑм индикаÑоÑом ÑÑабилÑноÑÑи ÑабоÑÑ Ð¿Ð¾Ñоковой ÑепликаÑии ÑвлÑеÑÑÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво запиÑей WAL, ÑозданнÑÑ
на ведÑÑем, но еÑÑ Ð½Ðµ пÑименÑннÑÑ
на ÑезеÑвном ÑеÑвеÑе. ÐадеÑÐ¶ÐºÑ Ð¼Ð¾Ð¶Ð½Ð¾ подÑÑиÑаÑÑ, ÑÑавнив ÑекÑÑÑÑ Ð¿Ð¾Ð·Ð¸Ñии запиÑи WAL на ведÑÑем Ñ Ð¿Ð¾Ñледней позиÑией WAL, полÑÑенной на ÑезеÑвном ÑеÑвеÑе. ÐÑи позиÑии можно ÑзнаÑÑ, воÑполÑзовавÑиÑÑ ÑÑнкÑиÑми pg_current_wal_lsn на ведÑÑем и pg_last_wal_receive_lsn на ÑезеÑвном, ÑооÑвеÑÑÑвенно (за подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº ТаблиÑе 9.93 и ТаблиÑе 9.94). ÐоÑледнÑÑ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð½Ð°Ñ Ð¿Ð¾Ð·Ð¸ÑÐ¸Ñ WAL на ÑезеÑвном ÑеÑвеÑе Ñакже вÑводиÑÑÑ Ð² ÑоÑÑоÑнии пÑоÑеÑÑа-пÑиÑмника WAL, коÑоÑое показÑÐ²Ð°ÐµÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° ps (подÑобнее об ÑÑом в Разделе 26.1).
СпиÑок пÑоÑеÑÑов-пеÑедаÑÑиков WAL можно полÑÑиÑÑ ÑеÑез пÑедÑÑавление pg_stat_replication. ÐолÑÑÐ°Ñ ÑазниÑа Ð¼ÐµÐ¶Ð´Ñ pg_current_wal_lsn и полем sent_lsn ÑÑого пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ ÑказÑваÑÑ Ð½Ð° Ñо, ÑÑо главнÑй ÑеÑÐ²ÐµÑ ÑабоÑÐ°ÐµÑ Ñ Ð±Ð¾Ð»ÑÑой нагÑÑзкой, Ñогда как ÑазниÑа Ð¼ÐµÐ¶Ð´Ñ sent_lsn и pg_last_wal_receive_lsn на ÑезеÑвном Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ñизнаком задеÑжек в ÑеÑи или болÑÑой нагÑÑзки ÑезеÑвного ÑеÑвеÑа.
Ðа ÑеÑвеÑе гоÑÑÑего ÑезеÑва ÑоÑÑоÑние пÑоÑеÑÑа-пÑиÑмника WAL можно полÑÑиÑÑ ÑеÑез пÑедÑÑавление pg_stat_wal_receiver. ÐолÑÑÐ°Ñ ÑазниÑа Ð¼ÐµÐ¶Ð´Ñ pg_last_wal_replay_lsn и полем flushed_lsn ÑвидеÑелÑÑÑвÑÐµÑ Ð¾ Ñом, ÑÑо WAL поÑÑÑÐ¿Ð°ÐµÑ Ð±ÑÑÑÑее, Ñем ÑдаÑÑÑÑ ÐµÐ³Ð¾ воÑпÑоизвеÑÑи.
25.2.6. СлоÑÑ ÑепликаÑии
СлоÑÑ ÑепликаÑии авÑомаÑиÑеÑки обеÑпеÑиваÑÑ Ð¼ÐµÑ Ð°Ð½Ð¸Ð·Ð¼ ÑÐ¾Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ ÑегменÑов WAL, пока они не бÑдÑÑ Ð¿Ð¾Ð»ÑÑÐµÐ½Ñ Ð²Ñеми ÑезеÑвнÑми и главнÑй ÑеÑÐ²ÐµÑ Ð½Ðµ бÑÐ´ÐµÑ ÑдалÑÑÑ ÑÑÑоки, Ð½Ð°Ñ Ð¾Ð´ÑÑиеÑÑ Ð² ÑÑаÑÑÑе recovery conflict даже пÑи оÑклÑÑении ÑезеÑвного.
ÐмеÑÑо иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑлоÑов ÑепликаÑии Ð´Ð»Ñ Ð¿ÑедоÑвÑаÑÐµÐ½Ð¸Ñ ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ ÑÑаÑÑÑ
ÑегменÑов WAL можно пÑименÑÑÑ wal_keep_size или ÑоÑ
ÑанÑÑÑ ÑегменÑÑ Ð² аÑÑ
иве Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ archive_command или archive_library. Тем не менее ÑÑи меÑÐ¾Ð´Ñ ÑаÑÑо пÑиводÑÑ Ðº ÑомÑ, ÑÑо Ñ
ÑаниÑÑÑ Ð±Ð¾Ð»ÑÑе ÑегменÑов WAL, Ñем необÑ
одимо, в Ñо вÑÐµÐ¼Ñ ÐºÐ°Ðº Ð´Ð»Ñ ÑлоÑов ÑепликаÑии ÑоÑ
ÑанÑÑÑÑÑ ÑолÑко Ñе ÑегменÑÑ, коÑоÑÑе нÑжнÑ. С дÑÑгой ÑÑоÑонÑ, Ð´Ð»Ñ ÑлоÑов ÑепликаÑии Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾ÑÑебоваÑÑÑÑ Ñак много ÑегменÑов WAL, ÑÑо они заполнÑÑ Ð²ÑÑ Ð¿ÑоÑÑÑанÑÑво, оÑведÑнное Ð´Ð»Ñ pg_wal; обÑÑм Ñайлов WAL, ÑоÑ
ÑанÑемÑÑ
Ð´Ð»Ñ ÑлоÑов ÑепликаÑии, огÑаниÑиваеÑÑÑ Ð¿Ð°ÑамеÑÑом max_slot_wal_keep_size.
ÐодобнÑм обÑазом паÑамеÑÑÑ hot_standby_feedback и vacuum_defer_cleanup_age позволÑÑÑ Ð·Ð°ÑиÑиÑÑ Ð²Ð¾ÑÑÑебованнÑе ÑÑÑоки Ð¾Ñ ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¿Ñи оÑиÑÑке, но пеÑвÑй паÑамеÑÑ Ð½Ðµ заÑиÑÐ°ÐµÑ Ð² ÑÐ¾Ñ Ð¿ÑомежÑÑок вÑемени, когда ÑезеÑвнÑй ÑеÑÐ²ÐµÑ Ð½Ðµ подклÑÑÑн, а Ð´Ð»Ñ Ð¿Ð¾Ñледнего ÑаÑÑо нÑжно задаваÑÑ Ð±Ð¾Ð»ÑÑое знаÑение, ÑÑÐ¾Ð±Ñ Ð¾Ð±ÐµÑпеÑиÑÑ Ð´Ð¾Ð»Ð¶Ð½ÑÑ Ð·Ð°ÑиÑÑ. СлоÑÑ ÑепликаÑии ÑеÑаÑÑ ÑÑи пÑоблемÑ.
25.2.6.1. ÐапÑоÑÑ Ð¸ дейÑÑÐ²Ð¸Ñ ÑлоÑов ÑепликаÑии
ÐаждÑй ÑÐ»Ð¾Ñ ÑепликаÑии Ð¾Ð±Ð»Ð°Ð´Ð°ÐµÑ Ð¸Ð¼ÐµÐ½ÐµÐ¼, ÑоÑÑоÑÑим из ÑÑÑоÑнÑÑ Ð±Ñкв, ÑиÑÑ Ð¸ Ñимволов подÑÑÑкиваниÑ.
ÐмеÑÑиеÑÑ ÑлоÑÑ ÑепликаÑии и иÑ
ÑÑаÑÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ пÑоÑмоÑÑеÑÑ Ð² пÑедÑÑавлении pg_replication_slots.
СлоÑÑ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ ÑÐ¾Ð·Ð´Ð°Ð½Ñ Ð¸ ÑÐ´Ð°Ð»ÐµÐ½Ñ ÐºÐ°Ðº Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¿ÑоÑокола поÑоковой ÑепликаÑии (Ñм. Раздел 54.4), Ñак и поÑÑедÑÑвом ÑÑнкÑий SQL (Ñм. ÐодÑаздел 9.27.6).
25.2.6.2. ÐÑÐ¸Ð¼ÐµÑ ÐºÐ¾Ð½ÑигÑÑаÑии
ÐÐ»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑлоÑа ÑепликаÑии вÑполниÑе:
postgres=# SELECT * FROM pg_create_physical_replication_slot('node_a_slot');
slot_name | lsn
-------------+-----
node_a_slot |
postgres=# SELECT slot_name, slot_type, active FROM pg_replication_slots;
slot_name | slot_type | active
-------------+-----------+--------
node_a_slot | physical | f
(1 row) ЧÑÐ¾Ð±Ñ ÑезеÑвнÑй ÑеÑÐ²ÐµÑ Ð¸ÑполÑзовал ÑÑÐ¾Ñ ÑлоÑ, ÑкажиÑе его в паÑамеÑÑе primary_slot_name в конÑигÑÑаÑии ÑÑого ÑеÑвеÑа. ÐапÑимеÑ:
primary_conninfo = 'host=192.168.1.50 port=5432 user=foo password=foopass' primary_slot_name = 'node_a_slot'
25.2.7. ÐаÑÐºÐ°Ð´Ð½Ð°Ñ ÑепликаÑиÑ
СвойÑÑво каÑкадной ÑепликаÑии позволÑÐµÑ ÑезеÑÐ²Ð½Ð¾Ð¼Ñ ÑеÑвеÑÑ Ð¿ÑинимаÑÑ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ ÑепликаÑии и поÑоки WAL Ð¾Ñ Ð´ÑÑÐ³Ð¸Ñ ÑезеÑвнÑÑ , вÑÑÑÑпаÑÑÐ¸Ñ Ð¿Ð¾ÑÑедниками. ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾ Ð´Ð»Ñ ÑменÑÑÐµÐ½Ð¸Ñ ÑиÑла непоÑÑедÑÑвеннÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑений к Ð³Ð»Ð°Ð²Ð½Ð¾Ð¼Ñ ÑеÑвеÑÑ, а Ñакже Ð´Ð»Ñ ÑменÑÑÐµÐ½Ð¸Ñ Ð½Ð°ÐºÐ»Ð°Ð´Ð½ÑÑ ÑаÑÑ Ð¾Ð´Ð¾Ð² пÑи пеÑедаÑе даннÑÑ Ð² инÑÑаÑеÑи.
РезеÑвнÑй ÑеÑвеÑ, вÑÑÑÑпаÑÑий как полÑÑаÑÐµÐ»Ñ Ð¸ оÑпÑавиÑелÑ, назÑваеÑÑÑ ÐºÐ°ÑкаднÑм ÑезеÑвнÑм ÑеÑвеÑом. РезеÑвнÑе ÑеÑвеÑÑ, ÑÑоÑÑие ближе к главномÑ, назÑваÑÑÑÑ ÑеÑвеÑами веÑÑ Ð½ÐµÐ³Ð¾ ÑÑовнÑ, а более оÑдалÑннÑе â ÑеÑвеÑами нижнего ÑÑовнÑ. ÐаÑÐºÐ°Ð´Ð½Ð°Ñ ÑепликаÑÐ¸Ñ Ð½Ðµ накладÑÐ²Ð°ÐµÑ Ð¾Ð³ÑаниÑений на колиÑеÑÑво или оÑганизаÑÐ¸Ñ Ð¿Ð¾ÑледÑÑÑÐ¸Ñ ÑÑовней, а каждÑй ÑезеÑвнÑй ÑоединÑеÑÑÑ ÑолÑко Ñ Ð¾Ð´Ð½Ð¸Ð¼ ÑеÑвеÑом вÑÑеÑÑоÑÑего ÑÑовнÑ, коÑоÑÑй в конÑе конÑов ÑоединÑеÑÑÑ Ñ ÐµÐ´Ð¸Ð½ÑÑвеннÑм главнÑм/ведÑÑим ÑеÑвеÑом.
РезеÑвнÑй ÑеÑÐ²ÐµÑ ÐºÐ°Ñкадной ÑепликаÑии не ÑолÑко полÑÑÐ°ÐµÑ Ð·Ð°Ð¿Ð¸Ñи WAL Ð¾Ñ Ð³Ð»Ð°Ð²Ð½Ð¾Ð³Ð¾, но Ñак же воÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð¸Ñ Ð¸Ð· аÑÑ Ð¸Ð²Ð°. Таким обÑазом, даже еÑли Ñоединение Ñ ÑеÑвеÑом более вÑÑокого ÑÑÐ¾Ð²Ð½Ñ ÑазоÑвÑÑÑÑ, поÑÐ¾ÐºÐ¾Ð²Ð°Ñ ÑепликаÑÐ¸Ñ Ð´Ð»Ñ Ð¿Ð¾ÑледÑÑÑÐ¸Ñ ÑÑовней бÑÐ´ÐµÑ Ð¿ÑодолжаÑÑÑÑ Ð´Ð¾ иÑÑеÑÐ¿Ð°Ð½Ð¸Ñ Ð´Ð¾ÑÑÑпнÑÑ Ð·Ð°Ð¿Ð¸Ñей WAL.
ÐаÑÐºÐ°Ð´Ð½Ð°Ñ ÑепликаÑÐ¸Ñ Ð² ÑекÑÑей ÑеализаÑии аÑÐ¸Ð½Ñ Ñонна. ÐаÑамеÑÑÑ ÑÐ¸Ð½Ñ Ñонной ÑепликаÑии (Ñм. ÐодÑаздел 25.2.8) в наÑÑоÑÑее вÑÐµÐ¼Ñ Ð½Ðµ оказÑваÑÑ Ð²Ð»Ð¸Ñние на каÑкаднÑÑ ÑепликаÑиÑ.
РаÑпÑоÑÑÑанение обÑаÑной ÑвÑзи гоÑÑÑего ÑезеÑва ÑабоÑÐ°ÐµÑ Ð¾Ñ Ð½Ð¸Ð¶ÐµÑÑоÑÑего ÑÑÐ¾Ð²Ð½Ñ Ðº вÑÑеÑÑоÑÑÐµÐ¼Ñ ÑÑÐ¾Ð²Ð½Ñ Ð²Ð½Ðµ завиÑимоÑÑи Ð¾Ñ ÑпоÑоба оÑганизаÑии ÑвÑзи.
ÐÑли вÑÑеÑÑоÑÑий ÑезеÑвнÑй ÑеÑÐ²ÐµÑ Ð±ÑÐ´ÐµÑ Ð¿ÑеобÑазован в новÑй главнÑй, нижеÑÑоÑÑие ÑеÑвеÑÑ Ð¿ÑÐ¾Ð´Ð¾Ð»Ð¶Ð°Ñ Ð¿Ð¾Ð»ÑÑаÑÑ Ð¿Ð¾Ñок Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ главного пÑи ÑÑловии, ÑÑо recovery_target_timeline Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение latest (по ÑмолÑаниÑ).
ÐÐ»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ°Ñкадной ÑепликаÑии необÑ
одимо наÑÑÑоиÑÑ ÑезеÑвнÑй каÑкаднÑй ÑеÑÐ²ÐµÑ Ð½Ð° пÑиÑм Ñоединений ÑепликаÑии (Ñо еÑÑÑ ÑÑÑановиÑÑ max_wal_senders и hot_standby, наÑÑÑоиÑÑ host-based authentication). Так же Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½ÐµÐ¾Ð±Ñ
одимо наÑÑÑоиÑÑ Ð½Ð° нижеÑÑоÑÑем ÑезеÑвном знаÑение primary_conninfo на каÑкаднÑй ÑезеÑвнÑй ÑеÑвеÑ.
25.2.8. Ð¡Ð¸Ð½Ñ ÑÐ¾Ð½Ð½Ð°Ñ ÑепликаÑиÑ
Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð² Postgres Pro поÑÐ¾ÐºÐ¾Ð²Ð°Ñ ÑепликаÑÐ¸Ñ Ð°ÑÐ¸Ð½Ñ Ñонна. ÐÑли ведÑÑий ÑеÑÐ²ÐµÑ Ð²ÑÑ Ð¾Ð´Ð¸Ñ Ð¸Ð· ÑÑÑоÑ, некоÑоÑÑе ÑÑанзакÑии, коÑоÑÑе бÑли подÑвеÑжденÑ, но не пеÑÐµÐ´Ð°Ð½Ñ Ð½Ð° ÑезеÑвнÑй, могÑÑ Ð±ÑÑÑ Ð¿Ð¾ÑеÑÑнÑ. ÐбÑÑм поÑеÑÑннÑÑ Ð´Ð°Ð½Ð½ÑÑ Ð¿ÑопоÑÑионален задеÑжке ÑепликаÑии на Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð¾ÑÑабоÑки оÑказа.
СинÑ
ÑÐ¾Ð½Ð½Ð°Ñ ÑепликаÑÐ¸Ñ Ð¿ÑедоÑÑавлÑÐµÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð³Ð°ÑанÑиÑоваÑÑ, ÑÑо вÑе изменениÑ, внеÑÑннÑе в ÑÑанзакÑии, бÑли пеÑÐµÐ´Ð°Ð½Ñ Ð¾Ð´Ð½Ð¾Ð¼Ñ Ð¸Ð»Ð¸ неÑколÑким ÑинÑ
ÑоннÑм ÑезеÑвнÑм ÑеÑвеÑам. ÐÑо повÑÑÐ°ÐµÑ ÑÑандаÑÑнÑй ÑÑÐ¾Ð²ÐµÐ½Ñ Ð½Ð°Ð´ÑжноÑÑи, гаÑанÑиÑÑемÑй пÑи ÑикÑаÑии ÑÑанзакÑии. ÐÑÐ¾Ñ ÑÑÐ¾Ð²ÐµÐ½Ñ Ð·Ð°ÑиÑÑ ÑооÑвеÑÑÑвÑÐµÑ Ð²ÑоÑÐ¾Ð¼Ñ ÑÑÐ¾Ð²Ð½Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи ÑепликаÑии из ÑеоÑии вÑÑиÑлиÑелÑной ÑеÑ
ники, или гÑÑпповой безопаÑноÑÑи пеÑвого ÑÑÐ¾Ð²Ð½Ñ (безопаÑноÑÑи гÑÑпповой и ÑÑÐ¾Ð²Ð½Ñ 1), когда вÑбÑан Ñежим synchronous_commit remote_write.
ÐÑи ÑÐ¸Ð½Ñ Ñонной ÑепликаÑии ÐºÐ°Ð¶Ð´Ð°Ñ ÑикÑаÑÐ¸Ñ Ð¿Ð¸ÑÑÑей ÑÑанзакÑии Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ Ð¿Ð¾Ð´ÑвеÑÐ¶Ð´ÐµÐ½Ð¸Ñ Ñого, ÑÑо запиÑÑ ÑикÑаÑии помеÑена в жÑÑнал пÑедзапиÑи на диÑке на Ð¾Ð±Ð¾Ð¸Ñ ÑеÑвеÑÐ°Ñ : ведÑÑем и ÑезеÑвном. ÐÑи Ñаком ваÑианÑе поÑеÑÑ Ð´Ð°Ð½Ð½ÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑоизойÑи ÑолÑко в ÑлÑÑае одновÑеменного вÑÑ Ð¾Ð´Ð° из ÑÑÑÐ¾Ñ Ð²ÐµÐ´ÑÑего и ÑезеÑвного ÑеÑвеÑов. ÐÑо обеÑпеÑÐ¸Ð²Ð°ÐµÑ Ð±Ð¾Ð»ÐµÐµ вÑÑокий ÑÑÐ¾Ð²ÐµÐ½Ñ Ð½Ð°Ð´ÑжноÑÑи, пÑи ÑÑловии пÑодÑманного Ð¿Ð¾Ð´Ñ Ð¾Ð´Ð° ÑиÑÑемного админиÑÑÑаÑоÑа к вопÑоÑам ÑазмеÑÐµÐ½Ð¸Ñ Ð¸ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÑÑими ÑеÑвеÑами. Ðжидание подÑвеÑÐ¶Ð´ÐµÐ½Ð¸Ñ ÑвелиÑÐ¸Ð²Ð°ÐµÑ ÑвеÑенноÑÑÑ Ð² Ñом, ÑÑо даннÑе не бÑдÑÑ Ð¿Ð¾ÑеÑÑÐ½Ñ Ð²Ð¾ вÑÐµÐ¼Ñ ÑÐ±Ð¾Ñ ÑеÑвеÑа, но пÑи ÑÑом ÑвелиÑÐ¸Ð²Ð°ÐµÑ Ð²ÑÐµÐ¼Ñ Ð¾Ñклика Ð´Ð»Ñ Ð¾Ð±ÑабоÑки ÑÑанзакÑии. ÐинималÑное вÑÐµÐ¼Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ Ñавно вÑемени пеÑедаÑи даннÑÑ Ð¾Ñ Ð²ÐµÐ´ÑÑего к ÑезеÑÐ²Ð½Ð¾Ð¼Ñ Ð¸ обÑаÑно.
ТÑанзакÑии ÑолÑко Ð´Ð»Ñ ÑÑÐµÐ½Ð¸Ñ Ð¸ оÑÐºÐ°Ñ ÑÑанзакÑии не ÑÑебÑÑÑ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ Ð´Ð»Ñ Ð¾ÑвеÑа Ñ ÑезеÑвного ÑеÑвеÑа. ÐÑомежÑÑоÑнÑе подÑвеÑÐ¶Ð´ÐµÐ½Ð¸Ñ Ð½Ðµ ожидаÑÑ Ð¾ÑвеÑа Ð¾Ñ ÑезеÑвного ÑеÑвеÑа, ÑолÑко подÑвеÑждение веÑÑ Ð½ÐµÐ³Ð¾ ÑÑовнÑ. Ðолгие опеÑаÑии вида загÑÑзки даннÑÑ Ð¸Ð»Ð¸ поÑÑÑÐ¾ÐµÐ½Ð¸Ñ Ð¸Ð½Ð´ÐµÐºÑа не ожидаÑÑ ÑиналÑного подÑвеÑждениÑ. Ðо вÑе двÑÑ ÑазнÑе подÑвеÑÐ¶Ð´ÐµÐ½Ð¸Ñ ÑÑебÑÑÑ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ, вклÑÑÐ°Ñ Ð¿Ð¾Ð´Ð³Ð¾ÑÐ¾Ð²ÐºÑ Ð¸ непоÑÑедÑÑвенно подÑвеÑждение.
СинÑ
ÑоннÑм ÑезеÑвнÑм ÑеÑвеÑом Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑезеÑвнÑй ÑеÑÐ²ÐµÑ Ð¿Ñи ÑизиÑеÑкой ÑепликаÑии или подпиÑÑик пÑи логиÑеÑкой ÑепликаÑии. ÐÑо Ñакже Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð´ÑÑгой поÑÑебиÑÐµÐ»Ñ Ð¿Ð¾Ñока логиÑеÑкой или ÑизиÑеÑкой ÑепликаÑии, ÑпоÑобнÑй оÑпÑавлÑÑÑ Ð² оÑÐ²ÐµÑ ÑÑебÑемÑе ÑообÑениÑ. Ðомимо вÑÑÑоеннÑÑ
ÑиÑÑем логиÑеÑкой и ÑизиÑеÑкой ÑепликаÑии, к Ñаким поÑÑебиÑелÑм оÑноÑÑÑÑÑ ÑпеÑиалÑнÑе пÑогÑаммÑ, pg_receivewal и pg_recvlogical, а Ñакже некоÑоÑÑе ÑÑоÑонние ÑиÑÑÐµÐ¼Ñ ÑепликаÑии и внеÑние пÑогÑаммÑ. ÐодÑобнее об оÑганизаÑии ÑинÑ
Ñонной ÑепликаÑии Ñ Ð¸Ñ
иÑполÑзованием можно ÑзнаÑÑ Ð² ÑооÑвеÑÑÑвÑÑÑей докÑменÑаÑии.
25.2.8.1. ÐÐ°Ð·Ð¾Ð²Ð°Ñ Ð½Ð°ÑÑÑойка
ÐÑи наÑÑÑоенной поÑоковой ÑепликаÑии ÑÑÑановка ÑинÑ
Ñонной ÑепликаÑии ÑÑебÑÐµÑ ÑолÑко дополниÑелÑной наÑÑÑойки: необÑ
одимо вÑÑÑавиÑÑ synchronous_standby_names в непÑÑÑое знаÑение. Так же необÑ
одимо ÑÑÑановиÑÑ synchronous_commit в знаÑение on, но Ñак как ÑÑо знаÑение по ÑмолÑаниÑ, обÑÑно дейÑÑвий не ÑÑебÑеÑÑÑ. (См. ÐодÑаздел 18.5.1 и ÐодÑаздел 18.6.2.) Ð Ñакой конÑигÑÑаÑии ÐºÐ°Ð¶Ð´Ð°Ñ ÑÑанзакÑÐ¸Ñ Ð±ÑÐ´ÐµÑ Ð¾Ð¶Ð¸Ð´Ð°ÑÑ Ð¿Ð¾Ð´ÑвеÑждение Ñого, ÑÑо на ÑезеÑвном ÑеÑвеÑе пÑоизоÑла запиÑÑ ÑÑанзакÑии в надÑжное Ñ
ÑанилиÑе. ÐнаÑение synchronous_commit Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð²ÑÑÑавлено Ð´Ð»Ñ Ð¾ÑделÑного полÑзоваÑелÑ, Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿ÑопиÑано в Ñайле конÑигÑÑаÑии, Ð´Ð»Ñ ÐºÐ¾Ð½ÐºÑеÑного полÑзоваÑÐµÐ»Ñ Ð¸Ð»Ð¸ ÐРили динамиÑеÑки изменено пÑиложением Ð´Ð»Ñ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÑÑепенÑÑ Ð½Ð°Ð´ÑжноÑÑи на ÑÑовне оÑделÑнÑÑ
ÑÑанзакÑий.
ÐоÑле ÑоÑ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿Ð¸Ñи о ÑикÑаÑии ÑÑанзакÑии на диÑке ведÑÑего ÑеÑвеÑа ÑÑа запиÑÑ WAL пеÑедаÑÑÑÑ ÑезеÑÐ²Ð½Ð¾Ð¼Ñ ÑеÑвеÑÑ. РезеÑвнÑй ÑеÑÐ²ÐµÑ Ð¾ÑвеÑÐ°ÐµÑ Ð¿Ð¾Ð´ÑвеÑждаÑÑим ÑообÑением поÑле ÑоÑ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ нового блока даннÑÑ
WAL на диÑке, еÑли ÑолÑко wal_receiver_status_interval на нÑм не Ñавен нÑлÑ. Ð ÑлÑÑае, когда вÑбÑан Ñежим synchronous_commit remote_apply, ÑезеÑвнÑй ÑеÑÐ²ÐµÑ Ð¿ÐµÑедаÑÑ Ð¿Ð¾Ð´ÑвеÑждение поÑле воÑпÑÐ¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿Ð¸Ñи ÑикÑаÑии, когда ÑÑанзакÑÐ¸Ñ ÑÑановиÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾Ð¹. ÐÑли ÑезеÑвнÑй ÑеÑÐ²ÐµÑ Ð²ÑбÑан на ÑÐ¾Ð»Ñ ÑинÑ
Ñонного ÑезеÑвного в ÑооÑвеÑÑÑвии Ñо знаÑением synchronous_standby_names на ведÑÑем, подÑвеÑждаÑÑие ÑообÑÐµÐ½Ð¸Ñ Ñ ÑÑого ÑеÑвеÑа, в ÑовокÑпноÑÑи Ñ ÑообÑениÑми Ñ Ð´ÑÑгиÑ
ÑинÑ
ÑоннÑÑ
ÑеÑвеÑов, бÑдÑÑ Ñигналом к завеÑÑÐµÐ½Ð¸Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ Ð¿Ñи ÑикÑиÑовании ÑÑанзакÑий, ÑÑебÑÑÑиÑ
подÑвеÑÐ¶Ð´ÐµÐ½Ð¸Ñ ÑоÑ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿Ð¸Ñи ÑикÑаÑии. ÐÑи паÑамеÑÑÑ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÑÑ Ð°Ð´Ð¼Ð¸Ð½Ð¸ÑÑÑаÑоÑÑ Ð¾Ð¿ÑеделиÑÑ, какие ÑезеÑвнÑе ÑеÑвеÑÑ Ð±ÑдÑÑ ÑинÑ
ÑоннÑми ÑезеÑвнÑми. ÐамеÑÑÑе, ÑÑо наÑÑÑойка ÑинÑ
Ñонной ÑепликаÑии в оÑновном оÑÑÑеÑÑвлÑеÑÑÑ Ð½Ð° главном ÑеÑвеÑе. ÐеÑеÑиÑленнÑе в ÑпиÑке ÑезеÑвнÑÑ
ÑеÑвеÑÑ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑÐµÐ½Ñ Ðº Ð½ÐµÐ¼Ñ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенно; он ниÑего не Ð·Ð½Ð°ÐµÑ Ð¾ ÑезеÑвнÑÑ
ÑеÑвеÑаÑ
, подклÑÑÑннÑÑ
каÑкадно, ÑеÑез пÑомежÑÑоÑнÑе ÑеÑвеÑÑ.
ÐÑли synchronous_commit Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение remote_write, Ñо в ÑлÑÑае подÑвеÑÐ¶Ð´ÐµÐ½Ð¸Ñ ÑÑанзакÑии оÑÐ²ÐµÑ Ð¾Ñ ÑезеÑвного ÑеÑвеÑа об ÑÑпеÑном подÑвеÑждении бÑÐ´ÐµÑ Ð¿ÐµÑедан, когда даннÑе запиÑÑÑÑÑ Ð² опеÑаÑионной ÑиÑÑеме, но не когда даннÑе бÑÐ´ÐµÑ ÑеалÑно ÑоÑ
ÑÐ°Ð½ÐµÐ½Ñ Ð½Ð° диÑке. ÐÑи Ñаком знаÑении ÑÑÐ¾Ð²ÐµÐ½Ñ Ð½Ð°Ð´ÑжноÑÑи ÑнижаеÑÑÑ Ð¿Ð¾ ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ñо знаÑением on. РезеÑвнÑй ÑеÑÐ²ÐµÑ Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾ÑеÑÑÑÑ Ð´Ð°Ð½Ð½Ñе в ÑлÑÑае Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ Ð¾Ð¿ÐµÑаÑионной ÑиÑÑемÑ, но не в ÑлÑÑае Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ Postgres Pro. Тем не менее ÑÑÐ¾Ñ Ð²Ð°ÑÐ¸Ð°Ð½Ñ Ð¿Ð¾Ð»ÐµÐ·ÐµÐ½ на пÑакÑике, Ñак как позволÑÐµÑ ÑокÑаÑиÑÑ Ð²ÑÐµÐ¼Ñ Ð¾Ñклика Ð´Ð»Ñ ÑÑанзакÑии. ÐоÑеÑÑ Ð´Ð°Ð½Ð½ÑÑ
Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑоизойÑи ÑолÑко в ÑлÑÑае одновÑеменного ÑÐ±Ð¾Ñ Ð²ÐµÐ´ÑÑего и ÑезеÑвного, оÑложнÑнного повÑеждением ÐРна ведÑÑем.
ÐÑли synchronous_commit Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение remote_apply, Ñо Ð´Ð»Ñ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð¸Ñ ÑикÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑÑанзакÑии поÑÑебÑеÑÑÑ Ð´Ð¾Ð¶Ð´Ð°ÑÑÑÑ, ÑÑÐ¾Ð±Ñ ÑекÑÑие ÑинÑ
ÑоннÑе ÑезеÑвнÑе ÑеÑвеÑÑ ÑообÑили, ÑÑо они воÑпÑоизвели ÑÑанзакÑÐ¸Ñ Ð¸ ÐµÑ Ð¼Ð¾Ð³ÑÑ Ð²Ð¸Ð´ÐµÑÑ Ð·Ð°Ð¿ÑоÑÑ Ð¿Ð¾Ð»ÑзоваÑелей. РпÑоÑÑÑÑ
ÑлÑÑаÑÑ
ÑÑо позволÑÐµÑ Ð¾Ð±ÐµÑпеÑиÑÑ Ð¾Ð±ÑÑнÑй ÑÑÐ¾Ð²ÐµÐ½Ñ ÑоглаÑованноÑÑи и ÑаÑпÑеделение нагÑÑзки.
ÐолÑзоваÑели пÑекÑаÑÑÑ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ðµ в ÑлÑÑае запÑоÑа на бÑÑÑÑÑÑ Ð¾ÑÑÐ°Ð½Ð¾Ð²ÐºÑ ÑеÑвеÑа. Ð Ñо вÑÐµÐ¼Ñ ÐºÐ°Ðº пÑи иÑполÑзовании аÑÐ¸Ð½Ñ Ñонной ÑепликаÑии ÑеÑÐ²ÐµÑ Ð½Ðµ бÑÐ´ÐµÑ Ð¿Ð¾Ð»Ð½Ð¾ÑÑÑÑ Ð¾ÑÑановлен, пока вÑе иÑÑ Ð¾Ð´ÑÑие запиÑи WAL не пеÑемеÑÑÑÑÑÑ Ð½Ð° ÑекÑÑий пÑиÑоединÑннÑй ÑезеÑвнÑй ÑеÑвеÑ.
25.2.8.2. ÐеÑколÑко ÑÐ¸Ð½Ñ ÑоннÑÑ ÑезеÑвнÑÑ ÑеÑвеÑов
СинÑ
ÑÐ¾Ð½Ð½Ð°Ñ ÑепликаÑÐ¸Ñ Ð¿Ð¾Ð´Ð´ÐµÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð¿Ñименение одного или неÑколÑкиÑ
ÑинÑ
ÑоннÑÑ
ÑезеÑвнÑÑ
ÑеÑвеÑов; ÑÑанзакÑии бÑдÑÑ Ð¶Ð´Ð°ÑÑ, пока вÑе ÑезеÑвнÑе ÑеÑвеÑÑ, ÑÑиÑаÑÑиеÑÑ ÑинÑ
ÑоннÑми, не подÑвеÑдÑÑ Ð¿Ð¾Ð»ÑÑение ÑвоиÑ
даннÑÑ
. ЧиÑло ÑинÑ
ÑоннÑÑ
ÑезеÑвнÑÑ
ÑеÑвеÑов, Ð¾Ñ ÐºÐ¾ÑоÑÑÑ
ÑÑанзакÑии Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¶Ð´Ð°ÑÑ Ð¿Ð¾Ð´ÑвеÑждениÑ, задаÑÑÑÑ Ð² паÑамеÑÑе synchronous_standby_names. Ð ÑÑом паÑамеÑÑе Ñакже задаÑÑÑÑ ÑпиÑок имÑн ÑезеÑвнÑÑ
ÑеÑвеÑов и меÑод (FIRST или ANY) вÑбоÑа ÑинÑ
ÑоннÑÑ
из заданного ÑпиÑка.
С меÑодом FIRST пÑоизводиÑÑÑ ÑинÑ
ÑÐ¾Ð½Ð½Ð°Ñ ÑепликаÑÐ¸Ñ Ð½Ð° оÑнове пÑиоÑиÑеÑов, когда ÑÑанзакÑии ÑикÑиÑÑÑÑÑÑ ÑолÑко поÑле Ñого, как иÑ
запиÑи в WAL ÑеплиÑиÑÑÑÑÑÑ Ð½Ð° заданное ÑиÑло ÑинÑ
ÑоннÑÑ
ÑезеÑвнÑÑ
ÑеÑвеÑов, вÑбиÑаемÑÑ
ÑоглаÑно пÑиоÑиÑеÑам. СеÑвеÑÑ, имена коÑоÑÑÑ
идÑÑ Ð² наÑале ÑпиÑка, имеÑÑ Ð±Ð¾Ð»ÑÑий пÑиоÑиÑÐµÑ Ð¸ вÑбиÑаÑÑÑÑ Ð½Ð° ÑÐ¾Ð»Ñ ÑинÑ
ÑоннÑÑ
. ÐÑÑгие ÑезеÑвнÑе ÑеÑвеÑÑ, идÑÑие в ÑÑом ÑпиÑке за ними, ÑÑиÑаÑÑÑÑ Ð¿Ð¾ÑенÑиалÑнÑми ÑинÑ
ÑоннÑми. ÐÑли один из ÑекÑÑиÑ
ÑинÑ
ÑоннÑÑ
ÑезеÑвнÑÑ
ÑеÑвеÑов по какой-либо пÑиÑине оÑклÑÑаеÑÑÑ, он бÑÐ´ÐµÑ Ð½ÐµÐ¼ÐµÐ´Ð»ÐµÐ½Ð½Ð¾ заменÑн ÑледÑÑÑим по поÑÑÐ´ÐºÑ ÑезеÑвнÑм ÑеÑвеÑом.
ÐÑÐ¸Ð¼ÐµÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ synchronous_standby_names Ð´Ð»Ñ Ð½ÐµÑколÑкиÑ
ÑинÑ
ÑоннÑÑ
ÑезеÑвнÑÑ
ÑеÑвеÑов, вÑбиÑаемÑÑ
по пÑиоÑиÑеÑам:
synchronous_standby_names = 'FIRST 2 (s1, s2, s3)'
Рданном пÑимеÑе, еÑли ÑабоÑаÑÑ ÑеÑÑÑе ÑезеÑвнÑÑ
ÑеÑвеÑа s1, s2, s3 и s4, два ÑеÑвеÑа s1 и s2 бÑдÑÑ Ð²ÑбÑÐ°Ð½Ñ Ð½Ð° ÑÐ¾Ð»Ñ ÑинÑ
ÑоннÑÑ
ÑезеÑвнÑÑ
, Ñак как иÑ
имена идÑÑ Ð² наÑале ÑÑого ÑпиÑка. СеÑÐ²ÐµÑ s3 бÑÐ´ÐµÑ Ð¿Ð¾ÑенÑиалÑнÑм ÑезеÑвнÑм и возÑмÑÑ Ð½Ð° ÑÐµÐ±Ñ ÑÐ¾Ð»Ñ ÑинÑ
Ñонного ÑезеÑвного пÑи оÑказе s1 или s2. СеÑÐ²ÐµÑ s4 бÑÐ´ÐµÑ Ð°ÑинÑ
ÑоннÑм ÑезеÑвнÑм, Ñак как его Ð¸Ð¼Ñ Ð² ÑÑом ÑпиÑке оÑÑÑÑÑÑвÑеÑ.
С меÑодом ANY пÑоизводиÑÑÑ ÑинÑ
ÑÐ¾Ð½Ð½Ð°Ñ ÑепликаÑÐ¸Ñ Ð½Ð° оÑнове квоÑÑма, когда ÑÑанзакÑии ÑикÑиÑÑÑÑÑÑ ÑолÑко поÑле Ñого, как иÑ
запиÑи в WAL ÑеплиÑиÑÑÑÑÑÑ Ð½Ð° как минимÑм заданное ÑиÑло ÑинÑ
ÑоннÑÑ
ÑеÑвеÑов в ÑпиÑке.
ÐÑÐ¸Ð¼ÐµÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ synchronous_standby_names Ð´Ð»Ñ Ð½ÐµÑколÑкиÑ
ÑинÑ
ÑоннÑÑ
ÑезеÑвнÑÑ
ÑеÑвеÑов, обÑазÑÑÑиÑ
квоÑÑм:
synchronous_standby_names = 'ANY 2 (s1, s2, s3)'
Рданном пÑимеÑе, еÑли ÑабоÑаÑÑ ÑеÑÑÑе ÑезеÑвнÑÑ
ÑеÑвеÑа s1, s2, s3 и s4, ÑÑанзакÑии бÑдÑÑ ÑикÑиÑоваÑÑÑÑ ÑолÑко поÑле полÑÑÐµÐ½Ð¸Ñ Ð¾ÑвеÑов как минимÑм Ð¾Ñ Ð´Ð²ÑÑ
ÑезеÑвнÑÑ
ÑеÑвеÑов из s1, s2 и s3. СеÑÐ²ÐµÑ s4 бÑÐ´ÐµÑ Ð°ÑинÑ
ÑоннÑм ÑезеÑвнÑм, Ñак как его Ð¸Ð¼Ñ Ð² ÑÑом ÑпиÑке оÑÑÑÑÑÑвÑеÑ.
СоÑÑоÑние ÑинÑ
ÑонноÑÑи ÑезеÑвнÑÑ
ÑеÑвеÑов можно ÑвидеÑÑ Ð² пÑедÑÑавлении pg_stat_replication.
25.2.8.3. ÐланиÑование пÑоизводиÑелÑноÑÑи
ÐÑганизÑÑ ÑÐ¸Ð½Ñ ÑоннÑÑ ÑепликаÑиÑ, обÑÑно нÑжно обÑÑоÑÑелÑно обдÑмаÑÑ ÐºÐ¾Ð½ÑигÑÑаÑÐ¸Ñ Ð¸ ÑазмеÑение ÑезеÑвнÑÑ ÑеÑвеÑов, ÑÑÐ¾Ð±Ñ Ð¾Ð±ÐµÑпеÑиÑÑ Ð¿ÑиемлемÑÑ Ð¿ÑоизводиÑелÑноÑÑÑ Ð¿Ñиложений. Ðжидание не поÑÑеблÑÐµÑ ÑиÑÑемнÑе ÑеÑÑÑÑÑ, но блокиÑовки ÑÑанзакÑий бÑдÑÑ ÑÐ¾Ñ ÑанÑÑÑÑÑ Ð´Ð¾ подÑвеÑÐ¶Ð´ÐµÐ½Ð¸Ñ Ð¿ÐµÑедаÑи. Ðак ÑледÑÑвие, непÑодÑманное иÑполÑзование ÑÐ¸Ð½Ñ Ñонной ÑепликаÑии пÑиведÑÑ Ðº ÑÐ½Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¿ÑоизводиÑелÑноÑÑи ÐРиз-за ÑвелиÑÐµÐ½Ð¸Ñ Ð²Ñемени оÑклика и ÑиÑла конÑликÑов.
Postgres Pro позволÑÐµÑ ÑазÑабоÑÑикам вÑбÑаÑÑ ÑÑебÑемÑй ÑÑÐ¾Ð²ÐµÐ½Ñ Ð½Ð°Ð´ÑжноÑÑи, обеÑпеÑиваемÑй пÑи ÑепликаÑии. Ðн Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑÑÑановлен Ð´Ð»Ñ ÑиÑÑÐµÐ¼Ñ Ð² Ñелом, Ð´Ð»Ñ Ð¾ÑделÑного полÑзоваÑÐµÐ»Ñ Ð¸Ð»Ð¸ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ даже Ð´Ð»Ñ Ð¾ÑделÑной ÑÑанзакÑии.
ÐапÑимеÑ, в ÑабоÑей нагÑÑзке пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ 10% изменений могÑÑ Ð¾ÑноÑиÑÑÑÑ Ðº важнÑм даннÑм клиенÑов, а 90% â к менее кÑиÑиÑнÑм даннÑм, поÑеÑÑв коÑоÑÑе, Ð±Ð¸Ð·Ð½ÐµÑ Ð²Ð¿Ð¾Ð»Ð½Ðµ ÑÐ¼Ð¾Ð¶ÐµÑ Ð²ÑжиÑÑ (напÑимеÑ, ÑÑо могÑÑ Ð±ÑÑÑ ÑекÑÑие ÑазговоÑÑ Ð¿Ð¾Ð»ÑзоваÑелей Ð¼ÐµÐ¶Ð´Ñ Ñобой).
ÐÑи наÑÑÑойке ÑÑÐ¾Ð²Ð½Ñ ÑÐ¸Ð½Ñ ÑонноÑÑи ÑепликаÑии на ÑÑовне пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ (на ведÑÑем) можно задаÑÑ ÑÐ¸Ð½Ñ ÑоннÑÑ ÑепликаÑÐ¸Ñ Ð´Ð»Ñ Ð±Ð¾Ð»ÑÑинÑÑва важнÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ без Ð·Ð°Ð¼ÐµÐ´Ð»ÐµÐ½Ð¸Ñ Ð¾Ð±Ñего ÑабоÑего ÑиÑма. ÐозможноÑÑÑ Ð½Ð°ÑÑÑойки на ÑÑовне пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ÑвлÑеÑÑÑ Ð²Ð°Ð¶Ð½Ñм и пÑакÑиÑнÑм ÑÑедÑÑвом Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð²Ñгод ÑÐ¸Ð½Ñ Ñонной ÑепликаÑии пÑи вÑÑоком бÑÑÑÑодейÑÑвии.
СледÑÐµÑ Ð¸Ð¼ÐµÑÑ Ð² видÑ, ÑÑо пÑопÑÑÐºÐ½Ð°Ñ ÑпоÑобноÑÑÑ ÑеÑи должна бÑÑÑ Ð±Ð¾Ð»ÑÑе ÑкоÑоÑÑи генеÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ WAL.
25.2.8.4. ÐланиÑование оÑказоÑÑÑойÑивоÑÑи
Ð synchronous_standby_names задаÑÑÑÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво и имена ÑинÑ
ÑоннÑÑ
ÑезеÑвнÑÑ
ÑеÑвеÑов, Ð¾Ñ ÐºÐ¾ÑоÑÑÑ
бÑÐ´ÐµÑ Ð¾Ð¶Ð¸Ð´Ð°ÑÑÑÑ Ð¿Ð¾Ð´ÑвеÑждение пÑи ÑикÑиÑовании ÑÑанзакÑии, когда паÑамеÑÑÑ synchronous_commit пÑиÑвоено знаÑение on, remote_apply или remote_write. ФикÑиÑование ÑÑанзакÑии в Ñаком Ñежиме Ð¼Ð¾Ð¶ÐµÑ Ð½Ðµ завеÑÑиÑÑÑÑ Ð½Ð¸ÐºÐ¾Ð³Ð´Ð°, еÑли один из ÑинÑ
ÑоннÑÑ
ÑезеÑвнÑÑ
ÑеÑвеÑов вÑÐ¹Ð´ÐµÑ Ð¸Ð· ÑÑÑоÑ.
ÐоÑÑÐ¾Ð¼Ñ Ð´Ð»Ñ Ð²ÑÑокой ÑÑепени доÑÑÑпноÑÑи лÑÑÑе вÑего обеÑпеÑиÑÑ Ð½Ð°Ð»Ð¸Ñие ÑинÑ
ÑоннÑÑ
ÑезеÑвнÑÑ
ÑеÑвеÑов в должном колиÑеÑÑве. ÐÐ»Ñ ÑÑого можно пеÑеÑиÑлиÑÑ Ð½ÐµÑколÑко поÑенÑиалÑнÑÑ
ÑезеÑвнÑÑ
ÑеÑвеÑов в ÑÑÑоке synchronous_standby_names.
ÐÑи ÑÐ¸Ð½Ñ Ñонной ÑепликаÑии на оÑнове пÑиоÑиÑеÑов ÑÐ¸Ð½Ñ ÑоннÑми ÑезеÑвнÑми ÑеÑвеÑами ÑÑанÑÑ ÑеÑвеÑÑ, имена коÑоÑÑÑ ÑÑоÑÑ Ð² ÑÑом ÑпиÑке пеÑвÑми. СледÑÑÑие за ними ÑеÑвеÑÑ Ð±ÑдÑÑ ÑÑановиÑÑÑÑ ÑÐ¸Ð½Ñ ÑоннÑми ÑезеÑвнÑми пÑи оÑказе одного из ÑекÑÑÐ¸Ñ .
ÐÑи ÑÐ¸Ð½Ñ Ñонной ÑепликаÑии на оÑнове квоÑÑма кандидаÑами на ÑÐ¾Ð»Ñ ÑÐ¸Ð½Ñ ÑоннÑÑ ÑезеÑвнÑÑ Ð±ÑдÑÑ Ð²Ñе ÑеÑвеÑÑ Ð² ÑпиÑке. РеÑли один из Ð½Ð¸Ñ Ð¾ÑкажеÑ, дÑÑгие ÑеÑвеÑÑ Ð±ÑдÑÑ Ð¿ÑодолжаÑÑ Ð¸ÑполнÑÑÑ ÑÑÑ ÑолÑ.
Ðогда к ведÑÑÐµÐ¼Ñ ÑеÑвеÑÑ Ð²Ð¿ÐµÑвÑе пÑиÑоединÑеÑÑÑ ÑезеÑвнÑй, он еÑÑ Ð½Ðµ бÑÐ´ÐµÑ Ð¿Ð¾Ð»Ð½Ð¾ÑÑÑÑ ÑинÑ
ÑонизиÑованнÑм. ÐÑо назÑваеÑÑÑ ÑоÑÑоÑнием навÑÑÑÑÑваниÑ. Ðак ÑолÑко оÑÑÑавание ÑезеÑвного Ð¾Ñ Ð²ÐµÐ´ÑÑего ÑеÑвеÑа ÑокÑаÑиÑÑÑ Ð´Ð¾ нÑÐ»Ñ Ð² пеÑвÑй Ñаз, ÑиÑÑема пеÑÐµÐ¹Ð´ÐµÑ Ð² ÑоÑÑоÑние поÑоковой пеÑедаÑи в ÑеалÑном вÑемени. СÑÐ°Ð·Ñ Ð¿Ð¾Ñле ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑезеÑвного ÑеÑвеÑа навÑÑÑÑÑвание Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð´Ð»Ð¸ÑелÑнÑм. Ð ÑлÑÑае вÑклÑÑÐµÐ½Ð¸Ñ ÑезеÑвного ÑеÑвеÑа длиÑелÑноÑÑÑ ÑÑого пÑоÑеÑÑа ÑвелиÑиÑÑÑ ÑооÑвеÑÑÑвенно пÑодолжиÑелÑноÑÑи пÑоÑÑоÑ. РезеÑвнÑй ÑеÑÐ²ÐµÑ Ð¼Ð¾Ð¶ÐµÑ ÑÑаÑÑ ÑинÑ
ÑоннÑм ÑолÑко по доÑÑижении ÑоÑÑоÑÐ½Ð¸Ñ Ð¿Ð¾Ñоковой пеÑедаÑи. ÐÑо ÑоÑÑоÑние можно пÑоÑледиÑÑ Ð² пÑедÑÑавлении pg_stat_replication.
ÐÑли ведÑÑий ÑеÑÐ²ÐµÑ Ð¿ÐµÑезапÑÑкаеÑÑÑ Ð¿Ñи налиÑии заÑикÑиÑованнÑÑ ÑÑанзакÑий, ожидаÑÑÐ¸Ñ Ð¿Ð¾Ð´ÑвеÑждениÑ, ÑÑи ÑÑанзакÑии бÑдÑÑ Ð¿Ð¾Ð¼ÐµÑÐµÐ½Ñ ÐºÐ°Ðº полноÑÑÑÑ Ð·Ð°ÑикÑиÑованнÑе поÑле воÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð²ÐµÐ´ÑÑего. ÐÑи ÑÑом нелÑÐ·Ñ Ð³Ð°ÑанÑиÑоваÑÑ, ÑÑо вÑе ÑезеÑвнÑе ÑеÑвеÑÑ ÑÑпели полÑÑиÑÑ Ð²Ñе ÑекÑÑие даннÑе WAL к моменÑÑ Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ Ð²ÐµÐ´ÑÑего. Таким обÑазом, некоÑоÑÑе ÑÑанзакÑии могÑÑ ÑÑиÑаÑÑÑÑ Ð½ÐµÐ·Ð°ÑикÑиÑованнÑми на ÑезеÑвном ÑеÑвеÑе, даже еÑли они ÑÑиÑаÑÑÑÑ Ð·Ð°ÑикÑиÑованнÑми на ведÑÑем. ÐаÑанÑиÑ, коÑоÑÑÑ Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ даÑÑ, ÑоÑÑÐ¾Ð¸Ñ Ð² Ñом, ÑÑо пÑиложение не полÑÑÐ¸Ñ Ñвного подÑвеÑÐ¶Ð´ÐµÐ½Ð¸Ñ ÑÑпеÑной ÑикÑаÑии, пока не бÑÐ´ÐµÑ ÑвеÑенноÑÑи, ÑÑо даннÑе WAL полÑÑÐµÐ½Ñ Ð²Ñеми ÑÐ¸Ð½Ñ ÑоннÑми ÑезеÑвнÑми ÑеÑвеÑами.
ÐÑли запÑÑÑиÑÑ ÑинÑ
ÑоннÑе ÑезеÑвнÑе ÑеÑвеÑÑ Ð² Ñказанном колиÑеÑÑве не ÑдаÑÑÑÑ, вам ÑледÑÐµÑ ÑменÑÑиÑÑ ÑиÑло ÑинÑ
ÑоннÑÑ
ÑеÑвеÑов, подÑвеÑÐ¶Ð´ÐµÐ½Ð¸Ñ ÐºÐ¾ÑоÑÑÑ
ÑÑебÑÑÑÑÑ Ð´Ð»Ñ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð¸Ñ ÑикÑаÑии ÑÑанзакÑий, в паÑамеÑÑе synchronous_standby_names (или вовÑе оÑклÑÑиÑÑ ÐµÐ³Ð¾) и пеÑезагÑÑзиÑÑ Ñайл конÑигÑÑаÑии на ведÑÑем ÑеÑвеÑе.
Ð ÑлÑÑае еÑли ведÑÑий ÑеÑÐ²ÐµÑ ÑÑал недоÑÑÑпнÑм Ð´Ð»Ñ Ð¾ÑÑавÑÐ¸Ñ ÑÑ ÑезеÑвнÑÑ , ÑледÑÐµÑ Ð¿ÐµÑеклÑÑиÑÑÑÑ Ð½Ð° наиболее Ð¿Ð¾Ð´Ñ Ð¾Ð´ÑÑий из имеÑÑÐ¸Ñ ÑÑ ÑезеÑвнÑÑ ÑеÑвеÑов.
ÐÑли необÑ
одимо пеÑеÑоздаÑÑ ÑезеÑвнÑй ÑеÑÐ²ÐµÑ Ð¿Ñи налиÑии ожидаÑÑиÑ
подÑвеÑÐ¶Ð´ÐµÐ½Ð¸Ñ ÑÑанзакÑий, ÑÑнкÑии pg_backup_start() и pg_backup_stop() нÑжно вÑзÑваÑÑ Ð² ÑеанÑе Ñ Ð¿Ð°ÑамеÑÑом synchronous_commit = off, в пÑоÑивном ÑлÑÑае ÑÑи запÑоÑÑ Ð±ÑдÑÑ Ð±ÐµÑконеÑно ждаÑÑ Ð¿Ð¾ÑÐ²Ð»ÐµÐ½Ð¸Ñ ÑезеÑвного ÑеÑвеÑа.
25.2.9. ÐепÑеÑÑвное аÑÑ Ð¸Ð²Ð¸Ñование на ÑезеÑвном ÑеÑвеÑе
Ðогда на ÑезеÑвном ÑеÑвеÑе пÑименÑеÑÑÑ Ð½ÐµÐ¿ÑеÑÑвное аÑÑ
ивиÑование WAL, Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñ Ð´Ð²Ð° ÑазлиÑнÑÑ
ÑÑенаÑиÑ: аÑÑ
ив WAL Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾Ð±Ñим Ð´Ð»Ñ Ð²ÐµÐ´ÑÑего и ÑезеÑвного ÑеÑвеÑа, либо ÑезеÑвнÑй ÑеÑÐ²ÐµÑ Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð¼ÐµÑÑ ÑобÑÑвеннÑй аÑÑ
ив WAL. Ðогда ÑезеÑвнÑй ÑабоÑÐ°ÐµÑ Ñ ÑобÑÑвеннÑм аÑÑ
ивом WAL, ÑÑÑановиÑе в archive_mode знаÑение always, и он бÑÐ´ÐµÑ Ð²ÑзÑваÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð°ÑÑ
иваÑии Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ ÑегменÑа WAL, коÑоÑÑй он полÑÑÐ°ÐµÑ Ð¿Ñи воÑÑÑановлении из аÑÑ
ива или поÑоковой ÑепликаÑии. Ð ÑлÑÑае Ñ Ð¾Ð±Ñим аÑÑ
ивом можно поÑÑÑпиÑÑ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸Ñно, но archive_command или archive_library должна пÑовеÑÑÑÑ, Ð½ÐµÑ Ð»Ð¸ в аÑÑ
иве Ñайла, иденÑиÑного аÑÑ
ивиÑÑемомÑ. Таким обÑазом, команда archive_command или библиоÑека archive_library должна позабоÑиÑÑÑÑ Ð¾ Ñом, ÑÑÐ¾Ð±Ñ ÑÑÑеÑÑвÑÑÑий Ñайл не бÑл заменÑн Ñайлом Ñ Ð´ÑÑгим ÑодеÑжимÑм, а в ÑлÑÑае попÑÑки повÑоÑного аÑÑ
ивиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° ÑообÑаÑÑ Ð¾Ð± ÑÑпеÑном вÑполнении. ÐÑи ÑÑом вÑе ÑÑи дейÑÑÐ²Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ ÑаÑÑÑиÑÐ°Ð½Ñ Ð½Ð° ÑÑÐ»Ð¾Ð²Ð¸Ñ Ð³Ð¾Ð½ÐºÐ¸, возможнÑе, еÑли два ÑеÑвеÑа попÑÑаÑÑÑÑ Ð°ÑÑ
ивиÑоваÑÑ Ð¾Ð´Ð¸Ð½ и ÑÐ¾Ñ Ð¶Ðµ Ñайл одновÑеменно.
ÐÑли в archive_mode ÑÑÑановлено знаÑение on, аÑÑ
иваÑÐ¸Ñ Ð² Ñежиме воÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ ÑезеÑва не пÑоизводиÑÑÑ. Ð ÑлÑÑае повÑÑÐµÐ½Ð¸Ñ ÑезеÑвного ÑеÑвеÑа, он наÑнÑÑ Ð°ÑÑ
иваÑÐ¸Ñ Ð¿Ð¾Ñле повÑÑениÑ, но в аÑÑ
ив не попадÑÑ Ñе ÑÐ°Ð¹Ð»Ñ WAL или ÑÐ°Ð¹Ð»Ñ Ð¸ÑÑоÑии линии вÑемени, коÑоÑÑе генеÑиÑовал не он Ñам. ÐоÑÑомÑ, ÑÑÐ¾Ð±Ñ Ð² аÑÑ
иве оказалÑÑ Ð¿Ð¾Ð»Ð½Ñй Ð½Ð°Ð±Ð¾Ñ Ñайлов WAL, необÑ
одимо обеÑпеÑиÑÑ Ð°ÑÑ
иваÑÐ¸Ñ Ð²ÑеÑ
Ñайлов WAL до Ñого, как они попадÑÑ Ð½Ð° ÑезеÑвнÑй ÑеÑвеÑ. ÐÑо еÑÑеÑÑвеннÑм обÑазом пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ð¿Ñи ÑÑанÑлÑÑии Ñайлов жÑÑналов, Ñак как ÑезеÑвнÑй ÑеÑÐ²ÐµÑ Ð¼Ð¾Ð¶ÐµÑ Ð²Ð¾ÑÑÑановиÑÑ ÑолÑко ÑайлÑ, коÑоÑÑе наÑ
одÑÑÑÑ Ð² аÑÑ
иве, однако пÑи поÑоковой ÑепликаÑии ÑÑо не Ñак. Ðогда ÑеÑÐ²ÐµÑ ÑабоÑÐ°ÐµÑ Ð½Ðµ в Ñежиме ÑезеÑва, ÑазлиÑий Ð¼ÐµÐ¶Ð´Ñ Ñежимами on и always неÑ.