Yang lebih baik untuk cadangan situs web - rsync atau git push

16

Saya menjalankan 2 server web LAMP di penyedia yang berbeda untuk keperluan pemulihan bencana - server live bertenaga tinggi, dan server cadangan berdaya rendah.

Saat ini saya rsync semua data dari server langsung ke server cadangan setiap 4 jam sekali.

Ini berfungsi dengan baik, tetapi tidak lonjakan beban sistem sementara rsync mengetahui file mana yang telah berubah.

Karena semua situs web juga hidup dalam repositori git, saya bertanya-tanya apakah dorongan git akan menjadi teknik cadangan yang lebih baik.

Saya harus memasukkan folder unggahan langsung di git repo; dan kemudian proses pencadangan akan:

live$ git add .
live$ git commit -a -m "{data-time} snapshot"
live$ git push backup live_branch

dan kemudian memiliki kait komit posting di server cadangan untuk checkout pada setiap dorongan.

Setiap situs web memiliki ukuran mulai dari 50M hingga 2GB. Saya akan berakhir dengan sekitar 50 repositori git yang terpisah.

Apakah ini solusi "lebih baik" daripada rsync?

  • Apakah git lebih baik dalam menghitung file mana yang telah berubah?
  • Apakah git push lebih efisien daripada rsync
  • Apa yang sudah saya lupakan?

Terima kasih!

---- Data dari beberapa tes perbandingan ------

1) folder 52MB kemudian menambahkan folder 500k baru (terutama file teks)

rsync

sent 1.47K bytes  received 285.91K bytes  
total size is 44.03M  speedup is 153.22

real    0m0.718s    user    0m0.044s    sys     0m0.084s

git

Counting objects: 38, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (37/37), done.
Writing objects: 100% (37/37), 118.47 KiB, done.
Total 37 (delta 3), reused 0 (delta 0)

real    0m0.074s     user   0m0.029s    sys     0m0.045s

2) Folder 1.4G kemudian menambahkan folder 18M baru (terutama gambar)

rsync

sent 3.65K bytes  received 18.90M bytes
total size is 1.42G  speedup is 75.17

real    0m5.311s    user    0m0.784s    sys     0m0.328s

git

Counting objects: 108, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (106/106), done.
Writing objects: 100% (107/107), 17.34 MiB | 5.21 MiB/s, done.
Total 107 (delta 0), reused 0 (delta 0)

real    0m15.334s    user   0m5.202s    sys     0m1.040s

3) Folder 52M kemudian tambahkan folder 18M baru (terutama gambar)

rsync

sent 2.46K bytes  received 18.27M bytes  4.06M bytes/sec
total size is 62.38M  speedup is 3.41

real    0m4.124s    user    0m0.640s    sys     0m0.188s

git

Counting objects: 108, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (106/106), done.
Writing objects: 100% (107/107), 17.34 MiB | 5.43 MiB/s, done.
Total 107 (delta 1), reused 0 (delta 0)

real    0m6.990s    user    0m4.868s    sys     0m0.573s

4) Folder 1.4G kemudian menambahkan folder 500k baru (terutama teks)

rsync

sent 2.66K bytes  received 916.04K bytes  612.47K bytes/sec
total size is 1.42G  speedup is 1547.14

real    0m1.191s    user    0m0.180s    sys     0m0.268s

git

Counting objects: 49, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (48/48), done.
Writing objects: 100% (48/48), 177.90 KiB, done.
Total 48 (delta 3), reused 0 (delta 0)

real    0m1.776s    user    0m0.390s    sys     0m0.497s

5) 1.4G folder - tidak ada perubahan

rsync

sent 1.72K bytes  received 716.44K bytes  287.26K bytes/sec
total size is 1.42G  speedup is 1979.18

real    0m1.092s    user    0m0.168s    sys     0m0.272s

git

nothing to commit (working directory clean)

real    0m0.636s    user    0m0.268s    sys     0m0.348s

5) folder 52M - tidak ada perubahan

rsync

sent 528 bytes  received 88.40K bytes  59.29K bytes/sec
total size is 62.38M  speedup is 701.41

real    0m0.779s    user    0m0.044s    sys     0m0.144s

git

nothing to commit (working directory clean)

real    0m0.156s    user    0m0.057s    sys     0m0.097s
David Laing
sumber
3
bagaimana dengan "nice rsync"? Penghematan beban sistem persis seperti yang Anda inginkan: Selesaikan proses AFAP, dan ini OK selama tidak mengganggu operasi situs web.
1
Terima kasih - saya sudah melakukan "nice rsync", yang membantu
David Laing

Jawaban:

4

Sebenarnya saya akan menyarankan menggunakan campuran keduanya. Cadangan utama Anda harus dilakukan (setidaknya) setiap malam untuk git. Sinkronkan sekali atau dua kali seminggu ke mesin lain yang disimpan jauh dari kotak produksi menggunakan rsync.

Git akan membantu Anda dengan pemulihan langsung dan juga membuat analisis data lebih mudah karena fakta bahwa cadangan Anda versi-ed dan memiliki changelog. Setelah ada perubahan besar pada data, Anda dapat melakukan komit dan mendorong untuk git secara manual dan memasukkan alasannya di changelog. Dalam kasus git memburuk maka rsync akan datang untuk menyelamatkan tetapi perlu diingat bahwa Anda masih akan kehilangan data tergantung pada frekuensi rsync.

Rule of thumb: ketika datang ke backup dan pemulihan bencana, tidak ada yang bisa menjamin untuk memberikan Anda pemulihan 100%.

Aditya Patawari
sumber
2

Rsync adalah alat sync indah, tetapi Anda mendapatkan lebih banyak fleksibilitas ketika menjalankan Git pada server (s), dan pushing atau pulling update.

Saya harus melacak dan mencadangkan konten yang dibuat pengguna di server kami. The productionserver memiliki salinan dari git repo, dan setiap malam secara otomatis menambah dan melakukan semua file baru melalui cron. Itu pushdiedit ke server gitolite kami, yang kemudian menggunakan kait untuk menyinkronkan server lainnya.

Karena server memiliki salinan repo on-board, Anda tidak hanya mendapatkan snapshot, tetapi juga informasi riwayat terperinci yang dapat dengan mudah menyelamatkan Anda jika terjadi sesuatu pada server Anda.

Saya pikir Anda cukup memiliki pemahaman yang baik tentang apa yang keduanya tawarkan, saya hanya akan mengubah pemikiran Anda dari server memeriksa / mengekspor basis kode ke hanya memiliki repo sendiri. Pikiran lain adalah Anda dapat melakukan rsync file media Anda (Anda mengatakan 2GB untuk beberapa situs ini, yang membuat saya berpikir ada banyak jenis file media?) Dan tidak melacaknya di Git.

Nic
sumber
Saya telah menambahkan beberapa data kinerja; yang menunjukkan bahwa rsync hampir selalu lebih cepat daripada git. Namun, saya suka poin Anda tentang kekuatan tambahan memiliki repositori git di server langsung - Saya bertanya-tanya apakah pendekatan hibrid tidak terbaik, dengan perubahan yang didorong ke repositori git, dan kemudian repositori git dirubah ke cadangan server ...
David Laing