มีบางสิ่งที่น่าสนใจเกี่ยวกับคำถามนี้ - โดยเฉพาะเกี่ยวกับแนวคิดเรื่องการหยุดทำงาน ส่วนหนึ่งของแนวคิดคือหากแอปพลิเคชันมีความอ่อนไหวต่อการหยุดทำงานดังนั้นเวลากู้คืนจะต้องถูกรวมเข้าด้วยกัน (ในฐานะที่เป็นอาร์กิวเมนต์ที่รุนแรงไม่มีการสำรองข้อมูลที่ไม่จำเป็นต้องหยุดทำงานเว้นแต่ว่าคุณต้องการสำรองข้อมูลเหล่านั้น )
เล็กน้อยเกี่ยวกับ EBS
ปริมาณและสแน็ปช็อต EBS ทำงานที่ระดับบล็อกซึ่งเป็นผลมาจากการอนุญาตให้ใช้สแน็ปช็อตในขณะที่อินสแตนซ์กำลังทำงานอยู่แม้ว่าจะใช้โวลุ่ม EBS ก็ตาม อย่างไรก็ตามข้อมูลที่อยู่บนดิสก์จริง ๆ (เช่นไม่ได้อยู่ในแคชไฟล์) จะรวมอยู่ในภาพรวม มันเป็นเหตุผลหลังที่ก่อให้เกิดความคิดในภาพรวมที่สอดคล้องกัน
- วิธีที่แนะนำคือการถอดวอลลุ่ม, สแนปช็อต, และใส่กลับเข้าไปใหม่ - มักจะไม่สามารถใช้งานได้จริง
- ตัวเลือกที่ดีที่สุดถัดไปคือการล้างแคชการเขียนลงดิสก์การแช่แข็งระบบไฟล์และการถ่ายภาพสแนปชอตของคุณ
จุดที่น่าสนใจที่นี่คือในทั้งสองกรณีข้างต้นคุณไม่จำเป็นต้องรอให้สแน็ปช็อตเสร็จสิ้นเพื่อติดตั้งใหม่ / ยกเลิกการตรึงและดำเนินการเขียนไปยังดิสก์ - เมื่อสแนปชอตเริ่มต้นข้อมูลของคุณจะสอดคล้องกับเวลานั้น โดยทั่วไปจะใช้เวลาเพียงไม่กี่วินาทีในระหว่างที่ดิสก์ของคุณถูกล็อคการเขียน นอกจากนี้เนื่องจากฐานข้อมูลส่วนใหญ่จัดโครงสร้างไฟล์ไว้ในดิสก์ในลักษณะที่เหมาะสม - มีโอกาสดีที่เม็ดมีดจะมีผลต่อบล็อกที่มีอยู่น้อยที่สุดซึ่งช่วยลดข้อมูลที่เพิ่มลงในสแน็ปช็อต
พิจารณาถึงจุดที่ทำการสำรองข้อมูล
ไดรฟ์ข้อมูล EBS ได้รับการจำลองแบบแล้วภายในโซนความพร้อมใช้งานดังนั้นจึงมีการสร้างระดับความซ้ำซ้อนหากอินสแตนซ์ของคุณสิ้นสุดลงคุณสามารถแนบโวลุ่ม EBS เข้ากับอินสแตนซ์ใหม่และ (หลังจากผ่านการขาดความมั่นคง) ออกไป ในเรื่องนี้ทำให้ไดรฟ์ข้อมูล EBS เหมือนภาพรวมที่ไม่สอดคล้องกันโดยที่คุณสามารถเข้าถึงได้ ที่กล่าวว่าผู้ใช้ EC2 ส่วนใหญ่อาจเรียกคืนความล้มเหลวที่ลดลงของปริมาณ EBS ตั้งแต่ต้นปี 2011 - ปริมาณไม่สามารถเข้าถึงได้เป็นเวลาหลายวันและผู้ใช้บางคนสูญเสียข้อมูลเช่นกัน
RAID1
หากคุณพยายามป้องกันความล้มเหลวของดิสก์ EBS (เกิดขึ้น) คุณอาจพิจารณาตั้งค่า RAID1 เนื่องจากโวลุ่ม EBS เป็นอุปกรณ์บล็อกคุณสามารถใช้ mdadm เพื่อตั้งค่าในการกำหนดค่าที่คุณต้องการได้อย่างง่ายดาย หากหนึ่งในไดรฟ์ข้อมูล EBS ของคุณไม่ทำงานตามสเป็คมันเป็นเรื่องง่ายที่จะล้มเหลวด้วยตนเอง (และแทนที่ด้วยโวลุ่ม EBS อื่น) แน่นอนว่านี่คือข้อเสีย - เพิ่มเวลาสำหรับการเขียนทุกครั้งความไวต่อการเปลี่ยนแปลงมากขึ้นค่าใช้จ่าย I / O เพิ่มขึ้นสองเท่า (monetariliy ไม่ใช่การทำงานที่ชาญฉลาด) ไม่มีการป้องกันความผิดพลาด AWS ที่แพร่หลายมากขึ้นในปีที่แล้ว การไม่สามารถแยกโวลุ่ม EBS ที่อยู่ในสถานะล็อค) และแน่นอนสถานะที่ไม่สอดคล้องของดิสก์ในความล้มเหลว
S3FS
ตัวเลือกสำหรับบางแอปพลิเคชั่น (ไม่แน่นอนสำหรับฐานข้อมูล) คือการเมานต์ S3 เป็นระบบไฟล์โลคัล (เช่นผ่าน s3fs) สิ่งนี้ช้าการขาดคุณสมบัติบางอย่างที่คาดหวังจากระบบไฟล์และอาจไม่ทำงานตามที่คาดไว้ (ความสอดคล้องในที่สุด) ที่กล่าวมาเพื่อวัตถุประสงค์ง่ายๆเช่นการทำให้ไฟล์ที่อัปโหลดพร้อมใช้งานในอินสแตนซ์อาจมีข้อดี เห็นได้ชัดว่ามันไม่ได้มีไว้สำหรับสิ่งที่ต้องการประสิทธิภาพการอ่าน / เขียนที่ดี
MySQL bin-log
อีกทางเลือกหนึ่งสำหรับ MySQL โดยเฉพาะคือการใช้งาน bin-log คุณสามารถตั้งค่าโวลุ่ม EBS ที่สองที่จะเก็บ bin-log ของคุณ (เพื่อลดผลกระทบของการเพิ่มการเขียนลงในฐานข้อมูลของคุณ) และใช้ร่วมกับฐานข้อมูลที่คุณทิ้ง คุณอาจสามารถทำสิ่งนี้กับ s3fs ได้ซึ่งจริงๆแล้วอาจมีข้อดีหากประสิทธิภาพการทำงานลดลง (rsync น่าจะดีกว่าการลองใช้ s3fs โดยตรงและคุณจะต้องบีบอัดสิ่งที่คุณทำได้)
แม้ว่าอีกครั้งเรากลับมาที่ความคิดของวัตถุประสงค์ พิจารณาสิ่งที่จะเกิดขึ้นกับคำแนะนำข้างต้น:
- EBS ไม่สามารถเข้าถึงได้:
- RAID1 - ไร้ประโยชน์เนื่องจากคุณไม่สามารถเข้าถึงข้อมูลได้
- bin-log - ไร้ประโยชน์เว้นแต่ว่าคุณจะส่งออกไปยัง S3 - อาจเป็นความล่าช้าแม้ว่าคุณจะทำเช่นนั้น
- อินสแตนซ์สิ้นสุดลงโดยไม่คาดหมาย:
- RAID1 - ดิสก์ของคุณพร้อมใช้งาน แต่ไม่สอดคล้องกันฐานข้อมูลของคุณอาจกู้คืนจากความไม่สอดคล้องของตัวเอง
- bin-log - ข้อมูลของคุณควรสามารถเข้าถึงได้แม้ว่าคุณอาจจำเป็นต้องตรวจสอบเหตุการณ์ล่าสุด
- บางคนเรียกใช้ DROP DATABASE เป็น root:
- RAID1 - คุณมีสำเนาที่สมบูรณ์แบบของฐานข้อมูลที่ไม่มีอยู่สองชุด
- bin-log - คุณควรจะสามารถเล่นซ้ำเหตุการณ์ก่อนถึงคำสั่งดังนั้นคุณควรจะ ok
ดังนั้น RAID1 ส่วนใหญ่ก็ไร้ประโยชน์และ bin-log ใช้เวลานานเกินไป - ทั้งคู่อาจมีข้อดีภายใต้สถานการณ์บางอย่าง แต่อยู่ไกลจากการสำรองข้อมูลความคิด
ภาพรวม
เป็นสิ่งสำคัญที่จะต้องทราบว่าสแน็ปช็อตเป็นส่วนต่างและเก็บเฉพาะบล็อกจริงที่มีข้อมูล (และถูกบีบอัด) แตกต่างจากปริมาณ EBS ที่หากคุณมีปริมาณ 20GB แต่ใช้เพียง 1GB คุณจะยังคงถูกเรียกเก็บเงินสำหรับพื้นที่เก็บข้อมูล 'จัดสรร' (20GB) ด้วยสแนปชอตคุณจะถูกเรียกเก็บเงินสำหรับสิ่งที่คุณใช้ หากไม่มีการเปลี่ยนแปลงข้อมูลระหว่างสแน็ปช็อตจะไม่มีการเรียกเก็บเงิน (ในทางทฤษฎี) (ภาพรวมจะถูกเรียกเก็บเงินสำหรับ PUTS / GETS และที่เก็บข้อมูลที่ใช้แล้ว)
นอกจากนี้ฉันขอแนะนำอย่างยิ่งว่าข้อมูลแอปพลิเคชันของคุณ (รวมถึงฐานข้อมูล) จะไม่ถูกจัดเก็บไว้ในไดรฟ์ข้อมูลรูทของคุณ (ซึ่งคุณอาจตั้งค่าไว้แล้ว) หนึ่งในข้อดีคือหวังว่าปริมาตรรูทของคุณจะเห็นการเปลี่ยนแปลงน้อยที่สุดซึ่งหมายความว่าสแน็ปช็อตของมันอาจเกิดขึ้นน้อยลง (หรือมีการเปลี่ยนแปลงขั้นต่ำ) ลดต้นทุนและใช้งานง่าย
นอกจากนี้ยังเกี่ยวข้องกับการพูดถึงว่าคุณสามารถลบสแนปชอตเก่าได้ตลอดเวลา - แม้ว่าสแนปชอตจะต่างกัน แต่จะไม่ส่งผลต่อสแนปชอตอื่น ที่กล่าวว่าแต่ละบล็อกที่จัดสรรให้กับสแน็ปช็อตจะไม่ถูกยกเลิกจนกว่าจะไม่มีสแนปชอตที่ยังคงอ้างอิงบล็อกนั้นอยู่
ปัญหาของการทิ้งเป็นครั้งคราวคือช่วงแรกระหว่างการทิ้ง (อาจแก้ไขได้โดยใช้ bin-log ของ MySQL) และความยากในการกู้คืน ต้องใช้เวลาในการนำเข้าการถ่ายโอนข้อมูลขนาดใหญ่และเล่นซ้ำเหตุการณ์ทั้งหมดจาก bin-log นอกจากนี้การสร้างดัมพ์ไม่ได้เกิดจากประสิทธิภาพการทำงาน เนื้อหาที่ทิ้งเช่นนั้นน่าจะต้องการพื้นที่เก็บข้อมูลมากกว่าสแนปชอต การตั้งค่าไดรฟ์ข้อมูล EBS สำหรับฐานข้อมูลและสแนปชอตที่น่าจะเป็นที่ต้องการในเกือบทุกเรื่อง (ที่กล่าวว่าการสแน็ปช็อตจะมีความเกี่ยวข้องเล็กน้อยกับประสิทธิภาพ)
ความสวยงามของสแน็ปช็อตและโวลุ่ม EBS คือสามารถใช้กับอินสแตนซ์อื่นได้ หากอินสแตนซ์ของคุณล้มเหลวในการบูตคุณสามารถแนบโวลุ่มรูตไปยังอินสแตนซ์อื่นเพื่อวินิจฉัยและแก้ไขปัญหา - หรือเพียงแค่คัดลอกข้อมูลของคุณออก - และสามารถสลับโวลุ่มรูตด้วยการหยุดทำงานเพียงไม่กี่นาที ปริมาณรูท, แนบโวลุ่มใหม่, เริ่มต้นอินสแตนซ์) แนวคิดเดียวกันนี้นำไปใช้กับการมีข้อมูลของคุณในปริมาณ EBS ที่สอง โดยพื้นฐานแล้วคุณเพียงแค่หมุนอินสแตนซ์ใหม่จาก AMI ที่กำหนดเองของคุณและแนบโวลุ่ม EBS ปัจจุบันของคุณเข้ากับมัน - ซึ่งจะช่วยลดเวลาหยุดทำงาน
(อาจทำให้เกิดข้อโต้แย้ง (และฉันอาจจะไม่แนะนำ) ที่คุณสามารถตั้งค่า MySQL สองชุดบนเซิร์ฟเวอร์เดียวกัน (Master-Slave) โดยใช้ EBS สองเล่มแล้วปิดการทำงาน Slave ของคุณเพื่อถ่ายภาพของมัน ปริมาณ EBS - จะสอดคล้องกันโดยไม่มีการหยุดทำงาน - แต่ต้นทุนด้านประสิทธิภาพนั้นไม่คุ้มกับมัน)
AWS มีการปรับอัตโนมัติ - ซึ่งจะสามารถรักษาอินสแตนซ์จำนวนคงที่ (แม้ว่าหมายเลขนั้นคือ 1) - คุณจะปรับใช้จากสแนปชอตอย่างไรก็ตาม - ดังนั้นหากสแนปชอตของคุณไม่มีประโยชน์ .
อีกสองสามคะแนน - คุณสามารถปรับใช้อินสแตนซ์ได้มากเท่าที่คุณต้องการจากสแน็ปช็อตเดียว (ไม่เหมือนกับไดรฟ์ข้อมูล EBS ซึ่งสามารถแนบกับอินสแตนซ์เดียวในเวลาที่กำหนด) นอกจากนี้ปริมาณ EBS จะถูก จำกัด ให้ใช้ภายในโซนความพร้อมใช้งานในขณะที่สามารถใช้สแนปชอตภายในภูมิภาค
หากเซิร์ฟเวอร์ของคุณหยุดทำงานคุณสามารถเปิดสแนปชอตใหม่โดยใช้สแน็ปช็อตสุดท้ายโดยเฉพาะอย่างยิ่งถ้าคุณแยกปริมาณรูทจากข้อมูลของคุณการอัปเดตที่ไม่ดีควรส่งผลให้เกิดการหยุดทำงานน้อยที่สุด ถ่ายโอนปริมาณ EBS ที่มีข้อมูลของคุณ - และถ่ายภาพเพื่อรักษาสิ่งที่อาจได้รับความเสียหายเนื่องจากความไม่สอดคล้องกัน)
ตามหมายเหตุด้าน Amazon ระบุอัตราความล้มเหลวของไดรฟ์ข้อมูล EBS เพิ่มขึ้นด้วยจำนวนข้อมูลที่เปลี่ยนแปลงไปนับตั้งแต่สแน็ปช็อตครั้งสุดท้าย
คำแนะนำสุดท้าย
- ใช้สแน็ปช็อต - ยอดเยี่ยม - ลดเวลาหยุดทำงานมากกว่าที่เป็นสาเหตุ
- แยกข้อมูลและโวลุ่มรูตหรือแม้แต่วางฐานข้อมูลบนโวลุ่มของตัวเองและสแน็ปช็อตก่อนการอัพเดตหากจำเป็น
- ใช้ bin-log เพื่อให้เป็น 'ร้อน' ที่สุด - อัปโหลด (บีบอัด) นี้เป็น S3
- ตรวจสอบให้แน่ใจว่าคุณได้รับข้อมูลจากอินสแตนซ์จริง (แม้ว่าข้อมูลจะยังคงอยู่ในโวลุ่ม EBS แต่ตัววอลลุ่มนั้นอาจไม่สามารถเข้าถึงได้ชั่วคราว)
อ่านหนังสือที่แนะนำ:
(ฉันเชื่อว่าฉันเขียนมากเกินไป แต่ไม่ได้พูดมากพอ - แต่หวังว่าคุณจะพบสิ่งที่ควรค่าแก่การอ่าน)