รับไฟล์ WAL จากอินสแตนซ์ AWG RDS PostgreSQL


18

เรามีอินสแตนซ์ Postgres RDS บน Amazon Web Services เรามีการสำรองข้อมูลอัตโนมัติที่เปิดใช้งานและเราถ่ายภาพเป็นรายวัน เราต้องการสร้างการสำรองข้อมูล 'ล่าสุด' ของอินสแตนซ์ RDS ที่เราสามารถจัดการตนเองได้ การรัน pg_dump กับอินสแตนซ์นั้นไม่เพียงพอเพราะเราต้องการที่จะสามารถกู้คืนฐานข้อมูลไปยังจุดใดก็ได้ในเวลา เราต้องการให้มีการสำรองข้อมูล RDS แบบโลคัลและไฟล์ WAL ทั้งหมดตั้งแต่มีการสำรองข้อมูลนั้น คำถาม:

  1. เป็นไปได้หรือไม่ที่จะเข้าถึงไฟล์ WAL และการสำรองข้อมูลที่ RDS สร้างขึ้นโดยอัตโนมัติในรูทีนการสำรองข้อมูล มันจะเหมาะ ฉันต้องการดาวน์โหลดสำเนาในเครื่องของพวกเขา หลังจากการตรวจสอบเบื้องต้นฉันรู้สึกว่าคำตอบของคำถามนี้คือ 'ไม่' ดูเหมือนว่า RDS จะจัดเก็บไฟล์ WAL และการสำรองข้อมูลไว้ใน S3 แต่มันทำให้เราไม่สามารถเข้าถึงได้ ฉันจะรักการยืนยัน

  2. มีวิธีอื่นในการเข้าถึงทรานแซคชัน (ไฟล์ WAL) ที่เกิดขึ้นในอินสแตนซ์ของ RDS หรือไม่? ฉันคิดว่าเราควรจะสามารถสร้างฐานข้อมูล Postgres บนธุรกรรม EC2 และ 'ฟีด' จากอินสแตนซ์ RDS หลัก 'สด' ของเราลงในอินสแตนซ์ EC2 นี้ เมื่ออัปเดตอินสแตนซ์ EC2 ของเราแล้วเราสามารถดึงไฟล์ WAL จากที่นั่น ปวดหัวอะไร: / สามารถตั้งค่านี้ได้หรือไม่? อะไรคือความมหัศจรรย์ในการ 'ฟีด' จากอินสแตนซ์ RDS ของเราไปยังอินสแตนซ์ EC2 เพื่อให้ทันสมัยอยู่เสมอ

ขอบคุณ!

คำตอบ:


17

ปรับปรุง: ฉันได้โพสต์เกี่ยวกับเรื่องนี้ไปยังฟอรั่ม AWS - โปรดไปตีระฆังในและขอให้มันมี


ในขณะที่เขียน Amazon RDS ไม่สนับสนุนการจำลองแบบภายนอก RDS คุณสามารถGRANTผู้ใช้ที่REPLICATIONถูกต้องโดยใช้การrds_superuserเข้าสู่ระบบ แต่คุณไม่สามารถกำหนดค่าreplicationรายการสำหรับ IP ภายนอกpg_hba.confได้

นอกจากนี้เมื่อคุณสร้างกลุ่มพารามิเตอร์ DB ใน RDS พารามิเตอร์ที่สำคัญบางอย่างที่จะแสดง แต่ล็อคเช่นซึ่งถูกล็อคไปarchive_command /etc/rds/dbbin/pgscripts/rds_wal_archive %pAWS RDS สำหรับ PostgreSQL ดูเหมือนจะไม่เปิดเผย WALs เหล่านี้สำหรับการเข้าถึงภายนอก (พูดผ่าน S3) ตามที่จำเป็นหากคุณใช้การจำลองแบบ WAL-shipping สำหรับ PITR ภายนอก

ดังนั้น ณ จุดนี้หากคุณต้องการจัดส่งสินค้าทางไปรษณีย์อย่าใช้ RDS มันเป็นฐานข้อมูลที่ใช้งานง่ายกระป๋อง แต่บ่อยครั้งที่ใช้งานง่ายหมายความว่ามันมี จำกัด และนั่นเป็นกรณีที่นี่อย่างแน่นอน ดังที่ Joe Love ชี้ให้เห็นในความคิดเห็นมันมีการจัดส่ง WAL และ PITR ภายใน RDSแต่คุณไม่สามารถเข้าถึง WAL ไปยังสิ่งนั้นได้จากนอก RDS

ดังนั้นคุณต้องใช้สิ่งอำนวยความสะดวกในการสำรองข้อมูลของ RDS เช่นดัมพ์สแน็ปช็อตและ PITR ที่ใช้ WAL ของตัวเอง


แม้ว่า RDS จะอนุญาตให้คุณทำการเชื่อมต่อการจำลองแบบ (สำหรับpg_basebackupหรือการจำลองแบบสตรีมมิ่ง) และอนุญาตให้คุณเข้าถึง WAL ที่เก็บถาวรคุณอาจไม่สามารถใช้ WAL นั้นได้ RDS รัน PostgreSQL ที่ได้รับการแพตช์แล้ว แต่ไม่มีใครรู้ว่าแพทช์มีความแรงมากหรือว่ามีการเปลี่ยนแปลงรูปแบบบนดิสก์ มันยังทำงานบนสถาปัตยกรรมที่เลือกโดย Amazon ซึ่งอาจเป็น x64 Linux แต่ไม่สามารถระบุได้ง่าย เนื่องจาก PostgreSQL ใช้รูปแบบดิสก์และการจำลองแบบขึ้นอยู่กับสถาปัตยกรรมคุณจึงสามารถทำซ้ำไปยังโฮสต์ที่มีสถาปัตยกรรมเดียวกับที่ใช้โดย Amazon RDS และเฉพาะในกรณีที่การสร้าง PostgreSQL ของคุณเข้ากันได้เท่านั้น

เหนือสิ่งอื่นใดนั่นหมายความว่าคุณไม่มีวิธีง่ายๆในการย้ายออกจาก RDS คุณต้องหยุดการเขียนทั้งหมดไปยังฐานข้อมูลนานพอที่จะรับpg_dumpคืนค่าและเรียกใช้ฐานข้อมูลใหม่ เทคนิคปกติที่มีการเรพลิเคทและ failover ด้วย rsync และอื่น ๆ จะไม่ทำงานเพราะคุณไม่มีสิทธิ์เข้าถึงโฮสต์ DB โดยตรง

แม้ว่า RDS จะรัน PostgreSQL ที่ไม่มีใครเทียบ Amazon อาจไม่ต้องการอนุญาตให้คุณทำการสตรีม WAL ไปยัง RDS หรือนำเข้าสู่ RDS โดยใช้pg_basebackupเหตุผลด้านความปลอดภัย PostgreSQL ถือว่าไดเรกทอรีข้อมูลเป็นเนื้อหาที่เชื่อถือได้และหากคุณออกแบบฟังก์ชั่น 'LANGUAGE c' ที่ชาญฉลาดที่เชื่อมโยงการทำงานภายในหรือทำสิ่งอื่นที่ยุ่งยากคุณอาจสามารถใช้ประโยชน์จากเซิร์ฟเวอร์เพื่อให้เข้าถึงได้มากกว่าที่คุณควรจะมี . ดังนั้นอเมซอนจะไม่อนุญาตให้มี WAL ขาเข้าเร็ว ๆ นี้

พวกเขาสามารถรองรับการส่ง WAL ขาออก แต่ปัญหาข้างต้นเกี่ยวกับความเข้ากันได้ของรูปแบบอิสระในการเปลี่ยนแปลง ฯลฯ ยังคงมีผล


แต่คุณควรใช้เครื่องมือเช่น Londiste หรือ Bucardo


หาก RDS ไม่รองรับ PITR ปุ่มที่ระบุว่า "คืนสู่ช่วงเวลาที่เหมาะสม" เหมาะสำหรับอะไร?
Joe Love

1
RDS สนับสนุน PITR ภายใน RDS คุณไม่สามารถจัดส่ง WAL นอก RDS ฉันจะแก้ไขเพื่อให้คำตอบนั้นชัดเจนยิ่งขึ้นเนื่องจากฉันเห็นว่าคุณสามารถอ่านได้อย่างไรว่าคำพูด RDS ไม่มีการสนับสนุน PITR เลย
Craig Ringer

3

ตอนนี้สามารถทำได้โดยใช้การจำลองแบบเชิงตรรกะ: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html#PostgreSQL.html#PostgreSQL.Concepts.General.FeatureSupport.LogicalReplication


ขอขอบคุณ! ฉันมักพบเอกสาร "เป็นทางการ" ฝังลึกมากในเอกสารของ Amazon ฉันต้องค้นหาคำตอบอย่างคุณ
emmdee

1

การจำลองแบบโดยใช้ระบบที่ใช้ทริกเกอร์เช่น Londiste และ Bucardo เข้าและออกจาก RDS ได้รับการสนับสนุนตั้งแต่วันที่ 10 พฤศจิกายน 2014ต่อการตอบกระทู้ในฟอรัมนั้น

ประกาศที่นี่


1
มันมีประโยชน์ - แต่ไม่ใช่สิ่งเดียวกับที่ถูกพูดถึงที่นี่ พวกเขากำลังเพิ่มการสนับสนุนสำหรับ ues ของการจำลองแบบลอจิคัลตามทริกเกอร์เช่น Bucardo และ Londiste ด้วย RDS สิ่งนี้ไม่ได้เพิ่มการสนับสนุนสำหรับการสตรีมแบบล็อก "แบบฟิสิคัล" ตามที่ฮอตสแตนpg_basebackupฯลฯ ใช้ทำให้เป็นทางเลือกที่ดีที่สุดเนื่องจากความกังวลด้านความปลอดภัยทำให้พวกเขาสนับสนุนการจำลองแบบฟิสิคัลจริง ๆ
Craig Ringer

อ้าใช่ และขอขอบคุณสำหรับการแก้ไข ฉันได้รับคำถามนี้จากอีกคำถามหนึ่งที่มีการถามตัวเลือกการจำลองแบบมากกว่า - ควรสังเกตว่าคำถามนี้ถามเกี่ยวกับไฟล์ WAL โดยเฉพาะ
เชล slm

โปรดเพิ่มลิงก์ไปยังคำถามที่เกี่ยวข้องด้วย นั่นจะเป็นประโยชน์
Craig Ringer

คุณอยู่ที่นี่ - จะโพสต์คำตอบของฉันไว้ที่นี่ด้วย: stackoverflow.com/questions/20468230/…
michel-slm
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.