ฉันจะอัพเกรดฐานข้อมูล postgres AWS RDS เวอร์ชันหลักได้อย่างไร


13

เช้านี้ฉันมีส่วนร่วมในการอัพเกรดฐานข้อมูล PostgreSQL บน AWS RDS เราต้องการย้ายจากรุ่น 9.3.3 ไปเป็นรุ่น 9.4.4 เราได้ "ทดสอบ" การอัปเกรดบนฐานข้อมูลการแสดงละคร แต่ฐานข้อมูลการแสดงละครมีขนาดเล็กกว่ามากและไม่ใช้ Multi-AZ ปรากฎว่าการทดสอบนี้ค่อนข้างไม่เพียงพอ

ฐานข้อมูลการผลิตของเราใช้ Multi-AZ เราได้ทำการอัปเกรดรุ่นรองในอดีตและในกรณีเหล่านั้น RDS จะอัปเกรดสแตนด์บายก่อนแล้วจึงเลื่อนระดับเป็นหลัก ดังนั้นการหยุดทำงานเพียงครั้งเดียวที่เกิดขึ้นคือ ~ 60 วินาทีในระหว่างการล้มเหลว

เราสันนิษฐานว่าสิ่งเดียวกันจะเกิดขึ้นสำหรับการอัปเกรดเวอร์ชันหลัก แต่โอ้ว่าเราผิดอย่างไร

รายละเอียดบางอย่างเกี่ยวกับการตั้งค่าของเรา:

  • db.m3.large
  • IOPS ที่จัดสรร (SSD)
  • ที่เก็บข้อมูล 300 GB ซึ่งมีการใช้งาน 139 GB
  • เรามีการอัปเกรด RDS OS ที่โดดเด่นเราต้องการแบทช์ด้วยการอัพเกรดนี้เพื่อลดเวลาหยุดทำงาน

นี่คือเหตุการณ์ RDS ที่ถูกบันทึกไว้ในขณะที่เราทำการอัพเกรด:

ป้อนคำอธิบายรูปภาพที่นี่

ซีพียูฐานข้อมูลถูกขยายให้ใหญ่สุดระหว่างประมาณ 08:44 ถึง 10:27 เวลานี้ดูเหมือนว่าจะถูกครอบครองโดย RDS โดยถ่ายสแน็ปช็อตก่อนและหลังอัพเกรด

เอกสาร AWSไม่ต้องเตือนผลกระทบดังกล่าวแม้ว่าจากการอ่านพวกเขามันเป็นที่ชัดเจนว่าข้อบกพร่องที่เห็นได้ชัดในแนวทางของเราคือการที่เราไม่ได้สร้างสำเนาของการผลิตฐานข้อมูลในการติดตั้ง Multi-AZ และพยายามที่จะอัพเกรดเป็น ทดลองใช้งาน

โดยทั่วไปมันน่าหงุดหงิดมากเพราะ RDS ให้ข้อมูลเพียงเล็กน้อยกับเราเกี่ยวกับสิ่งที่กำลังทำอยู่และใช้เวลานานเท่าใด (อีกครั้งการทดลองใช้งานจะช่วยได้ ... )

นอกจากนั้นเราต้องการเรียนรู้จากเหตุการณ์นี้ดังนั้นนี่คือคำถามของเรา:

  • สิ่งนี้เป็นเรื่องปกติหรือไม่เมื่อทำการอัปเกรดเวอร์ชันหลักใน RDS
  • หากเราต้องการอัพเกรดเวอร์ชั่นใหญ่ในอนาคตโดยมีเวลาหยุดทำงานน้อยที่สุดเราจะทำอย่างไร? มีวิธีที่ชาญฉลาดในการใช้การจำลองแบบเพื่อให้ราบรื่นมากขึ้นหรือไม่?

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

คำตอบ:


4

นี่เป็นคำถามที่ดี
บางครั้งการทำงานในสภาพแวดล้อมคลาวด์นั้นยุ่งยาก

คุณสามารถใช้pg_dumpall -f dump.sqlคำสั่งที่จะถ่ายโอนฐานข้อมูลทั้งหมดของคุณไปยังรูปแบบไฟล์ SQL ในแบบที่คุณสามารถสร้างมันใหม่จากศูนย์ชี้ไปที่ปลายทางอื่น ใช้psql -h endpoint-host.com.br -f dump.sqlสำหรับระยะสั้น

แต่หากต้องการทำเช่นนั้นคุณจะต้องใช้อินสแตนซ์ EC2 บางตัวที่มีพื้นที่เหมาะสมในดิสก์ (เพื่อให้พอดีกับฐานข้อมูลของคุณ) นอกจากนี้คุณจะต้องติดตั้งyum install postgresql94.x86_64เพื่อให้สามารถเรียกใช้คำสั่ง dump และ restore

ดูตัวอย่างที่PG Dumpall DOC

โปรดจำไว้ว่าเพื่อรักษาความสมบูรณ์ของข้อมูลของคุณขอแนะนำ (บางกรณีจะมีผลบังคับใช้) ว่าคุณปิดระบบที่เชื่อมต่อกับฐานข้อมูลในช่วงเวลาการบำรุงรักษานี้

นอกจากนี้หากคุณต้องการเร่งความเร็วให้ลองใช้pg_dumpแทนpg_dumpallโดยใช้ประโยชน์จาก-j njobsพารามิเตอร์parallelism ( ) เมื่อคุณกำหนดจำนวนของ CPU ที่เกี่ยวข้องในกระบวนการเช่น-j 8จะใช้จนถึง 8 CPU โดยค่าเริ่มต้นลักษณะการทำงานของpg_dumpallหรือpg_dumpใช้งานเพียง 1 ข้อได้เปรียบเพียงอย่างเดียวโดยใช้pg_dumpแทนpg_dumpallคือคุณจะต้องเรียกใช้คำสั่งสำหรับแต่ละฐานข้อมูลที่คุณมีและยังถ่ายโอนข้อมูลแยกต่างหาก ROLES (กลุ่มและผู้ใช้)

ดูตัวอย่างที่PG การถ่ายโอนข้อมูล DOCและPG Restore DOC


ในการใช้คุณสมบัติแบบขนานคุณจะต้องใช้:pg_dump -h host -U user -W pass -Fc -f output_file.dmp -j 8 database_name
Vinnix

... และเพื่อเรียกคืนโดยใช้การขนาน:pg_restore -h host -d database_name -U user -W pass -C -Fc -j 8 output_file.dmp
Vinnix

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