LVM snapshots เป็นกลยุทธ์การสำรองข้อมูล


17

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

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

แก้ไข:

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

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

ตอนนี้ฉันต้องทำสิ่งนี้โดยอัตโนมัติ

คำตอบ:


32

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

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

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

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

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

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

ดังนั้นสั้น:

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

4
นอกจากนี้ประสิทธิภาพสแนปชอตของ LVM จะลดลงแบบเส้นตรง - 8 สแนปชอต 8 เท่าของ IO
Steven

9
คำอธิบายของคุณมีบางจุดที่ฉันคิดว่าไม่ถูกต้อง ในเวอร์ชันปัจจุบันของ LVM หากสแนปชอตเต็มแล้วมันจะถูกทำเครื่องหมายว่าใช้ไม่ได้และจะต้องลบทิ้ง I / O บนอุปกรณ์ไม่หยุดทำงาน ประการที่สองเมื่อคุณลบสแน็ปช็อตจะไม่มีการคัดลอกข้อมูลกลับไปที่โวลุ่มดั้งเดิม โดยพื้นฐานแล้วเมื่อคุณเขียนลงในโวลุ่มสดบล็อกดั้งเดิมจะถูกคัดลอกไปยังสแน็ปช็อตก่อนแล้วจึงอัปเดตบล็อกสด จากนั้นเมื่อคุณวางสแนปชอตมันเป็นเพียงเรื่องของการลบรายการออกจาก mapper อุปกรณ์ ไม่จำเป็นต้องทำสำเนา
Kamil Kisiel

2
เพื่อประโยชน์ของความสมบูรณ์ Kamil Kisiel นั้นถูกต้อง ดู: tldp.org/HOWTO/LVM-HOWTO/snapshotintro.html
ktower

1
หลังจากบ่นตัวเองอย่างมากสำหรับการเข้าใจผิดคำตอบก็ถูกแก้ไขโดยอ้างอิงจากเอกสารและการสนทนาหลายแหล่ง คนที่ขอโทษฉันไม่ดี
Avery Payne

10

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


9

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

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

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

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


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

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

แต่ถ้ามันเปลี่ยนไป (สแนปชอต) "น้ำแข็ง" นี้มาจากไหน สมมติว่าฉันมีสถานการณ์นี้ระบบการทำงานจะได้รับความเสียหายเมื่อเวลาผ่านไป ฉันมีภาพรวมของมันเมื่อมันทำงานอย่างถูกต้อง สแน็ปช็อตจะเป็นตัวแทนของระบบในขณะที่มันยังทำงานได้อย่างถูกต้องหรือมีการเปลี่ยนแปลงที่ทำให้ระบบดั้งเดิมเสียหายในตอนแรกหรือไม่ หวังว่าฉันชัดเจนพอเพียงแค่ต้องการให้แน่ใจว่าฉันเข้าใจจริงๆ
Karolis T.

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

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

6

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


5

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

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 ก็ตาม


4

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

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

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


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

3

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


1
เอเอชเอ ใช่ - ฉันถือว่าสแน็ปช็อตจะถูกนำไปใช้และส่งออกไปยังเซิร์ฟเวอร์ที่เก็บข้อมูลระยะไกล ไม่เหลือในโฮสต์ท้องถิ่น
pQd

2

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

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

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

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

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


1

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.