Bir kişi, S3'ü adım adım yedeklemek için nasıl verimli bir şekilde kullanabilir?


42

Rsync'in üst düzeyde nasıl çalıştığını biliyorum, ama iki taraf var. S3 ile konuşacak hiçbir servet yok - peki var, ama temelde sadece HTTP.

Birkaç yaklaşım varmış gibi görünüyor.

s3rsync (ama bu sadece rsync ile s3 arasındaki cıvataları). Basit. Emin bir şey üçüncü tarafa güvenmek istiyorum. Keşke s3 sadece rsync'i destekliyor.

Ayrıca, cıvatalama olmadan s3'ü desteklediğini iddia eden yineleme gibi bazı rsync 'klonları' vardır. Fakat bunu nasıl yapabilir? Yerelde bir dizin dosyası tutuyorlar mı? Bunun nasıl verimli olabileceğinden emin değilim.

Açıkçası s3'ü kullanmak istiyorum çünkü ucuz ve güvenilir, ancak dev bir görüntü dizini yedeklemek gibi, rsync'in aracı olduğu şeyler var.

Buradaki seçenekler neler? Rsync + s3rsync + s3 yerine duplicity + s3 kullanarak ne kaybederim?


4
S3 ucuz mu? Bu benim için bir haber. Güvenilir? Elbette, ama ucuz değil.
AÇAA

5
Peki, s3 daha fazla fazlalık isteyerek veya daha fazla saklamak istediğinizde 0.13 $ / gb veya daha düşüktür. Hızlı bir arama rsync depolama için evbackup.com ortaya koymaktadır . Çok daha pahalı. Daha ucuz ve fazlalık seviyesine sahip olan nedir?
Jaimie Sirovich

Eğer ben rsync tasarlamak için vardı o yeni protokoller böylece eklentileri destekleyecek (örn s3: //) eklenebilir. Ancak, şu anda, rsync bunu desteklemiyor, bu yüzden rsync'in doğrudan S3'e yedekleme yapmak için kullanılabileceğine inanmıyorum.
Edward Falk,

Bir sonraki konu, S3'ün sahiplik veya izinler gibi meta verileri depolayacağını sanmıyorum, bu nedenle örneğin yedekleme yapmak için "aws s3 sync" kullanmak işe yarayacak ancak muhtemelen bir Unix dosya sisteminin tam gelişmiş bir yedeği için uygun değil. geri yükleme sırasında çok fazla veri kaybedilecek. Ayrıca, sembolik bağlantılar, hardlinks ve diğer özel dosyaların kaybolacağını düşünüyorum.
Edward Falk,

Yanıtlar:


39

Bu soruya son cevap verildiğinden beri yeni bir AWS komut satırı aracı var aws.

Yerel depolama ve s3 arasında senkronize edebilir , rsync benzeri. Örnek kullanım:

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

Sisteminizin python ortamı düzgün ayarlanmışsa, aşağıdakileri kullanarak AWS istemcisini kurabilirsiniz pip:

pip install awscli

1
Tecrübelerime göre, bu sadece değişikliklerin bir deltası değil, her şeyi yükler. Örneğin, statik bir siteyi dev bir sunucuya zorluyordum rsyncve sadece yavaş bağlantımdan çıkan değişiklikler ile ortalama 1 saniye sürdü. aws s3 syncÖte yandan, her dosyayı yeniden aktararak, yaklaşık 5 dakika sürdü.
ryebread

2
İşe yaramayacağına inanıyorum, ancak dokümanlar "Yerel dosyanın boyutu s3 nesnesinin boyutundan farklıysa, yerel bir dosyanın yüklenmesi gerekir, yerel dosyanın en son değiştirilme süresi yeni olandan s3 nesnesinin son değiştirilme zamanı veya yerel dosya belirtilen kova ve ön ekin altında mevcut değil. " Aws-cli'nin en son sürümüne sahip olduğunuzdan emin olun - eğer bunu çoğaltabilirseniz, onlarla github'a bir hata gönderin. Bir süre önce bir hata bildirdiğimde tepki veriyorlardı.
Dan,

Komut şöyle olmalı: aws s3 senk / bazı / yerel / dir / s3: // mybucket
Carlo S

1
Carlos, amacın ne olduğundan emin değilim. Örnek komutumun yanlış olduğunu söylemek istiyorsan, ikimiz de haklıyız. S3 senkronizasyonu her iki yönde de çalışabilir.
Dan Pritts,

Partiye geç kaldık, ama işte neler oluyor: S3'e yüklerken , hızlı kontrol kuralları geçerlidir (boyut veya tarih değişmişse yükleme). Ne zaman indirirken , hiçbir hızlı kontrol kuralları vardır ve her şey koşulsuz olarak indirilir.
Edward Falk,

16

S3cmd aracı büyük sahiptir syncseçeneği. Yerel yedeklemeleri eşitlemek için kullanıyorum, şöyle bir şey kullanarak:

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

--skip-existingO çalışmaz araçlar mevcut dosyaları hızlı kopya etmek. Zaten bu isimde bir dosya varsa, hemen atlar ve devam eder. Orada da --delete-removedyerel olarak mevcut değil dosyaları kaldıracak seçenek, ama ben bu kullanmıyorum bu yüzden yerel olarak temizlemiş olduğunu S3 bile olanlar devam etmek istiyorum.


5

Kimseye ne yapacağını söylemek istemiyorum ama kopya için bir bayrak sallayabilir miyim? veya diğer artımlı yedekleme çözümü. Senkronizasyon çok iyi, fakat gece yedeklerseniz, sorunu iki gün boyunca farketmezseniz ne olur? Cevap: Çok geç, yerel dosyalarınız ve yedekleriniz birbirinizin aynasıdır ve ihtiyacınız olan hiçbir bilgiye sahip değilsiniz. Gerçekten artımlı yedeklemeleri veya anlık görüntüleri göz önünde bulundurmalısınız, böylece zaman içinde belirli bir anı kurtarabilmeniz ve bunu verimli bir şekilde yapabilmek için artımlı yedeklemelere ihtiyacınız vardır. Verilerinizi kaybetmek dünya senaryosunun sonu ise, kopyaları asla bilmediğiniz farklı sağlayıcılarda saklayın, o zaman kaybolabilir, kim bilir hacklenebilir.

Ben kopyalarımı ve s3'ü kullandım, para cezası ama işlem yoğun. Ancak artımlı yedeklemeler yapar. Bir dizini veya belirli bir dosyayı geri yüklemek istediğinizde, en geç Çarşamba günü veya geçen Ocak ayında, aynı bölümdeki diğer dosyaları geri yüklemeden acil bir durumda, artımlı yedeklemelere ve yalnızca ihtiyaç duyduğunuz dosyaları isteyebileceğiniz bir araca ihtiyacınız vardır.

Her x ayda bir dolu, aksi takdirde s3 depolama toplamını düşük tutmak için artan ve silinen bir cronum var, nihayet toplama durumunu yapıyor, böylece her sabah durumla birlikte postalanıyorum. Düzenli olarak göz kulak olmanız gerekir, böylece yedeklemenizin çalışmadığını fark edersiniz.

Yerel imzaları saklamak için önemli yerel geçici boşluk gerekir, bu nedenle temp dir değerini dikkatlice ayarlayın. Bu yedekleme / mnt, / mnt içindeki çeşitli dizinleri hariç tutar. Bu, verileri yedeklemek için iyidir, çünkü sistem bölümleri amazon görüntüleme veya anlık görüntü araçları kullanır.

PHP betiği:

# 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 kovası için versiyonlamayı açın, daha sonra eski kopyaları
saklar

3

S3, nasıl kullanmak istediğinizi tasarlamanız için yeterli esneklik sağlayan genel amaçlı bir nesne depolama sistemidir.

Sorunuzdan rsync ile ilgili sorunlara (indeksleme dışında) ya da karşılaştığınız '3. parti' aracına ilişkin sorunlara emin değilim.

İyi yapılandırılmış çok sayıda dosyanız varsa, alt klasörlerinizde birden fazla s3 senkronizasyonu çalıştırabilirsiniz.

Amazon'daki hoş kişiler, S3 veya EBS'ye büyük dosya aktarımı için taşınabilir sabit disk sürücünüzden bir ithalat / ihracat yapmanızı sağlar - http://aws.amazon.com/importexport/ , ilk yükleme için kullanabilirsiniz.

Amazon s3'ün en iyi uygulamalarını burada görün - http://aws.amazon.com/articles/1904

Farklı araçlara gelince, onları deneyin ve sizin için en uygun olanı görün. Fiyatlandırma ile ilgili olarak, ihtiyaçlarınızı karşılarsa fazlalık fiyatlandırması azaltılır - http://aws.amazon.com/s3/pricing/

Genel öneri - hızlı bir çok çekirdekli işlemci ve iyi bir ağ borusu var.

GÜNCELLEME: S3 üzerinde sağlama toplamından bahseden

S3 ile ilgili olarak veriler anahtar / değer çiftlerinde depolanır ve dizin kavramı yoktur. S3sync sağlama toplamı doğrular (S3 sağlama için bir başlık olarak sağlama toplamı göndermek için bir mekanizma vardır - Content-MD5 başlık). En iyi uygulamalar, Veri Bütünlüğü kısmının detaylı bir şekilde ilişkilendirilmesini sağlar. S3, sağlama toplamı göndermenizi / doğrulamanızı ve almanızı sağlar. Çoğullukla artımlı yedekleme yapan birçok insan var. S3'te çalışan rsync olmasa da, burada bahsettiğim gibi sağlama toplamı yapabilirsiniz.

rsync kanıtlanmış bir araçtır ve modern araçların çoğu aynı algoritmayı veya rsync kütüphanesini kullanır veya harici olarak rsync'i çağırır.


1
Bunun soruyu nasıl cevapladığını anlamıyorum. Ben yinelemenin rsync'in diğer tarafta daemon olmadan yaptığı şeyi yapmayı nasıl başardığını soruyordum. Bir sağlama toplamı bile alma kabiliyeti yoktur, belki de yapar, ancak sonra dosyaları nasıl artımlı günceller?
Jaimie Sirovich

TAMAM. Demek Duplicity'nin bu hastayı S3'ten kullandığını söylüyorsun ama aynı zamanda FTP üzerinden de çalıştığını iddia ediyor. FTP'de karma mekanizma yoktur. Güvenli tarafta hata yapma eğilimindeyim ve 'kanıtlanmış' araçları kullanmaya başladım. Rsync'in evet olduğu kanıtlandı, ancak s3 eklenti hizmeti s3rsync olmadan s3 yedeklemesi yapmıyor. Ben kopyadan biraz korkuyorum, ancak s3 ile aksesuar hizmeti olmadan bir miktar rsync benzeri işlevsellik elde edebilirsem daha geniş protokol çekiciliği var. Sadece ne kadar iyi çalıştığını anlamadım (ve muhtemelen çeşitli protokollerle farklı şekilde). FTP senkronizasyonu nasıl yapılır? :)
Jaimie Sirovich 20:12

@ JaimieSirovich Test edin ve görün. Yapmış olsaydınız, Duplicity'nin "manifest" dosyaları oluşturduğunu, ne yapmış olabileceği ile ilgili tüm bu yorumları yazmanızdan daha kısa sürede aldığını biliyordunuz .
ceejayoz

3

Alternatif olarak minio client aka mc kullanabilirsiniz . 'Mc mirror' komutunu kullanarak işi yaparsınız.

$ mc mirror share/sharegain/ s3/MyS3Bucket/share/sharegain 
  • mc: minio istemcisi
  • paylaşım / paylaşım: yerel dizin
  • s3: https://s3.amazonaws.com için takma ad
  • MyS3Bucket: Benim uzaktan S3 kova
  • share / sharegain: S3'teki nesnem

Basit bir senaryoyu cronjob olarak yazabilir ve periyodik aralıklarla senkronize tutabilirsiniz.

Umarım yardımcı olur.


Ayrıca -wşimdi fsnotifydeğişiklikleri izlemek için kullanacak bir bayrak var . Kolayca bir sistem servisi veya benzeri olarak ayarlanabilir.
alkar

2

Gerçek rsync'in Amazon için uygun olup olmadığından emin değilim.

Anladığım kadarıyla, standart rsync algoritması, müşterinin bir dosyanın her bloğu için karmaları hesapladığı ve sunucunun kopyası için karmaları hesapladığı ve bu karmaları müşteriye gönderdiği anlamına gelir;

Bu, Amazon için birçok sorunun İnternet üzerinden gönderilmesi gereken iki soruna neden olmakta ve aynı zamanda Amazon'un maliyetlerini artıracak tüm bu karmaşaları hesaplamak için işlem gücü gerektirmektedir - bu yüzden muhtemelen bunu üçüncü taraf sağlayıcılara bırakmaktadırlar. bu özellik için ekstra ücret.

Klonlara gelince, hash'leri bir yerde depoladıkları açıktır ve bir yerlerde klona bağlı olarak değişebilir. Karma'ları Amazon'da dosya başına ayrı bir nesne veya Amazon'da depolanan bir veritabanı olarak saklamak veya yerel olarak ve uzaktan saklamak mümkün olabilir.

Her iki şekilde yapmanın avantajları ve dezavantajları vardır. Karma dosyalar ayrı ayrı dosyalarda uzaktan saklanırsa, sürekli olarak onları almak pahalı olabilir. Karmalar uzaktan bir veritabanında saklanırsa, o zaman bu veritabanı genişleyebilir ve bunları sürekli olarak almak ve güncellemek pahalı olabilir. Karma yerel olarak saklanırsa, bu maliyetlerin düşürülmesine yardımcı olur, ancak başka komplikasyonlar ve problemler ortaya çıkarır.

(Tabii ki Amazon'un başka hizmetleri var, bu yüzden Amazon DB'de veri tabanı bulundurmak mümkün olacaktı)

Örnek olarak, yıllar önce bir erken rsync klonu denedim. Bu Amazon'un fiyat yapısını hesaba katmak için yazılmadı ve her bloğun hashını almak için çok sayıda http alır ve Amazon her biri için ücret aldığından, faturamın saklama kısmı keskin bir şekilde düştüğü zaman fırlamıştı.

Rsync + s3rsync + s3 yerine duplicity + s3 kullanarak ne kaybederim?

Rsync ile kaynak dosyaları yedekleme dosyalarınızla karşılaştırdığınızı bildiğiniz gerçeğini kaybedersiniz. İkili kopya ve diğer klonlarla, kaynak dosyalarınızı yedekleme gerçekleştirildiğinde alınan karma ile karşılaştırırsınız. Örneğin, S3'e doğrudan erişmek ve karmasını yeniden hesaplamadan veya karma veritabanını güncellemeden dosyalarından birini değiştirmek mümkün olabilir.


0

Bu başlıkta belirtilen birçok seçeneği karşılaştırdıktan sonra S3fs için gitmeye karar verdim. S3'ü yerel bir dosya sistemi olarak bağlamanıza izin verir. Daha sonra devam edebilir ve bildiğiniz gibi rsync kullanabilirsiniz.

Bu başlamak için iyi bir öğretici: Amazon S3 ile Rsync

Yazar daha önce belirtilen s3sync'i kullandı, ancak daha sonra S3F'ler ile seçeneğe geçti. Ayrıca, SSHFS aracılığıyla yerel olarak bağlanmış başka yedekleme klasörlerine de sahibim.


12
Tehlike, Will Robinson! Bu, rsync düşük bant genişlikli iletişimden herhangi bir fayda alamayacağınız için gerçekten pahalıdır - s3fs, dosyanın tamamını okumaktan (ve sonra değişirse yazmaktan sonra) okur, yani Amazon size iki kez fatura verir. Bunun yerine EC2 örneği kullanmayı ve ssh ile uzaktan rsync kullanmayı düşünün. Bir EC2 örneğinden S3'e transferler ücretsizdir, bu nedenle tek ödeyeceğiniz şey, rsync'in yerel makinenizden EC2 örneğine düşük bant genişliği iletişimidir. Talep üzerine bir EC2 mikro örneği çalıştırmak neredeyse hiçbir masraf gerektirmez.
David,

2
Bu! Orada rsync ve S3'ü anlamayanlar için çok fazla kötü tavsiye var ...
Mark

Bunun bir dezavantajı şu anda yönetmeniz gereken bir mikro örneğinizin olması. Önemsiz biliyorsan, ama birçoğunun girişine engel. Artı tarafta, EC2'ye bağlı EBS depolaması S3'ün bayt başına fiyatının yaklaşık yarısı kadardır.
Dan Pritts

@DavidGiven Eğer rcsnc kullanmadan doğrudan monte edilmiş s3fs'e yazdıysam ve daha sonra yaşam döngüsü boyunca uzun ömürlü olsaydım?
Forethinker
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.