Bagaimana cara efisien menggunakan S3 untuk membuat cadangan file secara bertahap?

42

Saya mengerti bagaimana rsync bekerja pada level tinggi, tetapi ada 2 sisi. Dengan S3 tidak ada daemon untuk dibicarakan - yah ada, tetapi pada dasarnya hanya HTTP.

Tampaknya ada beberapa pendekatan.

s3rsync (tapi ini hanya baut pada rsync ke s3). Mudah. Tidak yakin saya ingin bergantung pada sesuatu yang pihak ke-3. Saya berharap s3 hanya mendukung rsync.

Ada juga beberapa 'klon' rsync seperti duplikat yang mengklaim mendukung s3 tanpa mengatakan baut-on. Tetapi bagaimana ia bisa melakukan ini? Apakah mereka menyimpan file indeks secara lokal? Saya tidak yakin bagaimana itu bisa seefisien.

Saya jelas ingin menggunakan s3 karena murah dan dapat diandalkan, tetapi ada beberapa hal yang menjadi alat rsync, seperti mencadangkan direktori gambar raksasa.

Apa saja opsi di sini? Apa yang saya kehilangan dengan menggunakan duplikat + s3 bukan rsync + s3rsync + s3?

Jaimie Sirovich
sumber
4
S3 murah? Itu berita baru bagi saya. Andal? Pasti, tapi tidak murah.
EEAA
5
Nah, s3 adalah $ 0,13 / gb atau kurang karena Anda menyimpan lebih banyak atau ingin redundansi lebih sedikit. Pencarian cepat mengungkapkan evbackup.com untuk penyimpanan rsync. Jauh lebih mahal. Apa yang lebih murah dan memiliki tingkat redundansi?
Jaimie Sirovich
Jika saya mendesain rsync, itu akan mendukung plugin sehingga protokol baru (mis. S3: //) dapat ditambahkan. Namun, saat ini, rsync tidak mendukung ini, jadi saya tidak percaya rsync dapat digunakan secara langsung untuk membuat cadangan hingga S3.
Edward Falk
Masalah berikutnya adalah saya tidak berpikir S3 menyimpan metadata seperti kepemilikan atau izin, jadi menggunakan mis. "Aws s3 sync" untuk melakukan pencadangan akan berfungsi tetapi mungkin tidak cocok untuk pencadangan penuh sistem file Unix, karena terlalu banyak data akan hilang saat dipulihkan. Saya juga berpikir symlink, hardlink, dan file khusus lainnya akan hilang.
Edward Falk

Jawaban:

39

Karena pertanyaan ini terakhir dijawab, ada alat baris perintah AWS baru aws,.

Itu dapat menyinkronkan , seperti rsync, antara penyimpanan lokal dan s3. Contoh penggunaan:

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

Jika lingkungan python sistem Anda diatur dengan benar, Anda dapat menginstal klien AWS menggunakan pip:

pip install awscli
Dan Pritts
sumber
1
Dalam pengalaman saya, ini mengunggah semuanya, bukan hanya delta perubahan. Sebagai contoh, saya mendorong situs statis ke server dev rsync, dan butuh rata-rata 1 detik, hanya dengan perubahan keluar melalui koneksi saya yang lambat. aws s3 syncdi sisi lain, membutuhkan waktu sekitar 5 menit, mentransfer kembali setiap file.
ryebread
2
Saya percaya Anda bahwa itu tidak berfungsi, tetapi dokumen mengatakan "File lokal akan memerlukan pengunggahan jika ukuran file lokal berbeda dari ukuran objek s3, waktu modifikasi terakhir dari file lokal lebih baru daripada waktu modifikasi terakhir dari objek s3, atau file lokal tidak ada di bawah bucket dan awalan yang ditentukan. " Pastikan Anda memiliki aws-cli versi terbaru - jika Anda dapat mereproduksi ini, ajukan bug pada mereka di github. Mereka responsif ketika saya mengajukan bug beberapa waktu lalu.
Dan Pritts
Perintahnya harus: aws s3 sync / some / local / dir / s3: // mybucket
Carlo S
1
Carlos, aku tidak yakin apa maksudmu. Jika Anda bermaksud menyarankan bahwa contoh perintah saya salah, kami berdua benar. Sinkronisasi s3 dapat bekerja di kedua arah.
Dan Pritts
Terlambat ke pesta, tetapi inilah yang terjadi: Saat mengunggah ke S3, aturan pemeriksaan cepat berlaku (unggah jika ukuran atau tanggal telah berubah). Saat mengunduh , tidak ada aturan pemeriksaan cepat, dan semuanya diunduh tanpa syarat.
Edward Falk
16

Alat s3cmd memiliki syncopsi bagus . Saya menggunakannya untuk menyinkronkan cadangan lokal, menggunakan sesuatu seperti:

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

The --skip-existingberarti tidak mencoba untuk checksum membandingkan file yang ada. Jika sudah ada file dengan nama itu, ia akan langsung melewatinya dan melanjutkan. Ada juga --delete-removedopsi yang akan menghapus file yang tidak ada secara lokal, tapi saya ingin tetap S3 bahkan yang sudah saya bersihkan secara lokal jadi saya tidak menggunakan ini.

Nic Cottrell
sumber
5

Tidak ingin memberi tahu orang lain apa yang harus dilakukan tetapi bolehkah saya mengibarkan bendera untuk bermuka dua? atau solusi cadangan tambahan lainnya. Menyinkronkan semuanya sangat baik, tetapi jika Anda membuat cadangan setiap malam, apa yang terjadi jika Anda tidak melihat masalah selama dua hari? Jawaban: Sudah terlambat, file lokal Anda dan cadangan Anda adalah cermin satu sama lain dan tidak memiliki data yang Anda butuhkan. Anda benar-benar harus mempertimbangkan cadangan tambahan atau snapshot sehingga Anda dapat memulihkan ke waktu tertentu dan untuk melakukan ini secara efisien Anda memerlukan cadangan tambahan. Dan jika kehilangan data Anda adalah akhir dari skenario dunia maka simpan salinan di penyedia yang berbeda seperti yang Anda tidak pernah tahu, maka bisa hilang, diretas siapa tahu.

Saya menggunakan duplikat dan s3, baik-baik saja tetapi intensif CPU. Tapi itu memang incremental backup. Dalam keadaan darurat ketika Anda ingin mengembalikan dir atau file tertentu, seperti yang terakhir Rabu, atau Januari lalu, tanpa mengembalikan file lain pada partisi yang sama Anda memerlukan cadangan tambahan dan alat di mana Anda dapat meminta hanya file yang Anda butuhkan.

Saya memiliki cron, yang penuh setiap x bulan, jika tidak bertambah dan dihapus lebih lama dari x bulan untuk menjaga total penyimpanan s3 tetap turun, akhirnya status pengumpulan jadi saya dikirim setiap pagi dengan status. Anda perlu mengawasi secara teratur sehingga Anda melihat ketika cadangan Anda tidak berfungsi.

Dibutuhkan ruang temp lokal yang signifikan untuk menyimpan tanda tangan lokal sehingga mengatur dir temp dengan hati-hati. Ini backup / mnt, tidak termasuk berbagai dirs di dalam / mnt. Ini bagus untuk mencadangkan data, karena partisi sistem menggunakan pencitraan amazon atau alat snapshot.

Skrip 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")
Mendongkrak
sumber
1
nyalakan versi untuk bucket s3, maka itu akan menyimpan salinan lama
mcmillab
3

S3 adalah sistem penyimpanan objek tujuan umum yang memberikan fleksibilitas yang cukup bagi Anda untuk merancang bagaimana Anda ingin menggunakannya.

Saya tidak yakin dari pertanyaan Anda masalah dengan rsync (selain pengindeksan) atau masalah dengan alat 'pihak ke-3' yang Anda temui.

Jika Anda memiliki banyak file yang terstruktur dengan baik, Anda dapat menjalankan beberapa sinkronisasi s3 pada sub-folder Anda.

Orang-orang baik di Amazon juga memungkinkan Anda untuk melakukan impor / ekspor dari hard drive portabel Anda untuk transfer file besar ke S3 atau EBS - http://aws.amazon.com/importexport/ yang dapat Anda gunakan untuk unggahan pertama.

Lihat praktik terbaik Amazon s3 di sini - http://aws.amazon.com/articles/1904

Sejauh alat berbeda, coba mereka dan lihat mana yang paling cocok untuk Anda. Mengenai harga, ada pengurangan harga redundansi jika sesuai dengan kebutuhan Anda - http://aws.amazon.com/s3/pricing/

Rekomendasi umum - memiliki CPU multicore yang cepat dan pipa jaringan yang baik.

PEMBARUAN: Sebutkan tentang checksumming pada S3

Mengenai S3, menyimpan data dalam pasangan nilai kunci dan tidak ada konsep direktori. S3sync memverifikasi checksum (S3 memiliki mekanisme untuk mengirim checksum sebagai header untuk verifikasi - header Content-MD5). Tautan praktik terbaik menghubungkan bagian Integritas Data dengan detail. S3 memungkinkan Anda untuk mengirim / memverifikasi dan mengambil checksum. Ada banyak orang yang melakukan backup inkremental dengan bermuka dua. Meskipun tidak ada rsync yang berjalan pada S3, Anda dapat melakukan checksum seperti yang saya sebutkan di sini.

rsync adalah alat yang terbukti dan sebagian besar alat modern menggunakan algoritma yang sama atau pustaka rsync atau memanggil rsync secara eksternal.

Chida
sumber
1
Saya tidak melihat bagaimana ini menjawab pertanyaan. Saya bertanya bagaimana kepalsuan berhasil melakukan apa yang dilakukan rsync tanpa daemon di sisi lain. Ia tidak memiliki kemampuan untuk bahkan mendapatkan checksum, atau mungkin itu, tetapi kemudian bagaimana hal itu akan memperbarui file secara bertahap?
Jaimie Sirovich
BAIK. Jadi Anda mengatakan bahwa Duplicity menggunakan hash ini dari S3, tetapi ia juga mengklaim berfungsi melalui FTP. FTP tidak memiliki mekanisme hashing. Saya cenderung berbuat salah di sisi yang aman dan menggunakan alat yang 'terbukti'. Rsync terbukti ya, tetapi tidak akan melakukan backup s3 tanpa layanan add-on s3 s3rsync. Saya agak takut pada duplikat, tetapi memiliki daya tarik protokol yang lebih luas jika saya bisa mendapatkan beberapa fungsionalitas seperti rsync dengan s3 tanpa mengatakan layanan aksesori. Saya hanya tidak mengerti seberapa baik kerjanya (dan mungkin berbeda dengan berbagai protokol). Bagaimana caranya sinkronisasi FTP? :)
Jaimie Sirovich
@JaimieSirovich Uji dan lihat. Jika sudah, Anda akan tahu Duplicity membangun file "nyata" dalam waktu kurang dari yang Anda butuhkan untuk mengetik semua komentar ini tentang apa yang mungkin dilakukan.
ceejayoz
3

Atau Anda dapat menggunakan minio client alias mc Menggunakan perintah 'mc mirror' akan melakukan pekerjaan itu.

$ mc mirror share/sharegain/ s3/MyS3Bucket/share/sharegain 
  • mc: klien minio
  • share / sharegain: direktori lokal
  • s3: Alias ​​untuk https://s3.amazonaws.com
  • MyS3Bucket: Ember S3 jarak jauh saya
  • bagikan / bagikan: objek saya di s3

Anda dapat menulis skrip sederhana sebagai cronjob yang akan menjaga sinkronisasi pada interval periodik.

Semoga bermanfaat.

Atul
sumber
Ada juga -wbendera sekarang, yang akan digunakan fsnotifyuntuk melihat perubahan. Dapat dengan mudah diatur sebagai layanan sistem atau serupa.
alkar
2

Saya tidak yakin apakah rsync yang benar cocok untuk Amazon.

Seperti yang saya pahami, algoritma rsync standar berarti klien menghitung hash untuk setiap blok file dan server menghitung hash untuk salinannya dan mengirimkan hash itu ke klien yang berarti klien dapat menentukan blok mana yang telah berubah dan perlu mengunggah.

Itu menyebabkan dua masalah bagi Amazon karena banyak hash yang harus dikirim melalui internet dan juga dibutuhkan kekuatan pemrosesan untuk menghitung semua hash yang akan meningkatkan biaya Amazon - yang mungkin mengapa mereka menyerahkannya kepada penyedia pihak ketiga yang dapat biaya tambahan untuk fitur itu.

Adapun klon, mereka jelas menyimpan hash di suatu tempat dan di suatu tempat dapat bervariasi tergantung pada klon. Mungkin bagi mereka untuk menyimpan hash sebagai objek terpisah per file di Amazon atau sebagai database yang disimpan di Amazon atau mereka dapat menyimpannya secara lokal dan jarak jauh.

Ada kelebihan dan kekurangan dalam melakukannya. Jika hash disimpan secara jarak jauh dalam file individual, maka bisa mahal untuk terus mengambilnya. Jika hash disimpan dalam basis data jarak jauh, maka basis data ini dapat menjadi besar dan bisa mahal untuk terus mengambil dan memperbaruinya. Jika hash disimpan secara lokal, maka ini membantu mengurangi biaya, tetapi menimbulkan komplikasi dan masalah lain.

(Tentu saja Amazon memiliki layanan lain, sehingga dimungkinkan untuk menyimpan basis data di Amazon DB)

Sebagai contoh, saya mencoba satu klon rsync awal beberapa tahun yang lalu. Ini tidak ditulis untuk memperhitungkan struktur harga Amazon dan mengeluarkan banyak http untuk mengambil hash dari setiap blok dan karena biaya Amazon untuk setiap get, itu berarti bahwa sementara bagian penyimpanan tagihan saya turun tajam, bagian transfer menggelembung.

Apa yang saya kehilangan dengan menggunakan duplikat + s3 bukan rsync + s3rsync + s3?

Anda kehilangan fakta bahwa dengan rsync Anda tahu Anda membandingkan file sumber dengan file cadangan Anda. Dengan duplikat dan klon lainnya, Anda membandingkan file sumber Anda dengan hash yang diambil saat cadangan dilakukan. Sebagai contoh, dimungkinkan untuk mengakses S3 secara langsung dan mengganti salah satu file-nya tanpa menghitung ulang hash atau memperbarui database hash.

sgmoore
sumber
0

Setelah membandingkan beberapa opsi yang disebutkan di utas ini, saya memutuskan untuk menggunakan S3fs. Ini memungkinkan Anda untuk memasang S3 sebagai sistem file lokal. Anda kemudian dapat melanjutkan dan menggunakan rsync dengan cara yang sudah Anda ketahui.

Ini adalah tutorial yang bagus untuk memulai: Amazon S3 dengan Rsync

Penulis sebelumnya menggunakan s3sync yang disebutkan, tetapi kemudian beralih ke opsi dengan S3Fs. Saya menyukainya karena saya juga memiliki folder cadangan lain yang dipasang secara lokal melalui SSHFS.

Hendrik
sumber
12
Bahaya, Will Robinson! Ini sangat mahal karena Anda tidak mendapatkan manfaat dari komunikasi bandwidth rendah rsync --- s3fs akan berakhir dengan membaca (dan kemudian menulis, jika itu berubah) seluruh file, yang berarti Amazon akan menagih Anda dua kali. Alih-alih mempertimbangkan menggunakan instance EC2 dan menggunakan rsync dari jarak jauh melalui ssh. Transfer ke S3 dari instance EC2 gratis, jadi yang Anda bayar adalah komunikasi bandwidth rendah rsync dari mesin lokal Anda ke instance EC2. Menjalankan mesin virtual EC2 berdasarkan permintaan hampir tidak ada biaya.
David Diberi
2
Ini! Ada banyak saran buruk di luar sana untuk mereka yang tidak mengerti rsync dan S3 ...
Mark
Kelemahan dari ini adalah sekarang Anda memiliki instance mikro untuk dikelola. Sepele jika Anda tahu caranya, tetapi penghalang untuk masuk bagi banyak orang. Di sisi positifnya, penyimpanan EBS yang terpasang EC2 adalah sekitar setengah harga per byte S3.
Dan Pritts
@ DavidVGiven Bagaimana jika saya menulis langsung ke s3fs yang dipasang tanpa menggunakan rysnc dan kemudian mengatur umur panjang melalui siklus hidup?
Forethinker