การสำรองข้อมูลเว็บเซิร์ฟเวอร์อย่างปลอดภัย: ประสบการณ์และบทเรียนจากความผิดพลาด
วันที่ฉันเข้าใจถึงความสำคัญของการ Backup
สี่ปีที่แล้ว ฉันจำได้อย่างชัดเจนว่าจะไม่ลืมได้ วันนั้นเป็นวันธรรมชาติที่งามสงบ แต่สำหรับฉันกลับเป็นวันที่เลวร้ายที่สุด ฮาร์ดไดรฟ์บนเซิร์ฟเวอร์หลักของบริษัทฉันเสียไปโดยไม่มีเตือน ไม่มี RAID ทำให้ข้อมูลลูกค้า 8 ปีหายวับไป ในช่วงสองชั่วโมง ฉันตระหนักว่าฉันเป็นผู้บริหารระบบที่ล้มเหลว
ตั้งแต่นั้นมา ฉันจึงตัดสินใจว่าการสำรองข้อมูลไม่ใช่งานที่ควรทำ แต่เป็นความรับผิดชอบที่สำคัญที่สุด วันนี้ฉันอยากแบ่งปันสิ่งที่ฉันได้เรียนรู้ เพราะฉันรู้ว่าคนอื่นๆ อาจกำลังอยู่ในสถานการณ์เดียวกับตัวฉันเมื่อนั้น
ความเข้าใจผิดที่ฉันเคยมีเกี่ยวกับ Backup
ความผิดพลาดแรกของฉันคือการคิดว่า "การสำรองข้อมูลหนึ่งครั้งต่อเดือน" ก็พอ นั่นเป็นสิ่งที่เอกสารแบบเก่าแก่แนะนำ แต่ในโลกของเทคโนโลยีปัจจุบัน เว็บไซต์มีการอัปเดตแหบแบบต่อเนื่อง ทรัพยากรเปลี่ยนแปลงทุกชั่วโมง ถ้าฉันสำรองเดือนละครั้ง ก็มีความเสี่ยงสูงที่จะสูญเสียข้อมูลสำคัญถึง 30 วัน
ความผิดพลาดที่สอง: ฉันเก็บไฟล์ backup ทั้งหมดไว้ในสถานที่เดียว ชั้นเก็บเอกสารของศูนย์ข้อมูลเดียวกัน หากศูนย์ข้อมูลนั้นเกิดเพลิงไหม้หรือเหตุธรรมชาติ ข้อมูลสำรองของฉันจะหายไปพร้อมกับข้อมูลต้นฉบับ นี่คือบทเรียนที่ร้ายแรงที่สุด
ความผิดพลาดที่สาม: ฉันไม่เคยทดสอบการ restore ข้อมูล ฉันเพียงแต่สมมติว่า backup ของฉันทำงานได้ดี แต่จริงๆ แล้วไฟล์บางไฟล์เสียหาย บางไฟล์ไม่สมบูรณ์ ฉันรู้เรื่องนี้เพราะตอนที่เสียข้อมูล ฉันพยายาม restore และพบว่าไฟล์ backup ของฉันบางส่วนใช้งานไม่ได้
กลยุทธ์ 3-2-1 ที่เปลี่ยนแปลงทุกอย่าง
หลังจากที่เสียข้อมูลไป ฉันค้นหาวิธีที่ดีที่สุดในการ backup ข้อมูล และฉันพบกลยุทธ์ที่เรียกว่า "3-2-1 backup strategy" ซึ่งกลายมาเป็นพื้นฐานของระบบของฉัน
คืออะไร: มี 3 สำเนาของข้อมูลของคุณ บนสื่อเก็บข้อมูล 2 ประเภท ที่อยู่ห่างไกลกัน 1 สถานที่ (อย่างน้อย)
ให้ฉันแยกความเข้าใจนี้ลงไป:
- 3 สำเนา: สำเนาแรกคือข้อมูลต้นฉบับบนเซิร์ฟเวอร์ของฉัน สำเนาที่สองคือ backup บนเครื่องจัดเก็บข้อมูลท้องถิ่น (local storage) สำเนาที่สามคือ backup บนที่จัดเก็บข้อมูลระยะไกล (cloud หรือศูนย์ข้อมูลอื่น)
- 2 ประเภทของสื่อ: ฉันไม่เก็บ backup ไว้บนเซิร์ฟเวอร์เพียงอย่างเดียว ฉันมี backup บนเครื่องจัดเก็บข้อมูล NAS ท้องถิ่น และ backup บนคลาวด์ การมีสื่อที่ต่างกันหมายความว่าถ้าปัญหาเกิดขึ้นกับสื่อแบบหนึ่ง ฉันยังมีสิ่งสำรอง
- 1 สถานที่ห่างไกล: นี่เป็นสิ่งที่เปลี่ยนแปลงชีวิตของฉัน ฉันเก็บ backup อย่างน้อยหนึ่งสำเนาไว้ที่คลาวด์หรือศูนย์ข้อมูลที่อยู่ห่างไกลจากสำนักงานของฉัน หากศูนย์ข้อมูลของฉันเกิดเพลิงไหม้ฉันยังมี backup ที่ปลอดภัย
การใช้งาน Backup ของฉันในปัจจุบัน
ระบบของฉันตอนนี้ทำงานดังนี้:
ทุกชั่วโมง (Hourly Backup): ฉันเก็บ snapshot ของฐานข้อมูล และไฟล์สำคัญทุกชั่วโมง บนพื้นที่จัดเก็บท้องถิ่น (NAS) การบ่อยครั้งนี้ช่วยให้ฉันสูญเสียข้อมูลไม่เกิน 60 นาที หากเกิดข้อผิดพลาด
ทุกวัน (Daily Backup): นอกเหนือจาก snapshot รายชั่วโมง ฉันเก็บ backup ที่สมบูรณ์เต็มไปยังพื้นที่จัดเก็บคลาวด์ ทำการนี้ทุกค่ำคืน เวลา 2 โมงเช้า เมื่อการรับส่งข้อมูลน้อยที่สุด
ทุกสัปดาห์ (Weekly Backup): ฉันสร้าง backup ขนาดใหญ่ที่บีบอัดแล้วเก็บไว้ในสถานที่ต่างกัน 2 แห่ง บ้านเก็บเอกสารทั่วไป และศูนย์ข้อมูลคลาวด์
ความสำคัญคือ: ไม่ใช่ว่าฉันทำ backup เพราะฉันกังวล แต่เพราะฉันเชื่อว่าข้อมูลของลูกค้ามีค่า และฉันรับผิดชอบต่อข้อมูลนั้น
เครื่องมือและเทคโนโลยีที่ฉันใช้
สำหรับระบบท้องถิ่น ฉันใช้ NAS (Network Attached Storage) รุ่นที่มีการสำรองข้อมูลแบบอัตโนมัติ อุปกรณ์นี้ราคาไม่แพงมากนัก แต่มีคุณค่ามหาศาล ฉันตั้งค่าให้มันสำรองข้อมูลตามตารางเวลาโดยอัตโนมัติ
สำหรับการสำรองข้อมูลระยะไกล ฉันใช้ประมาณสามแนวทาง: S3 (Amazon Simple Storage Service) สำหรับการเก็บแบบช้า, ระบบ rsync ด้วยตัวอักษร (scripted rsync) ไปยังศูนย์ข้อมูลอีกแห่ง, และ Backblaze B2 สำหรับการสำรองข้อมูลที่เหมาะสมบริเวณเดียว
ฉันเขียนสคริปต์ shell ที่จัดการการ backup โดยอัตโนมัติ สคริปต์นี้จะตรวจสอบว่าการสำรองข้อมูลสำเร็จหรือไม่ และส่งการแจ้งให้เตือนฉันหากมีอะไรผิดปกติ
การทดสอบ Backup: บทเรียนที่ยากที่สุด
หลังจากตั้งค่าระบบ backup ของฉันแล้ว ฉันยังคงทำบ้านเลมากที่สุด: ไม่ทดสอบว่ามันทำงานได้จริงหรือไม่
ฉันจำได้ว่าครั้งแรกที่ฉันทดสอบการ restore ข้อมูล มีประมาณ 5 ปีที่ผ่านมา ฉันทำ backup แต่ไม่เคยทดสอบมันจริงๆ เมื่อฉันพยายาม restore ข้อมูล บางไฟล์เสียหายจากการสำรองข้อมูลที่ไม่สมบูรณ์ ตั้งแต่นั้นมา ฉันทดสอบการ restore ทุกเดือน
ต่อไปนี้คือที่ฉันทดสอบการ restore:
- ทดลอง restore ไฟล์เดี่ยวจากสำเนา backup ต่างๆ
- ทดลอง restore ฐานข้อมูลเต็มไปยังเซิร์ฟเวอร์ทดสอบ
- ทดลอง restore ไฟล์ที่มีอายุ 1 เดือน 3 เดือน และ 6 เดือน
- เก็บบันทึกและเวลาของการ restore เพื่อวัดว่านานเท่าไหร่ที่ฉันต้องการในการกู้คืนข้อมูล
ตัว
แสดงความคิดเห็น