백업 전략으로서의 LVM 스냅 샷


17

백업 전략으로서 xen domU의주기적인 LVM 스냅 샷이 얼마나 실용적입니까? 찬반 양론?

나에게 그것은 빠르고 두뇌없는 복원을위한 완벽한 솔루션 인 것 같습니다. 중단없이 domU가 성공적으로 실행되면 손상된 논리 볼륨에서 모든 조사를 수행 할 수 있습니다.

편집하다:

전체 시스템 백업을 수행 할 때의 현재 위치입니다.

  • domU 디스크의 lvm 스냅 샷
  • 크기가 스냅 샷 크기와 동일한 새 논리 볼륨
  • dd if = / dev / snapshot of = / dev / new_lv
  • lvremove를 사용하여 스냅 샷 처리
  • kpartx / mount / ls를 통한 선택적 검증

이제 이것을 자동화해야합니다.

답변:


32

LVM 스냅 샷은 파일 시스템을 고정 된 상태로 캡처하기위한 것입니다. 그것들 자체로는 백업이 아닙니다. 그러나 정지 된 이미지는 백업 프로세스 중에 변경되지 않으며 변경되지 않기 때문에 일관된 백업 이미지를 얻는 데 유용합니다. 따라서 장기 백업을 위해 직접 사용하지는 않지만 사용하기로 결정한 백업 프로세스에서 큰 가치가 있습니다.

스냅 샷을 구현하는 몇 가지 단계가 있습니다. 첫 번째는 새로운 논리 볼륨을 할당해야한다는 것입니다. 이 볼륨의 목적은 파일 시스템에 대한 델타 (변경)가 기록되는 영역을 제공하는 것입니다. 이를 통해 기존 읽기 / 쓰기 액세스를 방해하지 않고 원래 볼륨을 계속 사용할 수 있습니다. 이것의 단점은 스냅 샷 영역의 크기가 유한하다는 것입니다. 즉, 쓰기 작업이 많은 시스템에서는 오히려 빨리 채울 수 있습니다. 쓰기 작업이 많은 볼륨의 경우 모든 변경 사항을 기록하기에 충분한 공간을 확보 할 수 있도록 스냅 샷의 크기를 늘리십시오. 스냅 샷이 넘치면 (채워짐) 스냅 샷이 정지되고 사용할 수없는 것으로 표시됩니다. 이 경우 스냅 샷을 해제하여 원래 볼륨을 온라인으로 되돌릴 수 있습니다. 릴리스가 완료되면

두 번째로 발생하는 일은 LVM이 이제 해당 볼륨의 실제 목적을 "스왑"한다는 것입니다. 새로 할당 된 스냅 샷이 파일 시스템에 대한 변경 사항을 찾을 수있는 장소라고 생각할 것입니다. 결국 모든 쓰기 작업이 수행되는 위치입니다. 아니요, 다른 방향입니다. 파일 시스템은 LVM 볼륨 이름에 마운트 되므로 스냅 샷이 다른 이름을 사용하기 때문에 나머지 시스템 아래 에서 이름 을 바꾸는 것은 불가능합니다 . 따라서 해결책은 간단합니다. 원래 볼륨 이름에 액세스 할 때 스냅 샷을 수행 한 볼륨 의 라이브 (읽기 / 쓰기) 버전을 계속 참조합니다 . 생성 한 스냅 샷 볼륨은 고정 된백업하려는 볼륨의 (읽기 전용) 버전. 처음에는 약간 혼란 스럽지만 의미가 있습니다.

이 모든 것은 2 초 안에 일어난다. 나머지 시스템은 눈치 채지 못합니다. 물론 오버플로 전에 스냅 샷을 해제하지 않으면 ...

어느 시점에서 스냅 샷을 해제하여 차지하는 공간을 되 찾을 수 있습니다. 릴리스가 완료되면 스냅 샷 볼륨이 볼륨으로 다시 릴리스되고 원본은 그대로 유지됩니다.

나는 이것을 장기적인 백업 전략으로 추구하지 않는 것이 좋습니다. 여전히 실패 할 수있는 동일한 실제 드라이브에서 데이터를 호스팅하고 있으며 실패한 드라이브에서 파일 시스템을 복구하는 것은 전혀 백업되지 않습니다.

간단히 말해 :

  • 스냅 샷은 백업 지원에 좋습니다
  • 스냅 샷 자체는 백업의 형태가 아닙니다
  • 스냅 샷은 영원히 지속되지 않습니다
  • 전체 스냅 샷은 좋지 않습니다
  • 어느 시점에서 스냅 샷을 해제해야합니다
  • 당신이 현명하게 사용한다면 LVM은 당신의 친구입니다.

4
또한 LVM 스냅 샷 성능은 IO의 8 배인 8 개의 스냅 샷을 선형으로 저하시킵니다.
Steven

9
설명에 잘못된 것으로 생각되는 몇 가지 사항이 있습니다. 현재 버전의 LVM에서 스냅 샷이 가득 차면 간단히 사용할 수없는 것으로 표시되어 삭제해야합니다. 장치의 I / O가 중지되지 않습니다. 둘째, 스냅 샷을 삭제하면 데이터가 원래 볼륨으로 다시 복사되지 않습니다. 기본적으로 라이브 볼륨에 쓰면 원래 블록이 먼저 스냅 샷에 복사 된 다음 라이브 블록이 업데이트됩니다. 그런 다음 스냅 샷을 삭제하면 장치 매퍼에서 항목을 제거하기 만하면됩니다. 복사 할 필요가 없습니다.
Kamil Kisiel 2016 년

2
완전성을 위해 Kamil Kisiel은 정확합니다. 참조 : tldp.org/HOWTO/LVM-HOWTO/snapshotintro.html
ktower

1
잘못된 정보로 인해 많은 불만을 겪은 후 여러 출처의 문서와 토론을 바탕으로 답변이 수정되었습니다. 미안, 내 나쁜.
에이버리 페인

10

LVM 스냅 샷은 서버를 오프라인 상태로 만들지 않고도 백업 할 수 있습니다. 명시된 바와 같이 LVM 스냅 샷은 거의 즉시 사본입니다. lvcreateLV 자체를 작성하는 것처럼 명령을 사용하여 작성 --snapshot하고 VG 대신 옵션과 원래 LV 만 제공하십시오 . 예를 들어 :

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.

스냅 샷은 COW (Copy-On-Write) 방식으로 구현되므로 모든 쓰기를 한 번의 읽기와 두 번의 쓰기로 전환합니다 (업데이트중인 블록은 기본 볼륨에서 먼저 읽고 새 데이터가 저장되기 전에 스냅 샷 볼륨에 저장 됨) VM에서 많은 쓰기 작업이 일반적인 경우 성능 저하가 발생할 수 있습니다.

또한 IIRC는 스냅 샷 볼륨이 가득 차면 무의식적으로 삭제됩니다. 백업 목적으로는 좋지 않습니다! 따라서이를 백업 방법으로 시도하는 경우 스냅 샷의 유효 수명 동안 발생할 수있는 모든 변경 사항을 처리 할 수있을만큼 스냅 샷 볼륨을 크게 만드십시오. 물론 크기 문제를 알고 모니터링하고 성능 문제가 문제가되지 않는 경우 제안한 내용이 현재 진행중인 다른 백업 프로세스에 유용하게 추가 될 수 있습니다.

LVM 스냅 샷은 백업 프로세스의 일부로 매우 유용합니다 (스냅 샷 작성, 스냅 샷 을 다른 곳 으로 백업하여 "실제"볼륨에 대한 업데이트를 비활성화하지 않고 백업을 일관성있게 유지하고 나중에 스냅 샷을 삭제하지 않아도 됨). 그러나 자체 백업 시설로 사용되지는 않습니다.


어쩌면 스냅 샷의 작동 방식을 이해하지 못할 수도 있습니다. 매뉴얼에 따르면 스냅 샷은 거의 즉시 논리 볼륨의 복사본이므로 스냅 샷 을 사용하는 시스템을 오프라인으로 만들 필요가 없습니다. 귀하의 설명에서 스냅 샷은 고정 된 사본이 아닌 분기, 복제본에 가깝습니다. 스냅 샷은 원래 시스템에서 작성된 모든 변경 사항으로 업데이트됩니까? 그렇다면 백업을위한 스토리지 메커니즘이 아니기 때문에 데이터를 즉시 꺼내서 스냅 샷을 제거해야합니까? 감사!
Karolis T.

2
이 볼륨은 생성 된 볼륨의 고정 사본이지만 스냅 샷이 생성 된 이후 변경된 블록 만 포함합니다 (따라서 스냅 샷 볼륨은 스냅 샷 볼륨보다 훨씬 작을 수 있음). 라이브 볼륨에서 블록이 업데이트되면 원본 블록의 내용이 스냅 샷의 스토리지에 추가되므로 스냅 샷을 볼 때 LVM은 업데이트 된 블록 대신 원본 블록을 제공 할 수 있습니다.
David Spillett

그러나 이것이 바뀌면 (스냅 샷),이 "동결 된"부분은 어디에서 왔습니까? 이 시나리오가 있다고 가정 해보십시오. 작동중인 시스템은 시간이 지남에 따라 손상됩니다. 제대로 작동했을 때의 스냅 샷이 있습니다. 스냅 샷이 여전히 올바르게 작동하는 동안 시스템을 나타내는 것입니까, 아니면 원래 시스템을 처음 변경 한 변경 사항이 있습니까? 충분히 명확하기를 바랍니다. 정말로 이해하고 싶습니다.
Karolis T.

고정 된 위치를 이해하려면 이제 활성 파일 시스템을 포함하는 원본과 파일 시스템의 고정 된 버전을 변경하는 스냅 샷이라는 두 개의 개별 볼륨이 있습니다. 자세한 내용은 내 답변을 참조하십시오.
Avery Payne

1
당신은 사람들이 그것을보다 더 복잡한 소리를합니다. 스냅 샷은 소스 파일 시스템의 상태를 스냅 샷 생성 당시의 상태로 저장합니다. 소스 fs가 변경되면 스냅 샷이 변경되지 않으므로 백업 프로그램이 소스 fs 대신 스냅 샷에서 읽도록 지시 할 수 있습니다. 예, COW (Copy-On-Write)는 화면 뒤에서 발생하지만 추가 IO 사용을 제외하고는 사용자가이를 알 수 없습니다.
Martijn Heemels

6

스냅 샷을 작성하기 전에 디스크의 데이터가 일관된 상태인지 확인해야합니다. 예를 들어, mysql은 데이터베이스를 덤프하거나 종료하여 디스크에 강제로 저장해야하는 메모리에 데이터를 캐시 할 수 있습니다. 자세한 내용은 응용 프로그램 설명서를 참조하십시오.


5

스마트하게 보이는 것 아래에서 LVM은 실제로 장치 매퍼 트릭입니다. lvcreate로 스냅 샷을 만드는 것은 일부 dmsetup에 대한 래퍼에 지나지 않습니다. 랩퍼는 하나의 이전 볼륨 (원래 lv)과 새 장치 (기록 중 복사 볼륨)에서 새 장치 (스냅 샷 볼륨)를 작성합니다. 이것과 함께 원래 LV의 이름이 -real로 변경됩니다 (아래의 dmsetup ls --tree 출력 참조). 이 실제 LV는 스냅 샷 볼륨과 원본 볼륨에 모두 매핑되므로 두 곳에서 모두 사용할 수 있습니다. COW (Copy-On-Write) 볼륨은 -real LV에 대한 오버레이 기능을합니다. -snap LV는 copy-on-write 볼륨과 -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는 LVM이 아니라도 스냅 샷과 함께 작동합니다.


4

스냅 샷이 성능에 영향을 미치지 않더라도 다음 사항을 이해해야합니다. 스냅 샷은 더 이상 동일한 디스크의 다른 폴더로 복사하는 것 이상의 백업이 아닙니다.

디스크가 제동되면 데이터와 백업이 손실됩니다. 스냅 샷 영역을 VG의 다른 PE에 할당하더라도 스냅 샷 이후 수정 된 데이터 만 포함합니다.

백업은 최소 요구 사항으로 적어도 완전히 별도의 드라이브에 사본을 의미합니다.


예, 이해합니다 RAID 1은 소프트웨어 손상으로부터 원격 위치로 백업하여 저장 장치 오류로부터 보호합니다. 무슨 일이 있었는지 모르고 지금 온라인으로 시스템이 필요한 경우 LVM 스냅 샷을 REALY 빠른 복원 도구로 고려하고 있습니다. LVM 백업에서 domU를 더 빠르게 복원하는 다른 옵션이 있습니까?
Karolis T.

3

vmware 서버 시스템 및 mysql 데이터베이스의 스냅 샷에 이러한 설정을 사용합니다. 지금까지 잘 작동합니다. 문제가없는 복원이 몇 가지있었습니다. 한 가지 고려해야 할 사항-스냅 샷으로 실행하는 동안 lvm은 i / o 작업에서 성능이 크게 저하됩니다. 볼 여기 . lvm에 어떤 종류의 데이터가 있는지에 관계없이 mysql, i / o ops는 i / o ops입니다.


1
아하. 예-스냅 샷이 만들어져 원격 스토리지 서버로 내보내 진다고 가정합니다. 로컬 호스트에 남아 있지 않습니다.
pQd 2016 년

2

lvm 스냅 샷 만 DomU Lv를 별도의 Vg에 복사하기 위해 사용합니다. 각 도메인에는 3 개의 백업 "노드"가 있습니다.

그 후, 스냅 샷이 파괴되고 백업 Lv는 다음 라운드까지 남아 있습니다. 복원이 필요한 경우 백업 Vg에서 소스 Lv를 선택하여 도메인 Lv에 복사하면됩니다.

가끔 백업 Lv가 별도의 서버에있는 이미지 파일로 덤프됩니다.

이 모든 것은 스크립트를 통해 자동화되며 이틀마다 백업하고 매주 덤프를합니다.

나는 심지어 "패닉"모드를 염두에 두었다. 도메인 Lv는 복원되지만 스냅 샷에서 실행되고 2 시간마다 재설정되어 심각한 해킹이 발생했을 때 사이트를 온라인으로 유지하여 적절한 방어 체계가 마련 될 때까지 .


1

'패닉 모드'방어 아이디어 라인은 어떻게 되었습니까?

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