S3를 효율적으로 사용하여 파일을 증분 백업하는 방법은 무엇입니까?


42

rsync가 높은 수준에서 작동하는 방식을 이해하지만 두 가지 측면이 있습니다. S3에는 말할 데몬이 없다. 물론있다. 그러나 기본적으로 HTTP 일 뿐이다.

몇 가지 접근 방식이 있습니다.

s3rsync (단, rsync를 s3에 볼트로 고정) 똑바로. 타사에 의존하고 있는지 확실하지 않습니다. s3이 rsync를 지원하기를 바랍니다.

또한 볼트를 사용하지 않고 s3를 지원한다고 주장하는 중복성과 같은 일부 rsync 'clones'가 있습니다. 그러나 어떻게 이것을 할 수 있습니까? 그들은 색인 파일을 로컬로 유지하고 있습니까? 그것이 얼마나 효율적일 수 있는지 잘 모르겠습니다.

s3는 저렴하고 신뢰할 수 있기 때문에 분명히 사용하고 싶지만 거대한 이미지 디렉토리를 백업하는 것과 같이 rsync가 도구가되는 것들이 있습니다.

옵션은 무엇입니까? rsync + s3rsync + s3 대신 duplicity + s3을 사용하면 무엇이 손실됩니까?


4
S3는 싸다? 처음 듣는 소리인데, 금시초문이야. 신뢰할 수 있습니까? 확실하지만 저렴하지는 않습니다.
EEAA

5
글쎄, 더 많이 저장하거나 중복성을 줄이려면 s3는 $ 0.13 / gb 이하입니다. 빠른 검색은 rsync 스토리지에 대한 evbackup.com 을 나타냅니다 . 훨씬 비싸다. 저렴하고 어느 정도의 중복성이 있습니까?
Jaimie Sirovich

경우 내가 rsync를 설계했다, 그것은이 새로운 프로토콜 그래서 플러그인을 지원하는 것 (예를 들어 S3는 : //)를 추가 할 수 있습니다. 그러나 현재 rsync는 이것을 지원하지 않으므로 rsync를 S3에 백업하는 데 직접 사용할 수 있다고 생각하지 않습니다.
에드워드 포크

다음 문제는 S3가 소유권이나 권한과 같은 메타 데이터를 저장하지 않는다고 생각합니다. 예를 들어 "aws s3 sync"를 사용하여 백업을 수행 할 수는 있지만 Unix 파일 시스템의 본격적인 백업에는 적합하지 않을 수 있습니다. 복원시 너무 많은 데이터가 손실됩니다. 또한 심볼릭 링크, 하드 링크 및 기타 특수 파일이 손실 될 것이라고 생각합니다.
에드워드 포크

답변:


39

이 질문에 마지막으로 답변되었으므로 새로운 AWS 명령 줄 도구 인이 aws있습니다.

로컬 스토리지와 s3간에, rsync와 유사하게 동기화 할 수 있습니다 . 사용법 예 :

aws s3 sync s3://mybucket /some/local/dir/

시스템의 파이썬 환경이 올바르게 설정된 경우 다음을 사용하여 AWS 클라이언트를 설치할 수 있습니다 pip.

pip install awscli

1
내 경험상, 이것은 단지 변화의 델타가 아닌 모든 것을 업로드합니다. 예를 들어,을 사용하여 정적 사이트를 dev 서버로 푸시하고 rsync있었고 느린 연결을 통해 변경 사항이 발생하는 데 평균 1 초가 걸렸습니다. aws s3 sync반면에 각 파일을 모두 다시 전송하는 데 약 5 분이 걸렸습니다.
ryebread

2
작동하지 않는다고 생각하지만 문서에 "로컬 파일의 크기가 s3 객체의 크기와 다른 경우 로컬 파일을 업로드해야합니다. 로컬 파일의 마지막 수정 시간이 s3 객체의 마지막 수정 시간 또는 로컬 파일이 지정된 버킷 및 접두사 아래에 없습니다. " 최신 버전의 aws-cli가 있는지 확인하십시오.이를 재현 할 수 있으면 github에 버그를 신고하십시오. 내가 얼마 전에 버그를 제기했을 때 그들은 반응했다.
Dan Pritts

명령은 다음과 같아야합니다. aws s3 sync / some / local / dir / s3 : // mybucket
Carlo S

1
카를로스, 당신의 요점이 뭔지 잘 모르겠습니다. 내 예제 명령이 잘못되었다고 제안한다면, 우리 둘 다 맞습니다. s3 동기화는 어느 방향 으로든 작동 할 수 있습니다.
Dan Pritts

파티에 늦었지만 상황은 다음과 같습니다. S3에 업로드 할 때 빠른 확인 규칙이 적용됩니다 (크기 또는 날짜가 변경된 경우 업로드). 때 다운로드 , 거기에 더 빠르게 검사 규칙 없으며, 모든 무조건 다운로드됩니다.
에드워드 포크

16

s3cmd 도구는 훌륭한이 sync옵션을 선택합니다. 다음과 같은 방법으로 로컬 백업을 동기화하는 데 사용합니다.

s3cmd sync --skip-existing $BACKUPDIR/weekly/ s3://MYBACKUP/backup/mysql/

--skip-existing이 시도하지 않는 수단은 기존의 파일을 비교 검사합니다. 해당 이름을 가진 파일이 이미있는 경우 해당 파일을 빠르게 건너 뛰고 계속 진행합니다. --delete-removed로컬에 존재하지 않는 파일을 제거하는 옵션 도 있지만 로컬로 정리 한 파일조차도 S3에 유지하고 싶지 않으므로 이것을 사용하지 않습니다.


5

어떻게해야하는지 아무에게도 말하고 싶지 않지만 이중성을 나타내는 깃발을 흔들 수 있습니까? 또는 기타 증분 백업 솔루션. 동기화는 모두 잘 수행되지만 야간에 백업하는 경우 이틀 동안 문제가 발생하지 않으면 어떻게됩니까? 답변 : 로컬 파일과 백업이 서로 너무 늦어서 필요한 데이터가 없습니다. 증분 백업 또는 스냅 샷을 고려해야 특정 시점으로 복구 할 수 있으며이를 효율적으로 수행하려면 증분 백업이 필요합니다. 데이터 손실이 세계 시나리오의 끝인 경우 알 수없는 다른 공급자에게 사본을 보관하면 알 수있는 사람을 잃어 버릴 수 있습니다.

나는 duplicity와 s3을 사용하지만 괜찮지 만 CPU를 많이 사용합니다. 그러나 증분 백업은 수행합니다. 동일한 파티션에서 다른 파일을 복원하지 않고 dir 또는 특정 파일을 마지막 수요일 또는 지난 1 월에 복원하려는 응급 상황에서는 증분 백업이 필요하며 필요한 파일 만 요청할 수있는 도구가 필요합니다.

나는 x 개월마다 전체를 채우는 cron을 가지고 있습니다. 그렇지 않으면 s3 스토리지 총계를 유지하기 위해 x 개월보다 오래된 증분 및 삭제를 수행합니다. 백업이 작동하지 않을 때 알 수 있도록 정기적으로 주시해야합니다.

로컬 서명을 유지하려면 상당한 로컬 임시 공간이 필요하므로 임시 디렉토리를 신중하게 설정하십시오. / mnt 내부의 다양한 디렉토리를 제외하고 / mnt를 백업합니다. 시스템 파티션에서 Amazon 이미징 또는 스냅 샷 도구를 사용하기 때문에 데이터를 백업하는 데 좋습니다.

PHP 스크립트 :

# Duplicity Backups

$exclude  = "--exclude /mnt/ephemeral ".
            "--exclude /mnt/logs ".
            "--exclude /mnt/service ".
            "--exclude /mnt/mail ".
            "--exclude /mnt/mysql ";

$key = "PASSPHRASE=securegpgpassphrase";

$tmp = "/mnt/mytempdir";

system("mkdir -p $tmp");

# Amazon

$aws = "AWS_ACCESS_KEY_ID=xxxxxx ".
       "AWS_SECRET_ACCESS_KEY=xxxxxx ";

$ops = "-v5 --tempdir=$tmp --archive-dir=$tmp --allow-source-mismatch --s3-european-buckets --s3-use-new-style --s3-use-rrs";
$target = " s3://s3-eu-west-1.amazonaws.com/mybucket";

# Clean + Backup

system("$key $aws /usr/bin/duplicity $ops --full-if-older-than 2M $exclude /mnt $target");
system("$key $aws /usr/bin/duplicity $ops remove-older-than 6M --force $target");
system("$key $aws /usr/bin/duplicity $ops cleanup --force --extra-clean $target");
system("$key $aws /usr/bin/duplicity $ops collection-status $target")

1
s3 버킷의 버전 관리를 켜면 기존 사본이 유지됩니다.
mcmillab

3

S3는 범용 객체 스토리지 시스템으로 사용 방법을 설계 할 수있는 충분한 유연성을 제공합니다.

귀하의 질문에 rsync (인덱싱 제외) 관련 문제 또는 '제 3 자'도구 관련 문제가 있는지 확실하지 않습니다.

잘 구조화 된 큰 파일 세트가있는 경우 하위 폴더에서 여러 s3 동기화를 실행할 수 있습니다.

Amazon의 멋진 사람들은 휴대용 하드 드라이브에서 가져 오기 / 내보내기를 통해 S3 또는 EBS ( http://aws.amazon.com/importexport/) 로 대용량 파일을 전송할 수 있습니다.

여기에서 Amazon S3 모범 사례를 참조하십시오-http: //aws.amazon.com/articles/1904

다른 도구까지는 시도해보고 자신에게 가장 적합한 도구를 찾으십시오. 가격과 관련하여 필요에 따라 중복성 가격이 낮아집니다-http: //aws.amazon.com/s3/pricing/

일반적인 권장 사항-빠른 멀티 코어 CPU와 우수한 네트워크 파이프를 갖추고 있습니다.

업데이트 : S3의 체크섬에 대한 언급

S3에 대해서는 키 값 쌍으로 데이터를 저장하며 디렉토리 개념이 없습니다. S3sync는 체크섬을 검증합니다 (S3에는 체크섬을 검증을위한 헤더 (Content-MD5 헤더)로 보내는 메커니즘이 있음). 모범 사례는 데이터 무결성의 일부를 자세히 설명합니다. S3를 사용하면 체크섬을 전송 / 확인 및 검색 할 수 있습니다. 이중화로 증분 백업을 수행하는 사람들이 많이 있습니다. S3에서 rsync가 실행되지 않더라도 여기서 언급 한 것처럼 체크섬을 수행 할 수 있습니다.

rsync는 입증 된 도구이며 대부분의 최신 도구는 동일한 알고리즘 또는 rsync 라이브러리를 사용하거나 rsync를 외부에서 호출합니다.


1
이것이 어떻게 질문에 대답하는지 모르겠습니다. 나는 rplicit가 다른 쪽 데몬없이 rsync 가하는 일을 수행하기 위해 duplicity가 어떻게 관리하는지 묻고있었습니다. 심지어 체크섬을 얻거나 할 수 없지만 파일을 어떻게 점증 적으로 업데이트합니까?
Jaimie Sirovich

승인. 따라서 Duplicity는 S3의이 해시를 사용하지만 FTP를 통해 작동한다고 주장합니다. FTP에는 해싱 메커니즘이 없습니다. 나는 안전한 편에서 실수하고 '검증 된'도구를 사용하는 경향이 있습니다. Rsync는 그렇습니다. 그러나 s3 애드온 서비스 s3rsync가 없으면 s3 백업을 수행하지 않습니다. 나는 약간의 이중성을 두려워하지만, 액세서리 서비스없이 s3으로 일정 수준의 rsync와 같은 기능을 얻을 수 있다면 더 넓은 프로토콜 호소력을 가지고 있습니다. 나는 그것이 얼마나 작동하는지 (그리고 아마도 다양한 프로토콜과는 다르게) 얻지 못합니다 . 도대체 어떻게 FTP 동기화를 수행합니까? :)
Jaimie Sirovich

@JaimieSirovich 그것을 테스트하고 참조하십시오. 당신이 있다면, 당신은 이중성은 그것이 무엇인지에 대한 모든 의견 입력 걸린보다 적은 시간에 "매니페스트"파일을 빌드 알고 줄 수있는 일을해야합니다.
ceejayoz

3

대신 mc를 사용할 수 있습니다. 'mc mirror'명령을 사용하면 작업이 수행됩니다.

$ mc mirror share/sharegain/ s3/MyS3Bucket/share/sharegain 
  • mc : 미니 오 클라이언트
  • 공유 / 공유 : 로컬 디렉토리
  • s3 : https://s3.amazonaws.com의 별칭
  • MyS3Bucket : 원격 S3 버킷
  • 공유 / 공유 : s3의 내 개체

주기적으로 동기화를 유지하는 간단한 스크립트를 cronjob으로 작성할 수 있습니다.

희망이 있습니다.


변화를 감시 -w하는 fsnotify데 사용할 플래그 도 있습니다 . 시스템 서비스 또는 이와 유사한 것으로 쉽게 설정할 수 있습니다.
alkar

2

진정한 rsync가 Amazon에 적합한 지 잘 모르겠습니다.

내가 이해하는 것처럼 표준 rsync 알고리즘은 클라이언트가 파일의 각 블록에 대한 해시를 계산하고 서버가 사본에 대한 해시를 계산하고 해당 해시를 클라이언트에 전송하여 클라이언트가 어떤 블록이 변경되어 업로드가 필요한지 결정할 수 있음을 의미합니다.

이로 인해 많은 해시가 인터넷을 통해 전송되어야하고 아마존의 비용을 증가시키는 모든 해시를 계산하는 데 처리 능력이 필요하다는 Amazon의 두 가지 문제가 발생합니다. 해당 기능에 대한 추가 요금이 부과됩니다.

클론의 경우 분명히 해시를 어딘가에 저장하고 있으며 어딘가에 따라 클론에 따라 다를 수 있습니다. 해시를 Amazon의 파일 당 별도의 객체 또는 Amazon에 저장된 데이터베이스로 저장하거나 로컬 및 원격으로 저장할 수 있습니다.

어떤 식 으로든 장점과 단점이 있습니다. 해시가 개별 파일에 원격으로 저장된 경우 지속적으로 검색하는 데 많은 비용이들 수 있습니다. 해시가 원격으로 데이터베이스에 저장되면이 데이터베이스가 커질 수 있으며 지속적으로 검색하고 업데이트하는 데 많은 비용이들 수 있습니다. 해시가 로컬로 저장되면 비용을 줄이는 데 도움이되지만 다른 합병증과 문제가 발생합니다.

(물론 Amazon에는 다른 서비스가 있으므로 데이터베이스를 Amazon DB에 보관할 수 있습니다)

예를 들어, 몇 년 전에 하나의 초기 rsync 클론을 사용해 보았습니다. 이것은 아마존의 가격 구조를 고려하여 작성되지 않았으며 각 블록의 해시를 검색하기 위해 많은 http 가져 오기를 발행했으며 각 가져 오기에 대한 Amazon 요금이 청구되었으므로 청구서의 스토리지 부분이 급격히 떨어졌지만 전송 부분 풍선

rsync + s3rsync + s3 대신 duplicity + s3을 사용하면 무엇이 손실됩니까?

rsync를 사용하면 소스 파일과 백업 파일을 비교한다는 것을 알 수 있습니다. 이중성 및 기타 복제본을 사용하면 소스 파일을 백업을 수행 할 때 가져온 해시와 비교합니다. 예를 들어, 해시를 다시 계산하거나 해시 데이터베이스를 업데이트하지 않고 S3에 직접 액세스하여 해당 파일 중 하나를 교체 할 수 있습니다.


0

이 스레드에서 언급 한 여러 옵션을 비교 한 후 S3fs로 가기로 결정했습니다. S3을 로컬 파일 시스템으로 마운트 할 수 있습니다. 그런 다음 이미 알고있는 방식으로 rsync를 진행하여 사용할 수 있습니다.

다음은 시작하기에 좋은 자습서 입니다. Rsync가 포함 된 Amazon S3

저자는 이전에 언급 된 s3sync를 사용했지만 S3F를 사용하여 옵션으로 전환했습니다. SSHFS를 통해 로컬로 마운트 된 다른 백업 폴더가 있기 때문에 좋아합니다.


12
위험, 윌 로빈슨! rsync 저 대역폭 통신의 이점을 얻지 못하므로 비용이 많이 듭니다.-s3fs는 전체 파일을 읽은 다음 (변경된 경우 쓰는 경우) Amazon에서 요금을 두 번 청구합니다. 대신 EC2 인스턴스를 사용하고 ssh를 통해 원격으로 rsync를 사용하는 것이 좋습니다. EC2 인스턴스에서 S3 로의 전송은 무료이므로 로컬 시스템에서 EC2 인스턴스로의 rsync의 저 대역 통신 만 지불하면됩니다. 온 디맨드로 EC2 마이크로 인스턴스를 실행하면 비용이 전혀 들지 않습니다.
David 주어진

2
이! rsync와 S3를 이해하지 못하는 사람들에게는 나쁜 조언이 많이 있습니다.
Mark

이것의 단점은 이제 관리 할 마이크로 인스턴스가 있다는 것입니다. 당신이 방법을 알고 있다면 사소하지만 많은 사람들에게 진입 장벽이 있습니다. 플러스 측면에서 EC2 연결 EBS 스토리지는 S3 바이트 당 가격의 절반 정도입니다.
Dan Pritts

@DavidGiven rysnc를 사용하지 않고 마운트 된 s3fs에 직접 작성한 다음 수명주기를 통해 수명을 관리하면 어떻게됩니까?
Forethinker
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.