ย้ายฐานข้อมูล PostgreSQL เสร็จด้วย downtime เพียง 11 วินาที
(gds.blog.gov.uk)วิธีการย้ายฐานข้อมูล PostgreSQL
- GOV.UK Notify กำลังย้ายโครงสร้างพื้นฐานทั้งหมดไปยังบัญชี AWS ของตนเอง เนื่องจาก PaaS ที่ใช้อยู่ในปัจจุบันกำลังจะยุติการให้บริการ
- บทความนี้อธิบายวิธีที่พวกเขาย้ายฐานข้อมูล PostgreSQL โดยให้มี downtime น้อยที่สุด
การย้ายฐานข้อมูล
- ระบบใช้งานฐานข้อมูล AWS RDS PostgreSQL ที่ PaaS จัดเตรียมไว้ และจำเป็นต้องย้ายไปยังฐานข้อมูลใหม่ในบัญชี AWS ของตนเอง
- ความท้าทายหลักคือการตั้งค่าฐานข้อมูล PostgreSQL ใหม่ และทำให้ทุกแอปสื่อสารกับฐานข้อมูลใหม่นี้
ข้อมูลเพิ่มเติมเกี่ยวกับฐานข้อมูลต้นทาง
- ฐานข้อมูลต้นทางมีขนาดประมาณ 400GB มี 130 ล้านแถว 85 ตาราง 185 ดัชนี และ 120 foreign key
- ในวันทำงานจะมีการ insert หรือ update ราว 1,000 รายการต่อวินาที และ GOV.UK Notify ส่งการแจ้งเตือนสำคัญที่ต้องตรงเวลาเป็นหลักหลายล้านรายการต่อวัน
AWS Database Migration Service
- ใช้ AWS Database Migration Service (DMS) เพื่อถ่ายโอนข้อมูลจากฐานข้อมูลต้นทางไปยังฐานข้อมูลปลายทาง
- DMS สามารถคัดลอกข้อมูลทั้งหมดจนถึงช่วงเวลาหนึ่งผ่านงานแบบ 'full load' และในโหมด replication จะทำให้ทุกธุรกรรมใหม่จากฐานข้อมูลต้นทางถูกสะท้อนไปยังฐานข้อมูลปลายทาง
กระบวนการย้ายฐานข้อมูล
การตั้งค่าอินสแตนซ์ DMS
- สร้างอินสแตนซ์ DMS ในบัญชี AWS ต้นทาง และมอบข้อมูลรับรอง PostgreSQL ที่สามารถเข้าถึงได้ทั้งฐานข้อมูลต้นทางและปลายทาง
การตั้งค่าฐานข้อมูลปลายทาง
- สร้างอินสแตนซ์ RDS ปลายทางในบัญชี AWS ของตนเอง และอัปเกรด PostgreSQL เป็นเวอร์ชัน 15
- ใช้
pg_dumpเพื่อดัมพ์สคีมาของฐานข้อมูลต้นทาง และนำคำประกาศตารางไปใช้กับฐานข้อมูลปลายทาง
Full load
- หลังจากสร้างตารางในฐานข้อมูลปลายทางแล้ว ได้เริ่มงาน DMS แบบ full load และเสร็จสิ้นในเวลาประมาณ 6 ชั่วโมง
- หลังจากงาน full load เสร็จแล้ว จึงเพิ่มดัชนีและข้อจำกัดของคีย์
Replication
- หลังจากงาน full load เสร็จแล้ว ได้เริ่มงาน DMS แบบ replication ต่อเนื่อง (change data capture) เพื่อซิงก์ฐานข้อมูลต้นทางกับฐานข้อมูลปลายทาง
การเตรียมย้ายทราฟฟิก
- วางแผนกระบวนการให้แอปหยุดสื่อสารกับฐานข้อมูลต้นทางและหันไปสื่อสารกับฐานข้อมูลปลายทางแทน
การหยุดทราฟฟิกไปยังฐานข้อมูลต้นทาง
- ใช้สคริปต์เพื่อหยุดทราฟฟิกทั้งหมดที่ไปยังฐานข้อมูลต้นทาง
การยืนยันการ replication
- ตรวจสอบว่าฐานข้อมูลปลายทางซิงก์สมบูรณ์แล้วหรือไม่
การสลับทราฟฟิกอย่างราบรื่น
- ส่งต่อข้อมูลตำแหน่ง ชื่อผู้ใช้ และรหัสผ่านที่แอปต้องใช้ในการเชื่อมต่อฐานข้อมูลผ่านตัวแปรสภาพแวดล้อม และสลับฐานข้อมูลอย่างรวดเร็วผ่านการเปลี่ยน DNS
สิ่งที่เกิดขึ้นในวันย้ายระบบ
- รันสคริปต์ย้ายระบบได้สำเร็จ ทำให้แอปหยุดสื่อสารกับฐานข้อมูลต้นทางและเริ่มสื่อสารกับฐานข้อมูลปลายทางใหม่
- ระหว่างการย้ายระบบเกิด downtime สั้น ๆ ประมาณ 11 วินาที
บทเรียนที่ได้รับ
- เหตุผลที่เลือกใช้ DMS คือ GOV.UK PaaS รองรับได้ดี และยังได้รับการสนับสนุนจาก AWS ด้วย
- หากต้องทำการย้ายฐานข้อมูลระหว่าง PostgreSQL อีกในอนาคต พวกเขาตั้งใจว่าจะใช้เวลามากขึ้นในการลองเครื่องมืออื่น เช่น pglogical
ขั้นตอนถัดไปของการย้าย GOV.UK Notify ไปยัง AWS
- หลังจากย้ายฐานข้อมูลเสร็จแล้ว มีแผนจะย้ายแอปไปยัง AWS Elastic Container Service (ECS)
GN⁺ ความเห็น:
- ประเด็นสำคัญที่สุดของบทความนี้คือทีม GOV.UK Notify ย้ายฐานข้อมูล PostgreSQL ได้สำเร็จโดยใช้ AWS Database Migration Service (DMS)
- บทความนี้ให้แนวทางที่มีประโยชน์จากกรณีใช้งานจริงสำหรับผู้เชี่ยวชาญด้านเทคนิคที่กำลังวางแผนย้ายฐานข้อมูล
- อีกทั้งยังให้มุมมองเกี่ยวกับวิธีลด downtime ระหว่างการย้ายระบบและกลยุทธ์ในการรักษาความสอดคล้องของข้อมูล ซึ่งอาจเป็นประโยชน์ต่อองค์กรหรือบุคคลอื่นที่เผชิญสถานการณ์คล้ายกัน
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
มีการตั้งข้อสงสัยว่าทำไมรัฐบาลจึงใช้ AWS โดยมองว่าการสร้างคลาวด์สำหรับภาครัฐหรือเลือกแนวทาง on-prem อาจช่วยลดการสิ้นเปลืองภาษีในระยะยาวได้
มีการแชร์ประสบการณ์ว่าสามารถทำ database migration ได้สำเร็จโดยมี downtime ราว 20 วินาที ด้วยการใช้ AWS RDS Blue-Green Deployment
มีการกล่าวถึงหลายวิธีในการหยุด PostgreSQL query ชั่วคราว และอธิบายว่าสามารถลด downtime ได้ด้วยการหน่วง query ไว้จนกว่า replication จะตามทัน
มีการอธิบายกระบวนการย้ายฐานข้อมูล PostgreSQL ที่โฮสต์เองจากเวอร์ชัน 12 ไป 16 และแชร์ว่าเกิด downtime ประมาณ 30 นาทีจากปัญหาที่ไม่คาดคิด
มีการระบุว่าการใช้ AWS Database Migration Service และสลับรายการ DNS โดยยอมรับ downtime 11 วินาที เป็นวิธีที่ช่วยหลีกเลี่ยงความซับซ้อน
มีการชี้ว่าคำสั่ง query ที่ใช้เวลารันนานเป็นศัตรูของการ migration แบบ downtime ต่ำ และอธิบายถึงความยากในการจัดการกับ query ประเภทนี้
มีการแชร์กระบวนการ migration จาก PostgreSQL 14 ไป 16 และบอกว่าครั้งหน้ามีแผนจะใช้ AWS Blue-Green Deployment เพื่อหลีกเลี่ยง downtime
มีการอธิบายวิธีที่สคริปต์ migration ฐานข้อมูลใช้ DNS record ของ AWS Route53 เพื่ออัปเดตค่าน้ำหนัก DNS และรอให้ TTL 1 วินาทีหมดอายุ
มีการพูดติดตลกว่า Amazon น่าจะออกผลิตภัณฑ์ชื่อ 'government-as-a-service'
มีการแชร์ประสบการณ์ใช้ AWS DMS เพื่อย้าย dataset จาก AWS RDS MySQL ไปยัง RDS PostgreSQL และไม่แนะนำให้ใช้เครื่องมือแปลง schema