Chiến lược sao lưu ngoại vi hiệu quả cho nhóm nhân đôi ZFS là gì?


9

Tôi sử dụng một nhóm ZFS bao gồm hai đĩa được nhân đôi. Để có được bản sao lưu ngoại vi, tôi đã mua thêm hai đĩa.

Kế hoạch ban đầu của tôi là tạo bản sao lưu ngoại vi bằng cách gắn đĩa thứ ba vào gương, chờ ZFS phục hồi, sau đó tháo ổ đĩa và mang nó ra ngoài. Điều này hoạt động đủ tốt, nhưng tôi đã ngạc nhiên rằng nó dường như thực hiện một bộ phục hồi đầy đủ mỗi khi đĩa được gắn vào (tôi đã đọc và có thể bị hiểu nhầm rằng mỗi tệp đính kèm sẽ dẫn đến bộ phục hồi tăng dần hoặc delta). Điều này dẫn đến việc sao lưu mất nhiều thời gian hơn là chấp nhận được.

Yêu cầu của tôi là phải có một bản sao ngoại vi của zpool của tôi và tất cả các ảnh chụp nhanh mà tôi có thể xoay hàng ngày. Điều này có nghĩa là cần phải phục hồi tối đa 24 giờ - hiện tại đã gần đến mức đó, nhưng kế hoạch phát triển nhóm của chúng tôi sẽ đẩy nó vượt ra ngoài khung thời gian đó.

Làm cách nào tôi có thể giữ các bản sao lưu ngoại vi không yêu cầu hoạt động khôi phục hoàn toàn? Tôi có nên sử dụng một hệ thống tệp khác trên các ổ đĩa sao lưu của mình không (ví dụ: xuất hình ảnh thay vì để chúng là một phần của nhóm ZFS)? Tôi có nên sao lưu trong một nhóm riêng biệt và gửi ảnh chụp nhanh mới đến nó khi chúng được tạo không?


Chiến lược hiện tại của tôi là phương pháp nhiều nhóm, với zfs gửi và nhận để giữ cho ảnh chụp nhanh được đồng bộ hóa. Rất thích nghe nếu bạn tìm thấy một lập luận chống lại điều này hoặc một lựa chọn tốt hơn.
so12311

Câu trả lời:


3

Sau nhiều lần mày mò và thử nghiệm, tôi đã tìm ra giải pháp, mặc dù với một sự đánh đổi khá lớn.

Trước hết, các tùy chọn tôi phải loại trừ:

  • Có máy chủ ZFS ngoại vi thứ hai với nhóm nhân đôi không phải là một lựa chọn do chi phí. Nếu đây là một lựa chọn thì đây sẽ là cách tiếp cận tốt nhất, sử dụng gửi / nhận ZFS để gửi ảnh chụp nhanh đến nhóm từ xa.

  • Có một nhóm nhân đôi ZFS tại chỗ thứ hai, tôi có thể loại bỏ các đĩa để mang về nhà. Điều này khả thi hơn tùy chọn đầu tiên, nhưng tôi sẽ cần nhóm thứ hai luôn có hai đĩa tại chỗ (hoặc sử dụng hai bản sao dữ liệu trên một đĩa tại chỗ). Hiện tại tôi có bốn đĩa, và không còn chỗ cho một phần năm trong máy chủ. Đây sẽ là một cách tiếp cận công bằng nhưng vẫn không lý tưởng.

  • Sử dụng ZFS đính kèm và tách để xoay đĩa sao lưu vào và ra khỏi nhóm được nhân đôi. Điều này hoạt động tốt, nhưng phải thực hiện một bộ phục hồi đầy đủ mỗi khi đĩa được thêm vào. Điều này mất nhiều thời gian không thể chấp nhận được, và vì vậy tôi không thể dựa vào điều này.

Giải pháp của tôi tương tự như sử dụng attachdetach, tuy nhiên, nó sử dụng onlineoffline. Điều này có lợi thế là thực hiện khả năng phục hồi delta so với khả năng phục hồi hoàn toàn, nhưng nhược điểm là pool luôn báo cáo DEGRADEDtrạng thái (pool luôn có hai đĩa; các đĩa ngoại vi quay được đánh dấu offlinekhi chúng được lưu trữ từ xa và phục hồi sau đó trực tuyến khi họ đang ở trong khuôn viên).

Vì vậy, một bản tóm tắt nhanh chóng và tổng quan về thiết lập của tôi:

Tôi có một máy chủ ZFS và bốn đĩa giống hệt nhau. ZFS được thiết lập để sử dụng nhóm nhân đôi. Hai trong số bốn đĩa là thành viên thường trực của nhóm này. Hai đĩa còn lại xoay; một cái luôn ở trong bộ lưu trữ ngoại vi, cái kia là một phần của nhóm để hoạt động như một bản sao lưu sẵn sàng hoạt động.

Khi đến lúc phải xoay các bản sao lưu:

  • Tôi chờ đợi zfs scrubđể hoàn thành một cách hợp lý để đảm bảo đĩa sao lưu không có lỗi

  • Tôi zfs offlineđĩa sẽ được lấy từ xa. Sau khi ngoại tuyến, tôi hdparm -Y /dev/idsẽ quay nó xuống. Sau một phút, tôi gỡ bỏ một phần đĩa trượt (vừa đủ để đảm bảo năng lượng bị mất) và sau đó cho nó thêm một phút trước khi kéo hoàn toàn ổ đĩa để đảm bảo nó đã ngừng quay. Đĩa đi trong một túi tĩnh và sau đó là một trường hợp bảo vệ và đi ra ngoài.

  • Tôi mang vào đĩa ngoại vi khác. Nó được cài đặt trong khay hotswap và quay lên. Tôi sử dụng zfs onlineđể khôi phục đĩa vào nhóm và khởi động lại một phần để phục hồi đồng thời.

Hệ thống này đảm bảo rằng tại bất kỳ thời điểm nào tôi cũng có hai ONLINEđĩa nhân bản và một OFFLINEđĩa từ xa (đã được lọc). Đĩa thứ tư hoặc được khôi phục hoặc trực tuyến, có lợi ích là trong trường hợp ổ đĩa bị hỏng, có lẽ nhóm sẽ vẫn nhất quán với hai đĩa trực tuyến.

Nó đã hoạt động tốt trong vài tuần qua, nhưng tôi vẫn coi đây là một cách tiếp cận hackish. Tôi sẽ theo dõi nếu tôi gặp phải bất kỳ vấn đề lớn nào.


Cập nhật: Sau khi chạy với điều này trong một vài tháng, tôi thấy rằng trong thế giới thực của mình, việc sử dụng lại sẽ mất cùng thời gian cho việc tách / đính kèm và ngoại tuyến / trực tuyến. Trong thử nghiệm của tôi, tôi không nghĩ rằng mình đang chạy chà - linh cảm của tôi là nếu một ổ đĩa ngoại tuyến cho một chà thì nó đòi hỏi phải có khả năng phục hồi hoàn toàn.


Điều này chắc chắn sẽ không hoạt động với chỉ ba thiết bị thay vì bốn? Các Oracle Solaris ZFS Hướng dẫn quản lý khẳng định rằng một hồ bơi gương faulted "Nếu tất cả các thành phần của một tấm gương được loại bỏ" [tôi nhấn mạnh], điều này dường như ngụ ý rằng một ổ đĩa thứ tư là không thực sự cần thiết.
Kenny Evitt

1
Theo ba thiết bị, bạn có nghĩa là hai đĩa luôn ở trong nhóm và một đĩa đôi khi ở ngoài hoặc một đĩa luôn nằm trong nhóm và hai đĩa xoay ngoài cơ sở? Với tùy chọn thứ hai, tôi sẽ mất dữ liệu nếu nhóm gặp dữ liệu xấu trong khi chỉ có một đĩa trực tuyến hoàn toàn (khi đĩa thứ 2 hoặc đang được quay hoặc chưa được phục hồi hoàn toàn). Hai xu của tôi là luôn đảm bảo nhóm nhân đôi của bạn có hai đĩa trực tuyến toàn thời gian.
STW

Tôi có nghĩa là tùy chọn thứ hai bạn đề cập. Với tùy chọn đó, khả năng dữ liệu xấu trong khi chỉ có một đĩa trực tuyến? Khả năng phục hồi một phần / tăng dần nên tương đối nhanh, phải không? Và ngay cả khi có dữ liệu xấu, bạn không nên khôi phục từ ổ đĩa thứ hai? Hoặc phục hồi từ ổ đĩa thứ ba, trường hợp xấu nhất? [Rõ ràng có những kịch bản không thể phục hồi; nhưng điều đó đúng ngay cả với bốn ổ đĩa; hoặc bất kỳ số nào thực sự.]
Kenny Evitt

Tôi luôn luôn có hai đĩa nhân đôi trực tuyến, với thứ ba và thứ tư được sử dụng để xoay các bản sao lưu. Bất cứ lúc nào bạn chỉ có một đĩa trực tuyến trong gương là thời gian mà bạn dễ bị tổn thương - và ngay cả với cách tiếp cận của tôi, có nguy cơ đĩa sao lưu ngoại vi có thể phát triển các vấn đề toàn vẹn và không thể phục hồi 100% (lý tưởng là sẽ có là hai đĩa nhân đôi ngoại vi bất cứ lúc nào, để có thể so sánh tính toàn vẹn của hai đĩa).
STW

Tóm lại, ZFS là tất cả về việc tránh một bản sao dữ liệu duy nhất (hoặc ít nhất là có tính chẵn lẻ, cho phép xây dựng lại dữ liệu xấu). Khi bạn chỉ có một đĩa trực tuyến hoặc một bản sao dữ liệu sao lưu thì có nguy cơ mất dữ liệu.
STW

2

Tại sao zfs không gửi ảnh chụp nhanh của bạn đến một máy ZFS từ xa? Tôi sử dụng một tập lệnh bash đơn giản cho việc này:

#!/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

Tôi đã tạo một công cụ có tên snapdump để cho phép bạn tạo các kết xuất tăng dần của bộ dữ liệu zfs của bạn sang hệ thống tệp nước ngoài (không phải zfs). Snapdump cũng hỗ trợ khôi phục chuỗi ảnh chụp nhanh tăng dần bằng một lệnh duy nhất.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.