Soru Web sitesi yedekleme için daha iyidir - rsync veya git push


Felaket kurtarma amacıyla farklı sağlayıcılarda 2 LAMP web sunucusu çalıştırıyorum - yüksek güçlü bir canlı sunucu ve düşük güçlü bir yedek sunucu.

Şu anda tüm verileri her 4 saatte bir canlı sunucudan yedek sunucuya rsync ediyorum.

Bu tamam çalışıyor, ancak sistem yükünü artırıyor, rsync hangi dosyaların değiştiğini gösteriyor.

Tüm web siteleri git depolarında da yaşadığından, bir gitmenin daha iyi bir yedekleme tekniği olup olmayacağını merak ediyorum.

Canlı yüklemeler klasörünü git repo'ya dahil etmeliyim; ve daha sonra yedekleme işlemi şöyle olurdu:

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

ve daha sonra, her basışta ödeme yapmak için yedek sunucuda bir gönderiye sahip ol.

Her web sitesi, 50M ile 2GB arasında değişir. Yaklaşık 50 ayrı git reposuyla sonuçlanırdım.

Bu rsync'den daha iyi bir çözüm mü?

  • Git hangi dosyaların değiştiğini hesaplamakta daha iyidir?
  • Git rsync'in daha verimli olması
  • Ne unuttum?

Teşekkürler!

---- Bazı karşılaştırma testlerinden elde edilen veriler ------

1) 52MB klasörüne yeni bir 500k klasörü ekleyerek (temel olarak metin dosyaları)

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) 1.4G klasörünün ardından yeni bir 18M klasörünün eklenmesi (özellikle görüntüler)

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) 52M klasörü daha sonra yeni bir 18M klasörünün eklenmesi (özellikle görüntüler)

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) 1.4G klasörü daha sonra yeni bir 500k klasörü (özellikle metin) ekleyerek

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 klasörü - değişiklik yok

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) 52M klasörü - değişiklik yok

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

14
2017-12-27 13:32


Menşei


Bir "güzel rsync" ne dersiniz? Sistem yükü spikingi tam olarak istediğiniz şeydir: İşlemi AFAP olarak bitirin ve bu, web sitesinin çalışmasına müdahale etmediği sürece tamamdır.
Teşekkürler - Zaten yardımcı olan bir "güzel rsync" yapıyorum - David Laing


Cevaplar:


Aslında her ikisinin dengeli bir karışımını kullanmanızı öneririm. Ana yedeklemeniz her gece (en azından) gitmelidir. Haftada bir veya iki kez, rsync kullanarak üretim kutusundan çok uzakta bulunan başka bir makineye senkronize edin.

Git, anında kurtarma konusunda size yardımcı olacaktır ve ayrıca, yedeklemenin sürüm-sürüm olması ve bir değişime sahip olması nedeniyle verilerin analizini kolaylaştırır. Verilere herhangi bir büyük değişiklik yapıldıktan sonra, bir taahhütte bulunup, el ile git'e basabilir ve sebebi değişebilir. Git kötü giderse, rsync kurtarmaya gelecektir, ancak rsync frekansına bağlı olarak hala veri kaybedeceğinizi unutmayın.

Kural: Yedekleme ve felaket kurtarma söz konusu olduğunda, hiçbir şey% 100 iyileşme vermeyi garanti edemez.


3
2017-12-28 10:17





Rsync harika bir senkronizasyon aracıdır, ancak Git'i sunucuda çalıştırırken çok daha fazla çok yönlülük elde edersiniz ve pushveya pullgüncellemeler.

Sunucumuzda kullanıcı tarafından oluşturulan içeriği izlemem ve yedeklemem gerekiyor. production Sunucu git repo'nun bir kopyasına sahiptir ve her gece otomatik olarak yeni dosyaları ekleyerek cron üzerinden gönderir. Onlar pushgitolite sunucumuza gidip, sunucuların geri kalanını senkronize etmek için kancalar kullanırız.

Sunucuların repo'ların kopyaları kopyalandığından, yalnızca bir anlık görüntü değil, sunucunuza bir şey olursa sizi kolayca kurtarabilecek ayrıntılı geçmiş bilgileri de elde edersiniz.

Bence her ikisinin de ne sunduğuna dair iyi bir anlayışa sahip olursun, ben sadece kendi reposlarına sahip olmak için kod tabanını kontrol eden / dışa aktaran sunuculardan düşünme hattını değiştirirdim. Başka bir düşünceniz, medya dosyalarınızı rsync edebilmeniz (bu sitelerden bazıları için 2GB dediniz, bu da bana çok fazla dosya türü olduğunu düşünmemi sağlıyor) ve onları Git'de izlememenizdir.


2
2017-12-27 21:06



Bazı performans verileri ekledim; ki rsync'in neredeyse her zaman git'den daha hızlı olduğunu gösterir. Ancak, canlı sunucuda git repos sahip olmanın ekstra gücü hakkında puanınızı seviyorum - Ben bir hibrid yaklaşımın en iyisi olmadığını, değişikliklerin git repo içine itilmiş olup olmadığını merak ediyorum ve daha sonra git repos yedekleme için rsynced ediliyor sunucu ... - David Laing