กลยุทธ์การสำรองข้อมูลจะเป็นสแน็ปช็อต LVM เป็นระยะของ xen domU ได้อย่างไร ข้อดีข้อเสีย gotchas ใด ๆ

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

แก้ไข:

นี่คือที่ที่ฉันอยู่ตอนนี้ เมื่อทำการสำรองข้อมูลระบบเต็มรูปแบบ

  • สแน็ปช็อต lvm ของดิสก์ domU
  • โลจิคัลวอลุ่มใหม่ซึ่งมีขนาดเท่ากับขนาดสแน็ปช็อต
  • dd if=/dev/snapshot of=/dev/new_lv
  • การกำจัดสแน็ปช็อตด้วย lvremove
  • การตรวจสอบทางเลือกด้วย kpartx/mount/ls

ตอนนี้ฉันต้องทำให้สิ่งนี้เป็นอัตโนมัติ

answer

สแน็ปช็อต LVM มีขึ้นเพื่อจับภาพระบบไฟล์ในสถานะหยุดนิ่งพวกเขาไม่ได้หมายถึงการสำรองข้อมูลในตัวของมันเอง อย่างไรก็ตาม สิ่งเหล่านี้มีประโยชน์สำหรับการรับอิมเมจสำรองที่มีความสอดคล้องกัน เนื่องจากอิมเมจที่หยุดนิ่งไม่สามารถและจะไม่เปลี่ยนแปลงในระหว่างกระบวนการสำรองข้อมูลดังนั้น แม้ว่าคุณจะไม่ได้ใช้มันโดยตรงในการสำรองข้อมูลระยะยาว แต่จะมีประโยชน์อย่างมากในกระบวนการสำรองข้อมูลใดๆ ที่คุณตัดสินใจใช้

มีไม่กี่ขั้นตอนในการติดตั้งสแนปชอต อย่างแรกคือต้องจัดสรรโลจิคัลวอลุ่มใหม่ วัตถุประสงค์ของโวลุ่มนี้คือเพื่อให้พื้นที่ที่เดลตา (การเปลี่ยนแปลง) กับระบบไฟล์ถูกบันทึก ซึ่งช่วยให้ไดรฟ์ข้อมูลเดิมสามารถดำเนินการต่อได้โดยไม่กระทบต่อการเข้าถึงแบบอ่าน/เขียนที่มีอยู่ ข้อเสียคือพื้นที่สแนปชอตมีขนาดจำกัด ซึ่งหมายความว่าในระบบที่มีการเขียนยุ่ง มันสามารถเติมได้ค่อนข้างเร็ว สำหรับวอลุ่มที่มีกิจกรรมการเขียนที่สำคัญ คุณจะต้องเพิ่มขนาดของสแน็ปช็อตเพื่อให้มีพื้นที่เพียงพอสำหรับการบันทึกการเปลี่ยนแปลงทั้งหมด หากสแนปชอตของคุณล้น (เติม) ทั้งสแนปชอตจะหยุดและถูกทำเครื่องหมายว่าใช้ไม่ได้ หากเกิดเหตุการณ์เช่นนี้ คุณจะต้องปล่อยสแนปชอตของคุณเพื่อให้ไดรฟ์ข้อมูลเดิมกลับมาออนไลน์ได้ เมื่อการเปิดตัวเสร็จสมบูรณ์ คุณ'จะสามารถเมานต์โวลุ่มใหม่เป็นอ่าน/เขียนและทำให้ระบบไฟล์ใช้งานได้

สิ่งที่สองที่เกิดขึ้นคือตอนนี้ LVM "สลับ" วัตถุประสงค์ที่แท้จริงของโวลุ่มที่เป็นปัญหา คุณคิดว่าสแนปชอตที่จัดสรรใหม่จะเป็นที่สำหรับค้นหาการเปลี่ยนแปลงใดๆ กับระบบไฟล์ เพราะเป็นที่ที่การเขียนทั้งหมดกำลังจะไปใช่ไหม ไม่สิ มันกลับกัน แฟ้มที่มีการติดตั้งไปปริมาณ LVM ชื่อเพื่อสลับออกชื่อจากใต้ที่เหลือของระบบจะไม่มีไม่มี (เพราะภาพรวมการใช้ที่แตกต่างกันชื่อ) ดังนั้นวิธีแก้ปัญหาจึงเป็นเรื่องง่าย: เมื่อคุณเข้าถึงชื่อโวลุ่มดั้งเดิม ชื่อโวลุ่มนั้นจะยังคงอ้างอิงถึงเวอร์ชั่นสด (อ่าน/เขียน) ของโวลุ่มที่คุณทำสแนปชอตของ ปริมาณสแนปชอตที่คุณสร้างจะอ้างถึงการแช่แข็ง(อ่านอย่างเดียว) ของโวลุ่มที่คุณต้องการสำรองข้อมูล แรกๆ งงๆ นิดหน่อย แต่น่าจะได้สาระ

ทั้งหมดนี้เกิดขึ้นในเวลาน้อยกว่า 2 วินาที ส่วนที่เหลือของระบบไม่ได้สังเกต แน่นอน คุณไม่ปล่อยสแนปชอตก่อนที่มันจะล้น...

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

ฉันไม่แนะนำให้ทำตามนี้เป็นกลยุทธ์สำรองระยะยาว คุณยังคงโฮสต์ข้อมูลบนไดรฟ์จริงตัวเดียวกันที่อาจล้มเหลว และการกู้คืนระบบไฟล์ของคุณจากไดรฟ์ที่ล้มเหลวจะไม่มีการสำรองข้อมูลเลย

ดังนั้นโดยสรุป:

  • สแนปชอตนั้นดีสำหรับการช่วยสำรองข้อมูล
  • สแนปชอตไม่ใช่รูปแบบการสำรองข้อมูลในตัวมันเอง
  • สแนปชอตไม่คงอยู่ตลอดไป
  • สแนปชอตแบบเต็มไม่ใช่เรื่องดี
  • ต้องมีการปล่อยสแนปชอตในบางจุด
  • LVM คือเพื่อนของคุณ ถ้าคุณใช้มันอย่างชาญฉลาด

สแน็ปช็อต LVM นั้นยอดเยี่ยมสำหรับการสำรองข้อมูลเซิร์ฟเวอร์ของคุณโดยไม่ต้องออฟไลน์ ตามที่ระบุไว้สแน็ปช็อต LVM เกือบจะเป็นสำเนาทันที คุณสร้างมันโดยใช้lvcreateคำสั่งเหมือนกับที่คุณสร้าง LV เอง มีเพียงคุณเท่านั้นที่ให้--snapshotตัวเลือกและ LV ดั้งเดิมแทน VG ตัวอย่างเช่น:

lvcreate -L <LV size> -s -n <snapshot name> /dev/<VG name>/<LV name>

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

หลังจากที่คุณสำรองข้อมูลจากสแนปชอตเสร็จแล้ว คุณต้องการลบออกเพื่อลดโอเวอร์เฮด I/O เพิ่มเติมหรือปัญหาด้านประสิทธิภาพอื่นๆ ตามที่ผู้อื่นได้กล่าวถึงโดยใช้:

lvremove /dev/<VG name>/<snapshot name>

แม้ว่าสแน็ปช็อตของ LVM นั้นมีค่ามากในการสร้างการสำรองข้อมูลที่เชื่อถือได้ของระบบ เช่น ฐานข้อมูล และโดยปกติคุณต้องการปิดระบบเพื่อสำรองข้อมูลเพื่อหลีกเลี่ยงความขัดแย้งของไฟล์ สิ่งเหล่านี้ไม่เหมาะสำหรับการดำเนินการระยะยาวในการกู้คืนอย่างรวดเร็ว

ไม่ใช่ความคิดที่ดี IMO

สแนปชอตถูกนำไปใช้ในลักษณะคัดลอกเมื่อเขียน ดังนั้นคุณจึงเปลี่ยนทุกการเขียนเป็นการอ่านและการเขียนสองครั้ง (บล็อกที่คุณกำลังอัปเดตจะถูกอ่านครั้งแรกจากโวลุ่มหลักและจัดเก็บไว้ในโวลุ่มสแน็ปช็อตก่อนที่คุณจะมีข้อมูลใหม่ ตำแหน่ง) ดังนั้นคุณจะเห็นประสิทธิภาพการทำงานลดลงหากมีการเขียนจำนวนมากบน VM

นอกจากนี้ IIRC หากปริมาณสแนปชอตเต็มก็จะลดลงอย่างไม่เป็นระเบียบ นี้ไม่ดีสำหรับวัตถุประสงค์สำรอง! ดังนั้น หากคุณลองใช้วิธีนี้เป็นวิธีสำรองข้อมูล อย่าลืมทำให้วอลลุ่มสแน็ปช็อตใหญ่พอที่จะรองรับการเปลี่ยนแปลงทั้งหมดที่จะเกิดขึ้นในช่วงอายุการใช้งานของสแน็ปช็อต แน่นอน หากคุณทราบและตรวจสอบปัญหาด้านขนาดและปัญหาด้านประสิทธิภาพไม่ใช่ปัญหาสำหรับคุณ สิ่งที่คุณแนะนำอาจเป็นประโยชน์ต่อกระบวนการสำรองข้อมูลอื่นๆ ที่คุณมีอยู่

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

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

ภายใต้สิ่งที่ดูสมาร์ท LVMs เป็น 'เพียง' เคล็ดลับการทำแผนที่อุปกรณ์ การสร้างสแน็ปช็อตด้วย lvcreate นั้นไม่ได้มากไปกว่าตัวห่อหุ้มสำหรับบางสิ่ง dmsetup Wrapper สร้างอุปกรณ์ใหม่ (โวลุ่มสแน็ปช็อต) จากโวลุ่มเก่าหนึ่งรายการ (เลเวลดั้งเดิม) และโวลุ่มใหม่ (โวลุ่มการคัดลอกเมื่อเขียน) เมื่อรวมกับสิ่งนั้นแล้ว LV ดั้งเดิมจะถูกเปลี่ยนชื่อเป็น -real (ดูด้านล่าง ซึ่งก็คือ dmsetup ls --tree output) -real LV นี้ถูกแมปกับทั้งโวลุ่มสแน็ปช็อตและโวลุ่มดั้งเดิม ดังนั้นจึงสามารถใช้ได้ทั้งสองที่ ปริมาณการคัดลอกเมื่อเขียนทำหน้าที่เป็นการซ้อนทับกับ -real LV -snap LV จะแสดงให้คุณเห็นการรวมกันของปริมาณการคัดลอกเมื่อเขียนและปริมาณจริง สิ่งนี้สร้างค่าใช้จ่ายด้านประสิทธิภาพอย่างแท้จริง

Volume00-snap (253:11)
 |-Volume00-snap-cow (253:13)
 |  `- (104:2)
 `-Volume00-LogVol01-real (253:12)
    `- (104:2)

Volume00-LogVol01 (253:5)
 `-Volume00-LogVol01-real (253:12)
    `- (104:2)

เมื่อลบสแน็ปช็อต การเปลี่ยนชื่อและการทำแผนที่จะเกิดขึ้นอีกครั้ง หลังจากนั้นสถานการณ์ก็จะกลับเป็นเหมือนเดิมอีกครั้ง

Volume00-LogVol01 (253:5)
 `- (104:2)

สำหรับวิธีนี้เป็นวิธีที่ดีในการสำรองข้อมูล: อาจเป็นได้ หากคุณคำนึงถึงสิ่งนี้ (1) ไม่ช่วยสำหรับ RAM เครื่องเสมือน (2) สร้างการปรับประสิทธิภาพและ (3) คุณจะต้อง เพื่อเก็บภาพสแนปชอตไว้ที่อื่น

VMware VCB ใช้งานได้กับสแน็ปช็อตเช่นกัน btw แม้ว่าจะไม่ใช่ LVM

แม้ว่าสแน็ปช็อตจะไม่มีผลกระทบต่อประสิทธิภาพการทำงานใดๆ แต่คุณต้องเข้าใจ: สแนปชอตไม่ใช่ข้อมูลสำรองมากไปกว่าการคัดลอกไปยังโฟลเดอร์อื่นบนดิสก์เดียวกัน

หากดิสก์เบรก ข้อมูลและการสำรองข้อมูลของคุณจะสูญหาย แม้ว่าคุณจะกำหนดพื้นที่สแน็ปช็อตให้กับ PE อื่นใน VG แต่ก็มีเฉพาะข้อมูลที่แก้ไขตั้งแต่สแน็ปช็อตเท่านั้น

การสำรองข้อมูลหมายถึงการคัดลอกอย่างน้อยไปยังไดรฟ์ที่แยกจากกันโดยสิ้นเชิงตามข้อกำหนดขั้นต่ำ

ฉันใช้การตั้งค่าดังกล่าวสำหรับสแน็ปช็อตของเครื่องเซิร์ฟเวอร์ vmware และฐานข้อมูล mysql ทำงานได้ดีจนถึงตอนนี้ มีการคืนค่าสองสามครั้ง - ทั้งหมดไม่มีปัญหา สิ่งหนึ่งที่ต้องพิจารณา - ในขณะที่รันด้วย snapshot lvm จะได้รับประสิทธิภาพที่สำคัญสำหรับการดำเนินการ i/o ดูที่นี่ ละเว้นข้อเท็จจริงที่พวกเขาพูดถึง mysql, i/o ops คือ i/o ops... ไม่ว่าข้อมูลประเภทใดจะอยู่บน lvm

ฉันใช้สแน็ปช็อต lvm เพื่อคัดลอก DomU Lv อีกอันใน Vg แยกกัน โดยที่แต่ละโดเมนมี "โหนด" สำรองสามตัวที่จะกำจัดทิ้ง

หลังจากนั้น สแน็ปช็อตจะถูกทำลาย และเลเวลสำรองจะยังคงอยู่จนถึงรอบต่อไป หากฉันต้องกู้คืน ฉันแค่ต้องเลือก Lv ต้นทางจาก Vg สำรองและคัดลอกไปยังโดเมน Lv.

บางครั้ง Lv สำรองจะถูกทิ้งลงในไฟล์รูปภาพบนเซิร์ฟเวอร์ที่แยกจากกัน

ทั้งหมดนี้เป็นแบบอัตโนมัติผ่านสคริปต์ โดยมีการสำรองข้อมูลทุกสองวันและดัมพ์ทุกสัปดาห์

ฉันยังมีโหมด "ตื่นตระหนก" อยู่ในใจ ซึ่งโดเมน Lv จะได้รับการกู้คืนแต่เรียกใช้จากสแนปชอตและรีเซ็ตทุก 2 ชั่วโมง เพื่อให้ไซต์ออนไลน์ในกรณีที่มีการแฮ็กร้ายแรง จนกว่าจะมีการป้องกันที่เหมาะสม .

อะไรคือแนวความคิดการป้องกัน 'โหมดตื่นตระหนก'?