ใช้ pg_dump บนเซิร์ฟเวอร์ hot แตนหรือยัง?


21

คำเตือน: ฉันยอมรับว่ายังไม่ได้ลองสิ่งนี้ แต่ฉันไม่แน่ใจว่าฉันจะรู้ว่ามันทำงานไม่ถูกต้องหรือไม่ดังนั้นฉันต้องการถาม

ฉันต้องการเรียกใช้งานการสำรองข้อมูลรายคืน (ผ่านpg_dumpall) จากเซิร์ฟเวอร์ hot standby ที่ใช้การจำลองแบบสตรีมมิ่งเพื่อหลีกเลี่ยงการวางภาระนั้นไว้บนหลัก ฉันได้เห็นเพียงการกล่าวถึงผู้คนที่ได้รับ gotchas เช่นที่นี่และที่นี่แต่มีคำแนะนำน้อยมาก ไม่เป็นไรหากการสำรองข้อมูลล่าช้าไปทางด้านหลังหลักเล็กน้อยตราบใดที่มันสอดคล้องกัน (ซึ่งควรจะเป็น)

คำถามของฉันคือ:

  1. ฉันต้องการทำสิ่งนี้จริงๆหรือควรทำการสำรองข้อมูลบนเซิร์ฟเวอร์หลัก ทำไม?

  2. เมื่อทำการดัมพ์ในโหมดแสตนด์บายฉันต้องใช้การตั้งค่าใดและขั้นตอนใดที่ฉันควรทำอย่างถูกต้อง? เช่นฉันจะต้องหยุดการจำลองแบบในช่วงระยะเวลาของการสำรองข้อมูลหรือไม่


ฉันคาดว่าถ้าการจำลองแบบของคุณเก็บฐานข้อมูลสแตนด์บายในสถานะที่สอดคล้องสำรองข้อมูลของคุณจะสอดคล้อง ตามpg_dumpเอกสารอธิบาย: "มันทำการสำรองข้อมูลที่สอดคล้องกันแม้ว่าฐานข้อมูลจะถูกใช้พร้อมกัน" pg_dumpallเรียกใช้อดีตสำหรับแต่ละฐานข้อมูล
dezso

คำตอบ:


21

AFAIK ที่ทำงานpg_dumpบนโหมดสแตนด์บายแบบเร่งด่วนเป็นหนึ่งในสิ่งสำคัญที่เป็นประโยชน์สำหรับการสแตนด์บาย มันปลอดภัยอย่างสมบูรณ์แบบแม้ว่ามันจะไม่น่าเชื่อถืออย่างสมบูรณ์ - การทิ้งสามารถล้มเหลวได้หากสแตนด์บายยกเลิกการทำธุรกรรมเมื่อมันอยู่ไกลเกินกว่าต้นแบบ

สิ่งเดียวที่คุณต้องดูคือการตรวจสอบให้แน่ใจว่าสแตนด์บายเป็นปัจจุบันและต่อเนื่อง หากสแตนบายขาดการเชื่อมต่อกับมาสเตอร์และอยู่ด้านหลังไกลเกินไปคุณไม่ต้องการสำรองข้อมูลสแตนบายที่ล้าสมัยเป็นเวลาสามสัปดาห์

คุณจะต้องอนุญาตให้แสตนด์บายค่อนข้างต่ำกว่ามาสเตอร์ในระหว่างการสำรองข้อมูลเนื่องจากมิฉะนั้นจะต้องยกเลิกการpg_dumpทำธุรกรรมของคุณเพื่อเล่น WAL ต่อไป ดูเอกสารประกอบเกี่ยวกับโหมดเตรียมพร้อมโดยเฉพาะอย่างยิ่งส่วน "การจัดการข้อขัดแย้งของข้อความค้นหา" max_standby_archive_delayและmax_standby_streaming_delayพารามิเตอร์และ

โปรดทราบว่าอาจารย์จะต้องยินดีเก็บเอกสาร WAL ให้เพียงพอเพื่อให้ทาสสามารถติดต่อได้อีกครั้ง


12
  1. เราสำรองข้อมูลในโหมดสแตนด์บายมันเป็นเรื่องปกติอย่างสมบูรณ์แบบ
  2. เพื่อหลีกเลี่ยงความขัดแย้งของคำสั่งที่ถูกยกเลิกในระหว่างการสำรองข้อมูลในระบบสแตนด์บายคุณจะต้องหยุดการจำลองแบบชั่วคราวเมื่อสแตนด์บายโดยใช้SELECT pg_xlog_replay_pause();จากนั้นเรียกใช้การสำรองข้อมูลของคุณเมื่อดำเนินการเสร็จแล้วSELECT pg_xlog_replay_resume();เพื่อดำเนินการจำลองแบบต่อ โปรดทราบว่าการใช้คำสั่งด้านบนจะทำให้การกู้คืนเกิดความล่าช้าบนสลาฟซึ่งอาจมีขนาดใหญ่ขึ้นอยู่กับขนาดฐานข้อมูลของคุณ นอกจากนี้ให้คำนึงถึงพื้นที่เซ็กเมนต์ WAL ที่จะใช้เนื่องจากจะไม่มีการเล่นซ้ำบนทาสระหว่างการหยุดชั่วคราว

คุณอาจพบว่าฟังก์ชั่นอื่น ๆ administractive ประโยชน์ในเอกสาร SELECT pg_is_in_recovery()ยกตัวอย่างเช่นตรวจสอบว่าเซิร์ฟเวอร์ที่เป็นจริงในการกู้คืนก่อนที่จะหยุดมันได้


0

หากคุณหยุดการจำลองแบบชั่วคราวในระหว่างการสำรองข้อมูล (นี่เป็นความคิดที่ดีสำหรับการรักษาความถูกต้องและความสอดคล้อง) คุณอาจแก้ไขบางบรรทัดใน master postgresql ของคุณ:

ระยะเวลาในการสำรองข้อมูลของคุณล่าช้าเป็นปกติ ตรวจสอบให้แน่ใจว่าโหนดหลักเก็บรักษาไฟล์ x_log ทั้งหมดที่จำเป็นต่อการเรพลิเคตต่อ คุณสามารถทำได้ในการแก้ไข postgresql.conf

wal_keep_segments = 32      # in logfile segments, 16MB each; 0 disables

หากคุณไม่แก้ไขและกระบวนการสำรองข้อมูลของคุณยาวเกินไปอาจเป็นไปได้ว่าโหนดหลักลบไฟล์ xlog ก่อนที่จะส่งไปยังสลาฟ


การตั้งค่านี้จำเป็นสำหรับการจำลองแบบการสตรีมเท่านั้น ฉันใช้การจำลองแบบปกติและ wal จะถูกเก็บไว้ในโฮสต์สแตนด์บายแม้ว่าเซิร์ฟเวอร์ Postgres สแตนด์บายจะหยุดชั่วคราว
david.perez
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.