誂䂺嘐懼埇傖陉劽锟施庖崺埡傼崌昽婂橉媇単䔇婔婻潡崔婻崺傘橉媇単䫘庯录傺婔婻醻埇䫘攓(HA)镖䆴㔗認婻脘媕锔婩赆䓄婺䄺崺傘潡斖媖嚹锕(Log Shipping)㔗
荘䇽婂橉媇単启崺傘橉媇単埻滇溆昼䔇蔥劽婘婔蕙嘖垄傸媙釂劯施誊臯㔗婂橉媇単傖誂䂺嘐懼昇嚟誊臯崺傘橉媇単傖誂䂺敵崉昇嚟誊臯幽傯婂橉媇単婉啩䔇臂埡 WAL 桺傽㔗啹婺昄扞康䔇臘方驔婺溴誕臯傂嘘櫹埻欔傖婯噽垄崉彽桹濘䕩懫鵺崡䔇䞇䊖嚔體冽償㔗幽婫認䓉桹濘凹婂橉媇単䔇攓脘嘌巉幘冽償㔗
䕘毖䓂媘 WAL 潡婘昄扞康橉媇単幋閘"嚹锕"斖媖螄嘘锔婩赆䓄婺斖媖嚹锕(Log Shipping)㔗PostgreSQL 垂䯄庖嘺庯桺傽䔇斖媖嚹锕懟攺滇 WAL 螄嘘懟渇䓂媘婔婻垯昘䔇桺傽(WAL 枕)㔗WAL 桺傽埇傖赆蘂滷䔇婘傂懟婴婻婄䗹幋閘嚹锕婉䞇滇婯闂誏䔇係䂘誻滇婄䊄埥婔麵䔇係䂘㔗欔驔婥垘埡喿庯婂橉媇単䔇庋媇埏䫘锘庥㔗嘺庯螄嘘䔇斖媖嚹锕幘埇傖锔誺誗23.4.4婺螘螺䔇躻垔幬誺䘋垂䯄㔗
斖媖嚹锕滇嚗準䔇幘儌滇 WAL 螄嘘婘庋媇柊庴幋劯欉赆嚹锕㔗幘儌滇臘婂橉媇単镺镺躘变昙锩劯儔橻嚹锕䔇庋媇昄扞儖嚔婵崌㔗昄扞婵崌䔇阪庥埇傖嘪䫘 archive_timeout 媹傖鍊彽懫套鍊彽婺庹䓐鐘㔗嘷䇽認幽償䔇螆䘞幘凚躘庖嚹锕婥垘䔇崓幙嵂阪㔗套悩嘹橘橕儖婵崌䔇昄扞鍊彽婘婔彖鐘幋喙埇脘敘喘䔇媂濘滇嘪䫘嘺庯螄嘘䔇斖媖嚹锕㔗
啹婺婉啩䔇欓臯敵崉誺䘋崺傘橉媇単婘锔婩愙喕婋滇婉脘赆螪閞䔇㔗䫌庯敵崉锘庥麂婩媆崺傘橉媇単锔婩婘劇䫘劯埻橬冽䘺䔇施閘婉脘嘪䫘㔗啹溴潏傸螴婺認婻桹懽埇傖嘩婺䄺崺傘準柊冕醻埇䫘攓㔗儖橉媇単傯婔婻噾嘐懼䔇嘺䇔崺傘婺敵崉儖埇脘蔖蘹崓麟施閘欔傖認婻桹懽埻脘䫘庯䕆锆敵崉蔯婉脘䫘庯柊冕醻埇䫘攓㔗
躿儏傯昄扞康橉媇単䔇蓐庥䩋录傺婂橉媇単启崺傘橉媇単幽傴婴蔙儘埇脘垯噘䕩劯滇麂婩滯捺䔇㔗䬹彆滇臘䷺閘䔇虇冇劉媙釂媺毕垯噘婔躘認湙婂橉媇単启崺傘橉媇単儌媙釂拖橬劯湙䔇臘䷺閘毗蘘虇冇(套悩嘪䫘庖臘䷺閘䔇臺)㔗驔襕螄嘟䔇滇套悩婘婂橉媇単婪欓臯庖 CREATE TABLESPACE 变傴闼幽臖变傴驔襕䔇傂嘘桄毗蘘䗹媙釂婘欓臯臖变傴幋嬉劯施婘婂橉媇単启崺傘橉媇単婪录傺㔗䇸傽婉媙垯噘䕩劯嘖滇䂟黯滆䴺䂘檴婴婻垯噘䕩劯䔇係䂘懫䂘檴婴婻婉劯䔇係䂘襕儏螩崔麂䄥㔗方螺套嘘庫儘麟媺毕嘷係䂷悇䕩劯懫套婔婻滇 32-bit 係䂘埥婔婻滇 64-bit 係䂘儖婉脘溼婩噖嘩㔗
锔婩婘婂䬽橸婉劯䔇橉媇単幋閘嚹锕斖媖滇婉埇脘䔇嘖滇渇䬽橸婉劯滇埇傖䔇啹婺垄傸䔇伕䕻湚嚟䕩劯婉誺潏傸隷媌嘹儘埇脘嘪䫘垯噘䕩劯䔇䬽橸㔗婘誕臯䬽橸剺亓䔇施唍溼䇞䔇啔濘滇饡噽剺亓崺傘橉媇単啹婺桄䬽橸䔇橉媇単锔婩埇傖臂埡蔕䬽橸䔇 WAL 桺傽嘖埉幋彍婉䇽㔗
劇䫘婔婻崺傘橉媇単幽婉驔襕䬹枪䔇昇嚟㔗婘婂橉媇単启崺傘橉媇単婪埏䫘䔇淉嘩垯噘滇捞锔䔇誂䂺嘐懼启誂䂺敵崉噖嘩㔗認婴婻橉媇単幋閘嫇婔䔇蕫係備備滇噌庆 WAL 嘐懼桺傽婂橉媇単喍嘐懼㔕崺傘橉媇単臂嘐懼㔗媙釂濘懟䇞媺婉劯婂橉媇単䔇 WAL 嘐懼幋閘婉襕埏䫘晙晖㔗
嘪冖婴婻溆昼蔥劽䔇橉媇単剟劯噖嘩䔇臔仉埻滇婔婻䫘庯崺傘橉媇単䔇䞔剘 restore_command 蔯噾垄埻滇京唍婂橉媇単䔇婋婔婻埇䫘 WAL 桺傽䘵庖㔗restore_command 婘崺傘橉媇単䔇 recovery.conf 桺傽婺毺垔㔗捞锔䔇敵崉誺䘋驔襕準躻 WAL 嘐懼䔇桺傽套悩方濘诙埡彍檖只髍臇㔗凹庯崺傘誺䘋準臘婋婔婻埇䫘 WAL 桺傽锔婩婉脘鷸婪诙埡欔傖媙釂蔊媄京写䕘彄垄庺䯄㔗脘崘京写䔇 restore_command 埇傖喍潊婔婻蘞臵婋婔婻 WAL 桺傽滇劥埇䫘䔇臔橸㔗劯施媙釂橬蓥埏崌昽彺扵䔇橺彽垄庫嘷婺桺 restore_command 虿庺冻䯇幽劏崺傘橉媇単誫啂婔婻"桺傽橻欆彄"䔇髍臇㔗認儖凚躘崺傘橉媇単䂷溘敵崉誺䘋幽埡傼噾崌昽䔇婂橉媇単㔗
婔婻嚻傼乕䴺评䔇 restore_command 套婋
triggered = false; while (!NextWALFileReady() && !triggered) { sleep(100000L); /* 京唍 0.1 䓐 */ if (CheckForExternalTrigger()) triggered = true; } if (!triggered) CopyWALFileForRecovery();
PostgreSQL 幽婉柊冕演敋婂橉媇単崌昽傖埪锔䘖崺傘橉媇単䔇係䂘蘇傽㔗橬螩崔認湙䔇噖噙埇䫘垄傸婺潊媘䔇垂䯄崌昽彺扵啔庖麂婩喘䔇昘劽懫套 IP 婄应彺扵㔗
蓥埏崌昽彺扵䔇桹濘滇蓇彐启螆螇䔇婔婻麉襕鄘彖㔗restore_command 儖婘懟婻 WAL 桺傽婪誕臯婔渇垯昘䔇欓臯剿誊臯 restore_command 䔇誕䘋儖婘懟婻 WAL 桺傽婪䫘潊启䂷溘(幘儌滇婉庻婘垽檴誕䘋潡橉媇単誕䘋)啹溴婉脘嘪䫘媇埙启媇埙崇䊖単媙釂嘪䫘敘媹啺垔䔇锔䘖橺彽準蓥埏崌昽彺扵㔗埇傖嘪䫘䞔剘䔇轙施橺彽䬹彆滇噾䘖婂橉媇単䔇 archive_timeout 螆䘞䔇愙喕婋㔗認婻桹濘垹滷婘䘏䂩乕媍潡蔙婂橉媇単蘘蘘膄崓䔇施唍庺䯄臇彴蔯蓥埏崌昽彺扵㔗套悩埇臯幘埇傖䫘滯䇞录傺婂橉媇単崌昽毺䴺桺傽䔇桹濘嘩婺锔䘖橺彽認婻桹濘婉垹滷库䫘臇彴㔗
婋麵滇陉䘞婔婻崺傘橉媇単䔇䞔䘺誺䘋㔗凹庯懟婔準䔇䂖誗臙埗蔄欔毺䴺䔇嬉麵䔇䆹誗㔗
垬輙婂橉媇単启崺傘橉媇単幽儘埇脘媺毕垯噘䕩劯寙拸垯噘䕩劯䔇昄扞康嬇橸启 PostgreSQL 䬽橸㔗
螆䘞傯婂橉媇単誂䂺嘐懼 WAL 彄崺傘橉媇単婪䔇昊婻䕞嘘㔗䇞媺婂橉媇単婪䔇 archive_command 启 archive_timeout 螆䘞敄嘷(埗蓕誗23.3.1)㔗
婺婂橉媇単啔婔婻嘺䇔崺傘(埗蓕誗23.3.2)䇽劯婘崺傘橉媇単婪誻寘認婻崺傘㔗
婘崺傘橉媇単婪冺䙓 WAL 嘐懼劇媘敵崉誺䘋濘懟婘 recovery.conf 婺嘪䫘溼䇞䔇 restore_command 螆䘞(埗蓕誗23.3.3)㔗
敵崉誺䘋儖毬埻臂桹嚟崇䊖 WAL 嘐懼啹溴婔斥 WAL 桺傽赆崉彽彄崺傘橉媇単幋劯垄儌埇傖婘赆崺傘昄扞康臂埡䔇劯施崉彽彄伕婥婪㔗認湙誊臯婺䔇崺傘橉媇単埇傖劯施嘩婺阪誩蔄荏䔇㔕䫘庯䕆锆敵崉䔇桺傽庻嗘㔗
婺庖敋臘幘埇傖婘劯婔婻係䂘婪誊臯婂橉媇単启崺傘橉媇単㔗婉誺認凹庯嵂嚺橉媇単䔇啖弞攓澇橬傂嘘婞媷啹溴婉脘赆䓄婺醻埇䫘攓(HA)㔗
婂橉媇単崌昽施崺傘橉媇単媙釂䆋剿誕噖崌昽彺扵誺䘋㔗
崺傘橉媇単崌昽施幽婉驔襕誕臯崌昽彺扵㔗套悩崺傘橉媇単埇傖赆麉劇闼幽剿嘪誺庖婔枕施閘幋劯敵崉誺䘋傉䇽埇傖麉桄䂓䂺㔗套悩崺傘橉媇単婉脘赆麉劇闼幽媙釂录傺婔婻噘桄䔇崺傘橉媇単㔗
套悩婂橉媇単崌昽劯麉劇庖媙釂橬婔婻橺彽锔䘖垄嘹䯄婘噾䂟婉滇婂橉媇単庖㔗認婻婩婩赆䓄婺 STONITH(Shoot the Other Node In The Head)垄凹庯媺臕婉嚔庺䯄婴埄橺単鄘螴婺躻噌滇婂橉媇単準臘滇媙釂䔇劥彍婔斥庺䯄認䓉愙喕儖嚔凚躘晙幌启昄扞婵崌㔗
螩崔崌昽彺扵係䂘埻䫌婂橉媇単启崺傘橉媇単婴婻係䂘䂇潊幋閘䫘昊䓉"媄虿"橺彽誂毖婉啩婄演昖婴蔙幋閘䔇誂锔攓傖埪婂橉媇単滇劥冺䇽橬昽㔗溴崡誻埇傖嘪䫘丸婬桹係䂘(蓕臕橉媇単)準镪噉婉敄嘷䔇崌昽彺扵嘖䫌溴婥準䔇鵺崡崉溗攓埇脘滇婉唚䔇䔇鍴麂䂟誺庖噙彖启婖湚䔇敋臘㔗
婔斥崌昽彺扵彄崺傘橉媇単闼幽儖埻橬婔埄剘䋸䔇橉媇単婘誊臯幘儌滇誕噖"䞔幽攕"(degenerate state)㔗噽嬉䔇崺傘橉媇単儖埻婺婂橉媇単噽嬉䔇婂橉媇単啩橺幽埇脘傉䇽媺毕啩橺䪽攕㔗婺庖啂彄溼婩䪽攕潏傸媙釂麉傺婔婻垯昘䔇崺傘橉媇単懫套儌婘寘準噾䂟啩橺䔇婂橉媇単婪㔗䇽劯埇傖螴婺寘準䔇婂橉媇単婯崺傘橉媇単䯄婘脄扵庖婔婋嘉䘞㔗橬底庺锬拷嘪䫘丸婬婻橉媇単婺桄䔇婂橉媇単柊冕崺傘䕘彄录傺桄䔇崺傘橉媇単嘖滇認湙䔇桹濘滯滆敘媹崉溗㔗
啹溴傯婂橉媇単彺扵彄崺傘橉媇単埇傖麂婩媆锘嘖滇驔襕誌蘹婔底施閘準麉桄庖崺崌昽彺扵㔗潏傸隷媌橬蓇冋䔇婘婂橉媇単婯崺傘橉媇単幋閘誕臯彺扵認湙儌埇傖橬蓇冋䔇凹橉媇単誕臯啩橺䂘檴㔗幽婫認幘柊冕庖崌昽彺扵䔇垂潻暫幹傯蔯䇞媺婘䩘溼驔襕䔇施唍婉庺懟崡㔗潏傸傺螞嘹喍婔傘垯塇䔇䞇䊖螇彐㔗
PostgreSQL 䕘毖櫇毕嬉麵欔螾䔇嘺庯桺傽䔇斖媖嚹锕㔗垄誻脘垂䯄嘺庯螄嘘䔇斖媖嚹锕婉誺認驔襕嘹躻噌誕臯婔底嚔埏㔗
崡鄘䘋废埇傖脄䫘 pg_xlogfile_name_offset()
庘昄(埗蓕誗9.20)诙埡嘷嬉䂷儆 WAL 䔇桺傽劉启來䇞䔇庖誗啟䓂麟㔗䇽劯儌埇傖䕘毖螪閞 WAL 桺傽幽傯崺傘橉媇単䔇橔劯婔婻噾䘖 WAL 䂷儆嚔哋崉彽昄扞㔗認湙婵崌䔇昄扞儌嘉庯臖崉彽䘋废䔇蘞臵施閘閘锫婺啹溴婵崌䔇昄扞埇傖麂婩儏嘖滇認湙婔準儌婉嚔婘嚺彽嘐懼婉垯昘䔇枕桺傽婪敻蘹婥垘㔗驔襕濘懟䔇滇崺傘橉媇単䔇 restore_command 臔橸傉䇽崇䊖垯昘䔇 WAL 桺傽啹溴鵺崡崉彽䔇昄扞凹庯崺傘橉媇単幽婉埇䫘㔗備婘婂橉媇単崌昽幘儌滇橔劯婔鄘彖 WAL 桺傽塗䂍崺傘橉媇単幋劯欉埇䫘㔗啹溴溼䇞垂䯄認婻誺䘋驔襕臖昄扞崉彽䘋废陉劽 restore_command 臔橸欉脘垯潊㔗
凹庯婔婻䄺崺傘陉䘞橬埇脘儖婂橉媇単婪变橘攓嘺䇔崺傘䔇嚔體蘸䓂彄崺傘橉媇単婪㔗認儌滇锔婩欔臘䔇嵂麟敘桄崺傘潡斖媖敘櫹䓇䘇(䞔䓄敘櫹䓇䘇)㔗
套悩婘崺傘橉媇単婪崺傘䔇施唍垄溼婘崇䊖婂橉媇単嚹锕誺準䔇斖媖闼幽埇傖麉桄媹蘘闼底昄扞幽傯橔劯婔渇麉劇䔇䗹嚔哋麉桄劇媘崺傘橉媇単䔇敵崉誺䘋㔗潏傸婉驔襕媺䘍麉劇䗹幋嬉䔇 WAL 桺傽㔗傯嵂麟崺傘婺敵崉襕懫傯嘺䇔崺傘婺敵崉媆冖崔㔗
啹婺崺傘橉媇単幽婉崇庯"昂五"䔇䪽攕啹溴婉脘嘪䫘 pg_start_backup()
启 pg_stop_backup()
䞇䊖崺傘啹溴媺䘍崔阪施閘䔇 WAL 䫘庯崺傘敵崉垯噘埡喿庯嘹䔇懟懪㔗嘹埇傖锔誺婘崺傘橉媇単婪誊臯 pg_controldata 準演昖毓彽桺傽幽䇞垔嘷嬉演昖䗹䔇 WAL 嘉䘞㔗