กลยุทธ์การสำรองข้อมูลนอกสถานที่ที่มีประสิทธิภาพสำหรับมิร์เรอร์พูล ZFS คืออะไร


9

ฉันใช้พูล ZFS ซึ่งประกอบด้วยดิสก์ที่มิร์เรอร์สองตัว หากต้องการสำรองข้อมูลนอกสถานที่ฉันต้องซื้อดิสก์เพิ่มอีกสองแผ่น

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

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

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


กลยุทธ์ปัจจุบันของฉันคือวิธีการรวมหลาย ๆ อย่างด้วยการส่งและรับ zfs เพื่อซิงค์ภาพรวม ชอบที่จะได้ยินถ้าคุณพบข้อโต้แย้งกับตัวเลือกนี้หรือดีกว่า
so12311

คำตอบ:


3

หลังจากทำการทดลองและทดลองมากฉันพบวิธีแก้ปัญหาอยู่แล้วแม้ว่าจะมีการแลกเปลี่ยนที่ค่อนข้างใหญ่

ก่อนอื่นตัวเลือกที่ฉันต้องออก:

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

  • มีสระว่ายน้ำมิร์เรอร์ ZFS ในสถานที่ที่สองซึ่งฉันสามารถเอาดิสก์ออกจากบ้านได้ นี่เป็นไปได้มากกว่าตัวเลือกแรก แต่ฉันจะต้องมีกลุ่มที่สองที่จะมีดิสก์สองแผ่นในสถานที่เสมอ ในปัจจุบันฉันมีดิสก์สี่ตัวและไม่มีที่ว่างเหลือสำหรับหนึ่งในห้าในเซิร์ฟเวอร์ นี่จะเป็นวิธีการที่ยุติธรรม แต่ก็ยังไม่เหมาะ

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

วิธีการแก้ปัญหาของฉันคือคล้ายกับการใช้attachและdetachแต่มันใช้และonline offlineสิ่งนี้มีข้อดีของการทำเดลต้า resilvering กับ resilvering แบบเต็ม แต่ข้อเสียเปรียบที่พูลจะรายงานDEGRADEDสถานะเสมอ (พูลมักมีดิสก์สองดิสก์เสมอดิสก์นอกสถานที่ที่หมุนอยู่จะถูกทำเครื่องหมายofflineเมื่ออยู่ในที่จัดเก็บข้อมูลระยะไกลและรีเวอร์เวอร์แล้วออนไลน์ เมื่อพวกเขาอยู่ในสถานที่)

ดังนั้นสรุปอย่างรวดเร็วและภาพรวมของการตั้งค่าของฉัน:

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

เมื่อถึงเวลาหมุนการสำรองข้อมูล:

  • ฉันรอ a zfs scrubให้เสร็จสมบูรณ์เพื่อให้มั่นใจได้อย่างมั่นใจว่าดิสก์สำรองไม่มีข้อผิดพลาด

  • ฉันzfs offlineดิสก์ซึ่งจะนำมาจากระยะไกล หลังจากนั้นฉันhdparm -Y /dev/idจะหมุนมันลง หลังจากหนึ่งนาทีฉันเอาแผ่นดิสก์เลื่อนออกบางส่วน (เพียงพอที่จะให้แน่ใจว่าสูญเสียพลังงาน) จากนั้นให้เวลาอีกหนึ่งนาทีก่อนที่จะดึงไดรฟ์จนเต็มเพื่อรับประกันว่าจะหยุดหมุน ดิสก์ไปในถุงคงที่และจากนั้นกรณีป้องกันและไปนอกสถานที่

  • ฉันนำดิสก์นอกสถานที่อื่นมา มันได้รับการติดตั้งในถาด hotswap และหมุนขึ้น ฉันใช้zfs onlineเพื่อกู้คืนดิสก์ไปยังพูลและเริ่มการ resilvering บางส่วนเพื่อให้พร้อมกัน

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

มันใช้งานได้ดีในช่วงสองสามสัปดาห์ที่ผ่านมา แต่ฉันก็ยังถือว่านี่เป็นวิธีการแฮ็ก ฉันจะติดตามหากพบปัญหาที่สำคัญ


อัปเดต:หลังจากใช้งานได้สองสามเดือนฉันพบว่าในโลกแห่งความเป็นจริงการใช้งาน resilvering นั้นใช้เวลาในการถอด / แนบและออฟไลน์ / ออนไลน์ ในการทดสอบของฉันฉันไม่คิดว่าฉันกำลังทำการขัดตัว - ลางสังหรณ์ของฉันคือถ้าไดรฟ์ออฟไลน์สำหรับการขัดแล้วมันต้องใช้เต็ม resilver


สิ่งนี้จะไม่ทำงานกับอุปกรณ์เพียงสามชิ้นแทนที่จะเป็นสี่หรือไม่? ของ Oracle Solaris ZFS บริหารคู่มือระบุว่าสระว่ายน้ำกระจกเป็นโทษฐาน "ถ้าทุกชิ้นส่วนของกระจกจะถูกลบออก" [เหมืองเน้น] ซึ่งก็ดูเหมือนจะบ่งบอกว่าไดรฟ์ที่สี่คือไม่จำเป็นอย่างเคร่งครัด
Kenny Evitt

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

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

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

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

2

ทำไม zfs ไม่ส่งสแน็ปช็อตของคุณไปยังเครื่อง ZFS ระยะไกล ฉันใช้สคริปต์ทุบตีง่ายๆสำหรับสิ่งนี้:

#!/usr/local/bin/bash
# ZFS Snapshot BASH script by Shawn Westerhoff
# Updated 1/14/2014

### DATE VARIABLES
# D = Today's date
# D1 = Yesterday's date
# D# = Today less # days date
Y=$(date -v-1d '+%m-%d-%Y')
D=$(date +%m-%d-%Y)
D1=$(date -v-1d '+%m-%d-%Y')
D10=$(date -v-10d '+%m-%d-%Y')
D20=$(date -v-20d '+%m-%d-%Y')

# Step 1: Make the snapshots

for i in $( zfs list -H -o name ); do
    if [ $i == tier1 ]
    then echo "$i found, skipping"
    else
    zfs snapshot $i@$D
    fi
done

# Step 2: Send the snapshots to backup ZFS sever

    for i in $( zfs list -H -o name ); do
        zfs send -i $i@$D1 $i@$D | ssh -c arcfour root@10.10.10.10 zfs recv $i
    done

# Step 3: Destroy snapshots that are 20 days old

for i in $( zfs list -H -o name ); do
        if [ $i == tier1 ]
        then echo "$i found, skipping"
        else
        zfs destroy $i@$D20
        fi
done

0

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

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