Gitlab büyük ölçekli yedekleme nasıl yapılır?


13

Gitlab'ı şirket içi Gitlab'da 3 TB'lık bir yedeklemenin nasıl yapılacağı konusunda destek istediklerinde, bir tarball üreten aracımızı kullanarak yanıt verirler .

Bu sadece her seviyede benim için yanlış dikişler. Bu tarball postgres dökümü, docker görüntüleri, repo verileri, GIT LFS, vb config ve benzerlerini içerir. KB statik verilerinin KB çok dinamik verilerle birlikte yedeklenmesi doğru değildir. Ve sonra sorun geliyor, biz her saat bir yedekleme yapmak istiyoruz.

Soru

Tutarlı bir yedek almak için diğerlerinden nasıl yaptıklarını gerçekten bilmek istiyorum.

Eğer çözümün bir parçasıysa, Linux'taki ZFS benimle iyi olurdu.


3
Bu neden yanlış? Gitlab'inizi tamamen geri yüklemek için tamamen yedeklersiniz. Bunun yanlış olduğunu düşünmüyorum. Tabii ki artımlı yedeklemelerden çok daha fazla alan kullanıyor, ancak ... Yedekleme boyutunu umursamıyorum.
Lenniey

3
Saatte bir yedeğe sahip olmak duyulmamıştır, ancak yaklaşımlarıyla saatten daha kısa sürede 3 TB yapmak imkansızdır. Ve yalnızca bir günlük yedeklemeler ~ 100 TB olacaktır, burada verilerde yalnızca 10 MB değişiklik olabilir.
Sandra

Tamam, bu farklı bir soru, genel olarak yedekleme hakkında değil, sık sık yedekleme hakkında.
Lenniey

5
Onların içinde resmi dokümanlar bile yavaş olarak kendi yöntemini söz ve alternatifler önermek: If your GitLab server contains a lot of Git repository data you may find the GitLab backup script to be too slow. In this case you can consider using filesystem snapshots as part of your backup strategy.Gerçi deneyimlerinden konuşamıyor. Ama yakında böyle bir şey
eklemem gerekebilir

Gitlab, yapılandırma dosyasında ve bölümleri hariç tutmanıza ya da bir nesne deposunda görüntü ve yapay nesneler depolayabileceğiniz yedek bayraklarda seçeneklere sahiptir
ssube

Yanıtlar:


10

Yedeklemeler (1 saat) arasında böyle kısa bir süre için en iyi seçenek dosya sistemi düzeyinde anlık görüntü ve send/recv desteğe güvenmektir .

ZoL kullanmak ortamınızda bir sorun değilse, kesinlikle kullanmanızı öneririm. ZFS çok sağlam bir dosya sistemidir ve sunduğu tüm ekstraları (örneğin: sıkıştırma) gerçekten seveceksiniz. İle birleştiğinde sanoid/syncoid, çok güçlü bir yedekleme stratejisi sağlayabilir. Ana dezavantaj, ana çekirdeğe dahil edilmediğinden, ayrı olarak yüklemeniz / güncellemeniz gerekir.

Alternatif olarak, kendinizi ana hatta dahil olanlarla sınırlamanız gerekiyorsa, BTRFS kullanabilirsiniz. Ancak (birçok) dezavantajını ve pidesini anladığınızdan emin olun .

Son olarak, alternatif bir çözüm kullanmaktır lvmthin: (örn düzenli yedekleme almaya snapper: (örn üçüncü parti araçları güvenerek) bdsync, blocksync/ gemi deltalar sadece kopyalamak için, vs).

Farklı bir yaklaşım, birbirinden bağımsız anlık görüntüler aldığınız iki çoğaltılmış makineye sahip olmak olacaktır .DRBDlvmthin


Postgres ne olacak? Gitlab ve postgres bir dakika durdurulabilir, böylece tutarlı bir shapshot yapılabilir mi? İdeal olarak, fotoğraf çekilirken postgres salt okunur bir moda alınabilmesi harika olurdu.
Sandra

4
@Sandra dosya sisteminden geri yükleme anlık görüntülerini postgresql (ve diğer düzgün yazılmış veritabanları) genel bir "ana bilgisayar çökmesi" senaryosu olarak görünmeli ve kendi kurtarma prosedürünü tetiklemelidir (örn: ana veritabanına kısmen yazılan herhangi bir sayfa). Başka bir deyişle, anlık görüntüler çekerken postgres'i salt okunur moda sokmanıza gerek yoktur.
shodanshok

14

Neleri yedeklediğinizi gözden geçirir ve muhtemelen "çok yollu" bir yaklaşım kullanırsınız. Örneğin, Git sunucularını sürekli olarak bir yedekleme sunucularında çalıştırarak Git depolarını yedekleyebilirsiniz. Bu sadece farkı kopyalar ve tüm Git depolarının ikinci bir kopyasını size bırakır. Muhtemelen API ile yeni depoları tespit edebilirsiniz.

Ve sorunları, vb yedeklemek için "yerleşik" yedekleme prosedürlerini kullanın. 3 TB bu bölümden geliyor, bu yüzden çok az maliyetle çok sık yedekleme yapmak mümkün olacağını şüpheliyim. PostgreSQL veritabanını çoğaltma ile sıcak bir bekleme ile de ayarlayabilirsiniz.

Muhtemelen 3TB'niz Docker kayıt defterindeki konteyner görüntülerinden gelir. Bunları yedeklemeniz mi gerekiyor? Eğer öyleyse, sadece bunun için daha iyi bir yaklaşım olabilir.

Temel olarak, yedeklemenizi oluşturan ve çeşitli bölümlerdeki verileri yedekleyen gerçekten ne olduğuna bakmanızı öneririm.

GitLab'ın yedekleme aracı bile sistemin Docker Kayıt Defteri gibi belirli bölümlerini dahil etme / hariç tutma seçeneklerine sahiptir.


1
git pulls mükemmel bir artımlı yedekleme değildir. git push --forcenasıl uygulandığına bağlı olarak yedekleri kırar veya onlardan geçmişi siler.
user371366

@ dn3s bu yüzden git depolamayı her zaman ana depoda devre dışı bırakırsınız. Birisi geçmişi değiştirmek isterse kendi çatalını yapabilir ve getirdiği tüm riskleri kabul edebilir.
charlie_pl

2
bu, çoğaltma için iyi olabilir , ancak yedeklemelerinizin bütünlüğünün doğru uygulama davranışına güvenmesini istemezsiniz. uygulamada bir hata varsa veya yolda yanlış yapılandırılmışsa ne olur? sunucunuz kötü niyetli bir kullanıcı tarafından ele geçirilirse ne olur? uygulamanız yedekleme ana bilgisayarından içerik kaldırma yeteneğine sahipse, artımlı uzak yedeklemelerin değerinin çoğu kaybolur.
user371366
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.