현재 두 대의 서버가 있는데 두 서버 모두 동일한 하드웨어, 디스크 등을 가지고 있습니다.
한 서버(server1)가 "마스터" 서버가 됩니다. 기본적으로 사람들이 연결할 수 있도록 SMB 공유가 있는 raidz2가 있는 서버입니다.
다른 서버(server2)는 server1(raidz2)과 구성이 동일하지만 server1을 백업하는 데에만 사용됩니다. 그 목적은 디스크 장애, 화재, 홍수 등으로 인해 server1이 손실될 경우 오프사이트 백업 역할을 하는 것입니다.
server2에 백업하는 가장 좋은 방법을 찾으려고 노력 중입니다.
처음에는 rsync 같은 것을 생각했습니다. 이것은 cron에서 설정하기가 간단하며 일주일에 한 번 실행할 수 있습니다.
또는 zfs send/recv와 함께 뭔가를 사용할 생각입니다. 제가 이해한 바에 따르면 ZFS는 "스냅샷"을 수행할 수 있으므로 많은 공간을 잃지 않고 스냅샷/증분 백업을 만들 수 있다면 좋을 것이라고 생각했습니다. 나는 이것이 구현하기가 더 어렵고 오류가 발생하기 쉽다고 생각합니다.
다른 옵션이 있나요?
앞서 말했듯이 두 서버는 하드웨어와 raidz2 레이아웃 측면에서 동일하게 구성됩니다. 내 현재 상황에 대한 제안이 있습니까? 미리 감사드립니다.
답변1
증분 ZFS 보내기/받기를 사용합니다. rsync
전체 파일 시스템을 탐색할 필요 없이 마지막 스냅샷 이후 변경된 내용을 아는 것이 ZFS보다 더 효율적입니다 .
라는 파일 시스템의 전체 백업을 만들고 싶다고 가정해 보겠습니다 datapool/fs
.
먼저 대상 서버에 백업을 저장하고 소스 풀에 재귀 스냅샷을 저장할 풀을 만듭니다.
dest # zpool create datapool ...
source # zfs snapshot -r datapool/fs@snap1
그런 다음 전체 데이터를 초기 백업으로 보냅니다.
source # zfs send -R datapool/fs@snap1 | ssh dest zfs receive datapool/fs
다음 주(또는 원하는 기간)에 소스 풀에서 두 번째 스냅샷을 생성하고 해당 델타를 대상으로 보냅니다. 그 시점에서 ZFS는 일주일 이내에 변경된 콘텐츠(삭제, 생성 및 수정된 파일)만 보낼 만큼 똑똑했습니다. 파일이 수정되면 전체가 전송되지 않고, 수정된 블록만 전송되어 업데이트됩니다.
source # zfs snapshot -r datapool/fs@snap2
source # zfs send -ri snap1 datapool/fs@snap2 |
ssh dest zfs receive -F datapool/fs
백업하고 작업을 반복할 때마다 스냅샷 수를 늘리십시오.
더 이상 필요하지 않은 경우 서버 중 하나에서 사용하지 않는 오래된 스냅샷을 삭제하십시오.
대역폭 제약이 있는 경우 파이프에 gzip
/ 명령을 삽입하거나 SSH 압축을 활성화하는 등 즉시 데이터를 압축/압축 해제할 수 있습니다 .zip
source # zfs send -ri snap1 datapool/fs@snap2 | gzip |
ssh dest "gunzip | zfs receive -F datapool/fs"
또한 mbuffer
,페이지:
dest # mbuffer -s 128k -m 1G -I 9090 | zfs receive datapool/fs
source # zfs send -i snap2 datapool/fs@snap3 |
mbuffer -s 128k -m 1G -O w.x.y.z:9090
참고: 이 zfs -r
플래그는 Solaris 이외의 ZFS 구현에는 사용할 수 없습니다. http://lists.freebsd.org/pipermail/freebsd-fs/2012-September/015074.html. 이 경우 -F
대상에서 이 플래그를 사용하지 말고 데이터세트를 명시적으로 롤백하세요. 소스에 새로운 데이터 세트가 생성된 경우 스냅샷+증분 전송/수신을 수행하기 전에 독립적으로 전송하세요.
물론 백업할 파일 시스템이 하나만 있고 기본 데이터 세트 계층 구조가 없거나 독립 실행형 백업을 수행하려는 경우 증분 백업을 구현하는 것이 더 쉽고 ZFS 구현에 관계없이 동일한 방식으로 작동해야 합니다.
T0:
zfs snapshot datapool/fs@snap1
zfs send datapool/fs@snap1 | ssh dest zfs receive datapool/fs
T1:
zfs snapshot datapool/fs@snap2
zfs send -i snap1 datapool/fs@snap2 |
ssh dest zfs receive -F datapool/fs