ZFS 미러 풀에 대한 효과적인 오프 사이트 백업 전략은 무엇입니까?


9

두 개의 미러 디스크로 구성된 ZFS 풀을 사용합니다. 오프 사이트 백업을 진행하기 위해 두 개의 디스크를 더 구입했습니다.

저의 첫 번째 계획은 세 번째 디스크를 미러에 연결하고 ZFS가 리 실버 링 될 때까지 기다린 다음 드라이브를 분리하여 오프 사이트로 운반하여 오프 사이트 백업을 만드는 것이 었습니다. 이것은 충분히 잘 작동하지만 디스크를 연결할 때마다 전체 리 실버 를 수행하는 것으로 보입니다 . 이로 인해 백업이 허용 가능한 시간보다 오래 걸립니다.

저의 요구 사항에는 zpool의 오프 사이트 복사본과 매일 교체 할 수있는 모든 스냅 샷이 있어야합니다. 이것은 리 실버 링이 최대 24 시간이 필요하다는 것을 의미합니다. 현재는 그 시간에 가깝지만 수영장을 확장하려는 계획은 그 시간을 넘어서게 할 것입니다.

전체 리 실버 링 작업이 필요하지 않은 오프 사이트 백업을 유지하려면 어떻게해야합니까? 백업 드라이브에서 다른 파일 시스템을 사용해야합니까 (예 : ZFS 풀의 일부가 아닌 이미지 내보내기)? 별도의 풀에 백업을 보유하고 새 스냅 샷을 생성 할 때 백업을 보내야합니까?


현재 진행중인 전략은 다중 풀 방법이며, zfs는 스냅 샷을 동기화하기 위해 송수신합니다. 이 옵션이나 더 나은 옵션에 대한 논쟁을 찾았다면 듣고 싶습니다.
so12311

답변:


3

많은 땜질과 실험 끝에 상당히 큰 트레이드 오프가 있지만 해결책을 찾았습니다.

우선, 제외해야 할 옵션은 다음과 같습니다.

  • 미러링 된 풀이있는 두 번째 오프 사이트 ZFS 서버를 갖는 것은 비용 때문에 옵션이 아니 었습니다. 이것이 ZFS 전송 / 수신을 사용하여 스냅 샷을 원격 풀에 제공하는 것이 최선의 방법 일 수있는 옵션이었습니다.

  • 두 번째 온 사이트 ZFS 미러 풀을 사용하여 디스크를 제거하여 집으로 가져갈 수 있습니다. 이것은 첫 번째 옵션보다 실행 가능하지만 항상 두 개의 디스크가 온 사이트에 있거나 두 개의 데이터 사본을 단일 온 사이트 디스크에 사용하려면 두 번째 풀이 필요합니다. 현재 나는 네 개의 디스크를 가지고 있으며 서버에는 5 분의 1 이상의 공간이 없습니다. 이것은 공정한 접근법이지만 여전히 이상적이지는 않습니다.

  • ZFS 연결 및 분리를 사용하여 백업 디스크를 미러링 된 풀 안팎으로 회전시킵니다. 이것은 잘 작동하지만 디스크를 추가 할 때마다 전체 리 실버를 수행해야합니다. 이것은 받아 들일 수 없을 정도로 오래 걸리므로 이것에 의존 할 수 없었습니다.

내 솔루션은 사용하는 것과 비슷 attach하고 detach, 그러나 그것은 사용 online하고 offline. 이 전체 리 실버 링 대 리 실버 링 (resilvering) 델타을 수행하는 장점이 있지만, 풀은 항상보고 있다는 단점이 DEGRADED상태를 (풀은 항상 두 개의 디스크가, 회전 오프 사이트 디스크가 표시됩니다 offline그들이 와서 온라인으로 다음 원격 스토리지 및 재조정되는에있는 경우 그들이 현장에있을 때).

따라서 내 설정에 대한 간단한 요약 및 개요 :

하나의 ZFS 서버와 네 개의 동일한 디스크가 있습니다. ZFS는 미러 풀을 사용하도록 설정되어 있습니다. 4 개의 디스크 중 2 개는이 풀의 영구 구성원입니다. 다른 두 디스크는 회전합니다. 하나는 항상 오프 사이트 스토리지에 있고 다른 하나는 즉시 백업 할 수있는 풀의 일부입니다.

백업을 교체해야 할 때 :

  • zfs scrub백업 디스크에 오류가 없는지 확인하기 위해 a 가 완료 될 때까지 기다립니다.

  • 나는 zfs offline원격으로 가져갈 디스크입니다. 오프라인 후 나는 hdparm -Y /dev/id그것을 스핀 다운합니다. 1 분 후 디스크 슬 레드를 부분적으로 제거한 다음 (전원 손실이 충분히 보장 될 수 있도록) 드라이브를 완전히 잡아 당겨 회전을 멈추기 전에 다시 1 분 정도 기다립니다. 디스크는 정전기 백에 넣은 다음 보호 케이스에 넣어 외부로 나갑니다.

  • 다른 오프 사이트 디스크를 가져옵니다. 핫스왑 트레이에 설치되어 회전합니다. 내가 사용하는 zfs online풀에 디스크를 복원하고 동시에 할 부분 리 실버 링 킥오프.

이 시스템은 주어진 시간에 두 개의 ONLINE미러 디스크와 하나의 OFFLINE원격 디스크 (스크럽 된 디스크) 가 있음을 보장합니다 . 네 번째 디스크는 리 실버 링 또는 온라인 상태이므로 실행중인 드라이브에 장애가 발생하더라도 풀이 여전히 두 개의 온라인 디스크와 일관성을 유지한다는 이점이 있습니다.

지난 몇 주 동안 잘 작동했지만 여전히이 방법을 해킹 접근 방식으로 생각합니다. 주요 문제가 발생하면 후속 조치를 취할 것입니다.


업데이트 : 몇 달 동안이 작업을 수행 한 후 실제 사용에서 리 실버 링이 분리 / 연결 및 오프라인 / 온라인에 대해 동일한 시간이 걸리는 것으로 나타났습니다. 테스트에서 스크럽을 실행하고 있다고 생각하지 않습니다. 드라이브가 스크럽을 위해 오프라인 상태 인 경우 전체 리 실버가 필요합니다.


4 개가 아닌 3 개 기기에서만 작동하지 않습니까? 은 Oracle Solaris ZFS 관리 설명서 미러 풀 "경우에 오류가 발생한다고 모든 구성 요소 거울이 제거됩니다"[강조 광산, 네 번째 드라이브가 반드시 필요한 것은 아니라는 것을 암시하는 것 같다있다.
Kenny Evitt

1
세 개의 장치는 항상 풀에있는 두 개의 디스크와 가끔 오프 사이트에있는 하나의 디스크 또는 항상 풀에있는 하나의 디스크와 오프 사이트로 회전하는 두 개의 디스크를 의미합니까? 두 번째 옵션을 사용하면 완전히 온라인 디스크가 하나만있는 동안 (두 번째 디스크가 회전하거나 아직 완전히 리 실버 링되지 않은 경우) 풀에 잘못된 데이터가 발생하면 데이터가 손실 될 것으로 예상됩니다. 2 센트는 항상 미러 풀에 2 개의 풀 타임 온라인 디스크가 있는지 확인하는 것입니다.
STW

나는 당신이 언급하는 두 번째 옵션을 의미했습니다. 이 옵션을 사용하면 하나의 디스크 만 온라인 상태 일 때 불량 데이터가 발생할 가능성이 얼마나됩니까? 부분 / 증분 리실 버닝은 비교적 빠르지 않습니까? 나쁜 데이터가 있어도 두 번째 드라이브에서 복구 할 수 없습니까? 아니면 최악의 경우 세 번째 드라이브에서 복구 하시겠습니까? [분명히 복구 할 수없는 시나리오가 있습니다. 그러나 4 개의 드라이브에서도 마찬가지입니다. 또는 어떤 숫자든지 실제로.]
Kenny Evitt

나는 항상 두 개의 온라인 미러 디스크를 가지고 있으며, 세 번째와 네 번째는 백업을 회전시키는 데 사용됩니다. 미러에 온라인 디스크가 하나만있을 때는 항상 취약한 시점이며, 심지어 내 접근 방식을 사용하더라도 오프 사이트 백업 디스크가 무결성 문제를 일으킬 수 있고 100 % 복구 할 수없는 위험이 있습니다 (이상적으로는 두 개의 무결성을 비교할 수 있도록 언제든지 오프 사이트에 두 개의 미러링 된 디스크가 있어야합니다.
STW

요약하자면 ZFS는 단일 데이터 사본을 피하는 것 (또는 최소한 패리티를 가지고있어 나쁜 데이터를 재구성 할 수있는 것)입니다. 온라인 디스크가 하나만 있거나 백업 데이터 사본이 하나만 있으면 데이터가 손실 될 수 있습니다.
STW

2

zfs가 스냅 샷을 원격 ZFS 시스템으로 보내지 않는 이유는 무엇입니까? 나는 이것을 위해 간단한 bash 스크립트를 사용한다 :

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

zfs 데이터 세트를 외부 (비 zfs) 파일 시스템에 증분 덤프 할 수있는 snapdump 라는 도구를 만들었습니다 . Snapdump는 단일 명령으로 증분 스냅 샷 체인 복원도 지원합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.