2 คะแนน โดย GN⁺ 2024-01-19 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

วิธีการย้ายฐานข้อมูล 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 ความคิดเห็น

 
GN⁺ 2024-01-19
ความคิดเห็นจาก Hacker News
  • มีการตั้งข้อสงสัยว่าทำไมรัฐบาลจึงใช้ AWS โดยมองว่าการสร้างคลาวด์สำหรับภาครัฐหรือเลือกแนวทาง on-prem อาจช่วยลดการสิ้นเปลืองภาษีในระยะยาวได้

    "สงสัยว่าทำไมรัฐบาลถึงใช้ AWS การสร้างคลาวด์สำหรับภาครัฐหรือใช้แนวทาง on-prem น่าจะช่วยประหยัดภาษีได้ในระยะยาว"

  • มีการแชร์ประสบการณ์ว่าสามารถทำ database migration ได้สำเร็จโดยมี downtime ราว 20 วินาที ด้วยการใช้ AWS RDS Blue-Green Deployment

    "แชร์ประสบการณ์การทำ database migration สำเร็จด้วย downtime ประมาณ 20 วินาทีผ่าน AWS RDS Blue-Green Deployment"

  • มีการกล่าวถึงหลายวิธีในการหยุด PostgreSQL query ชั่วคราว และอธิบายว่าสามารถลด downtime ได้ด้วยการหน่วง query ไว้จนกว่า replication จะตามทัน

    "สามารถลด downtime ได้ด้วยการหยุด PostgreSQL query ชั่วคราวและหน่วงไว้จนกว่า replication จะตามทัน"

  • มีการอธิบายกระบวนการย้ายฐานข้อมูล PostgreSQL ที่โฮสต์เองจากเวอร์ชัน 12 ไป 16 และแชร์ว่าเกิด downtime ประมาณ 30 นาทีจากปัญหาที่ไม่คาดคิด

    "เกิด downtime ประมาณ 30 นาทีจากปัญหาที่ไม่คาดคิดระหว่างการย้ายฐานข้อมูล PostgreSQL จากเวอร์ชัน 12 ไป 16"

  • มีการระบุว่าการใช้ AWS Database Migration Service และสลับรายการ DNS โดยยอมรับ downtime 11 วินาที เป็นวิธีที่ช่วยหลีกเลี่ยงความซับซ้อน

    "การใช้ AWS Database Migration Service และสลับรายการ DNS โดยยอมรับ downtime 11 วินาที เป็นวิธีหลีกเลี่ยงความซับซ้อน"

  • มีการชี้ว่าคำสั่ง query ที่ใช้เวลารันนานเป็นศัตรูของการ migration แบบ downtime ต่ำ และอธิบายถึงความยากในการจัดการกับ query ประเภทนี้

    "query ที่รันนานเป็นสาเหตุของความยากในการทำ migration แบบ downtime ต่ำ"

  • มีการแชร์กระบวนการ migration จาก PostgreSQL 14 ไป 16 และบอกว่าครั้งหน้ามีแผนจะใช้ AWS Blue-Green Deployment เพื่อหลีกเลี่ยง downtime

    "แชร์กระบวนการ migration จาก PostgreSQL 14 ไป 16 และวางแผนจะใช้ AWS Blue-Green Deployment ในครั้งหน้าเพื่อหลีกเลี่ยง downtime"

  • มีการอธิบายวิธีที่สคริปต์ migration ฐานข้อมูลใช้ DNS record ของ AWS Route53 เพื่ออัปเดตค่าน้ำหนัก DNS และรอให้ TTL 1 วินาทีหมดอายุ

    "อธิบายการใช้ DNS record ของ AWS Route53 ให้สคริปต์ migration ฐานข้อมูลอัปเดตค่าน้ำหนัก DNS และรอ TTL หมดอายุ"

  • มีการพูดติดตลกว่า Amazon น่าจะออกผลิตภัณฑ์ชื่อ 'government-as-a-service'

    "ล้อเล่นว่า Amazon น่าจะออกผลิตภัณฑ์ชื่อ 'government-as-a-service'"

  • มีการแชร์ประสบการณ์ใช้ AWS DMS เพื่อย้าย dataset จาก AWS RDS MySQL ไปยัง RDS PostgreSQL และไม่แนะนำให้ใช้เครื่องมือแปลง schema

    "แชร์ประสบการณ์ย้าย dataset จาก AWS RDS MySQL ไปยัง RDS PostgreSQL ด้วย AWS DMS และไม่แนะนำเครื่องมือแปลง schema"