Milyonlarca dosyayı iki Linux sunucusu arasında senkronize etme


10

Yerel diskten NFS aracılığıyla ağ istemcilerine ~ 7 milyon dosya (çoğunlukla görüntü) içeren bir dizini ihraç eden bir sunucum var .

HA uğruna ikinci bir tane eklemem ve ilkiyle mümkün olduğunca az delta ile senkronize tutmam gerekiyor.

Araştırma kullanmayı önerir lsyncd veya diğer Inotify bunun için tabanlı çözümler, ancak oluşturma dosya sayısı verilen Inotify saatler bir sonsuzluk alır. Aynı şey rsync için .

Diğer olası çözümler drdb veya ceph veya glusterfs gibi küme dosya sistemleri gibi görünüyor , ancak bunlarla ilgili hiçbir deneyimim yok ve hangisinin daha uygun olacağını ve birçok dosyayla iyi başa çıkacağını ve hala iyi performans sağladığını bilmiyorum.

Aktivitenin çoğunlukla az yazma ile okunduğuna dikkat edin.


2
DRDB iyi çalışır ve 2 makineli küme kurulumunda kurulumu ve anlaşılması kolaydır; ancak yakın gelecekte ölçeklenmeyecek. Konuya başka yaklaşımlar da olabilir. highscalability.com/blog/2012/6/20/…
Rui F Ribeiro

rsyncArka plan modunda koşmaya çalıştınız mı? Bu, rsynckomutu çalıştırırken dosya listesinin ilk neslini hızlandıracak , ancak dosya miktarına bağlı olarak RAM yoğun olacaktır.
Thomas

ne kadar gecikmeye tahammül edebilirsiniz? birkaç dakika (veya daha fazla) tolere edebilirseniz, btrfsveya zfsseçeneğini kullanarak , snapnnot'ları ve / zfs sendveya btrfs sendbunları yedekleme sunucusuna oluşturmak için bir cron işi ile birleştirebilirsiniz . anlık görüntü gönderiminin dosya zaman damgalarını veya sağlama toplamlarını karşılaştırması gerekmediğinden, rsync'den çok daha hızlı ve çok daha hafif bir iş yükü (hem gönderen hem de alıcı makineler için).
cas

BTW, ceph ile bir dosya deposu yerine bir nesne deposu (örneğin, amazon's s3 veya openstacks swift gibi) kullanma seçeneğine de sahip olursunuz. Aslında, ceph'in fs'si aslında nesne deposunun üstünde katmanlıdır.
cas

@Thomas: rsync -aDaemon (kaynakta) kullanmanın tamamlanması 200 dakika sürer, bu kabul edilebilir olandan daha fazladır. @cas: İçine bakacağım bir atışa değebilir btrfs send. Dosyaları kullanan uygulamanın geliştiricisi olmadığım için bir nesne deposuna geçemiyorum.
user60039

Yanıtlar:


1

Ben drbd gibi veri agnostik olan çoğaltma önermek eğilimindedir. Çok sayıda dosya, "blok depolama" dan daha yüksek bir düzeyde çalışan herhangi bir şeyin, rsync kullanarak veya inotify saatler oluştururken bulduğunuz gibi, ağaçta yürümek için çok fazla zaman harcamasına neden olacaktır.

Kişisel hikayemin kısa versiyonunu destekliyor: Ceph'i kullanmadım, ancak eminim ki Gluster ile olan benzerliğine dayanarak ana pazar hedeflerinde değiller. Bununla birlikte, son birkaç yıldır Gluster ile bu tür bir çözümü uygulamaya çalışıyorum. Birkaç ana sürüm güncellemesine rağmen, o zamanın çoğunda çalışıyor ve çalışıyor, ancak sorunum yoktu. Hedefiniz performanstan daha fazla yedeklilikse, Gluster iyi bir çözüm olmayabilir. Özellikle kullanım deseninizde çok sayıda stat () çağrısı varsa, Gluster çoğaltma ile çok iyi sonuç vermez. Bunun nedeni, çoğaltılmış birimlere yapılan stat çağrılarının çoğaltılmış düğümlerin tümüne gitmesidir (aslında "tuğla", ancak büyük olasılıkla ana bilgisayar başına bir tuğla olacaktır). Örneğin, 2 yönlü bir kopyanız varsa, bir istemciden her stat (), geçerli verileri kullandığından emin olmak için her iki tuğladan bir yanıt bekler. Daha sonra, yerel gluster dosya sistemini artıklık için kullanıyorsanız, FUSE ek yükü ve önbellek eksikliğiniz vardır (hala stat () nedeni için berbat olan NFS ile protokol ve otomatik sayaç için arka uç olarak Gluster kullanmak yerine) . Gluster, verileri birden fazla sunucuya dağıtabileceğiniz büyük dosyalarla gerçekten iyi sonuç verir; veri şeritleme ve dağıtımı iyi çalışıyor, çünkü bu tam olarak bunun için. Ve yeni RAID10 tipi çoğaltma, eski düz çoğaltılmış birimlerden daha iyi performans gösterir. Ancak, tahmin ettiğim şeye göre kullanım modeliniz, buna karşı tavsiye ediyorum. Daha sonra, yerel gluster dosya sistemini artıklık için kullanıyorsanız, FUSE ek yükü ve önbellek eksikliğiniz vardır (hala stat () nedeni için berbat olan NFS ile protokol ve otomatik sayaç için arka uç olarak Gluster kullanmak yerine) . Gluster, verileri birden fazla sunucuya dağıtabileceğiniz büyük dosyalarla gerçekten iyi sonuç verir; veri şeritleme ve dağıtımı iyi çalışıyor, çünkü bu tam olarak bunun için. Ve yeni RAID10 tipi çoğaltma, eski düz çoğaltılmış birimlerden daha iyi performans gösterir. Ancak, tahmin ettiğim şeye göre kullanım modeliniz, buna karşı tavsiye ediyorum. Daha sonra, yerel gluster dosya sistemini artıklık için kullanıyorsanız, FUSE ek yükü ve önbellek eksikliğiniz vardır (hala stat () nedeni için berbat olan NFS ile protokol ve otomatik sayaç için arka uç olarak Gluster kullanmak yerine) . Gluster, verileri birden fazla sunucuya dağıtabileceğiniz büyük dosyalarla gerçekten iyi sonuç verir; veri şeritleme ve dağıtımı iyi çalışıyor, çünkü bu tam olarak bunun için. Ve yeni RAID10 tipi çoğaltma, eski düz çoğaltılmış birimlerden daha iyi performans gösterir. Ancak, tahmin ettiğim şeye göre kullanım modeliniz, buna karşı tavsiye ediyorum. hala stat () nedeni için berbat. Gluster, verileri birden fazla sunucuya dağıtabileceğiniz büyük dosyalarla gerçekten iyi sonuç verir; veri şeritleme ve dağıtımı iyi çalışıyor, çünkü bu tam olarak bunun için. Ve yeni RAID10 tipi çoğaltma, eski düz çoğaltılmış birimlerden daha iyi performans gösterir. Ancak, tahmin ettiğim şeye göre kullanım modeliniz, buna karşı tavsiye ediyorum. hala stat () nedeni için berbat. Gluster, verileri birden fazla sunucuya dağıtabileceğiniz büyük dosyalarla gerçekten iyi sonuç verir; veri şeritleme ve dağıtımı iyi çalışıyor, çünkü bu tam olarak bunun için. Ve yeni RAID10 tipi çoğaltma, eski düz çoğaltılmış birimlerden daha iyi performans gösterir. Ancak, tahmin ettiğim şeye göre kullanım modeliniz, buna karşı tavsiye ediyorum.

Muhtemelen makineler arasında ana seçim yapmak için bir yol bulmanız veya dağıtılmış kilitleme uygulamanız gerektiğini unutmayın. Paylaşılan engelleme aygıtı çözümleri, çok yöneticili (GFS gibi) bir dosya sistemi veya dosya sisteminin okuma-yazma işlemine yalnızca bir düğümün bağlanmasını gerektirir. Genel olarak dosya sistemleri, verileri blok cihaz düzeyinde değiştirildiklerinde hoşlanmazlar. Bu, müşterilerinizin asıl hangisi olduğunu ve doğrudan yazma isteklerini söyleyebileceği anlamına gelir. Bu büyük bir sıkıntı olabilir. GFS ve tüm destekleyici altyapısı bir seçenekse, çoklu ana modda drbd ("çift birincil" olarak adlandırılır) iyi çalışabilir. Bununla ilgili daha fazla bilgi için https://www.drbd.org/tr/doc/users-guide-83/s-dual-primary-mode .

Hangi yöne gittiğinizden bağımsız olarak, bunun bir SAN şirketine sadece bir kamyon dolusu para vermeden gerçek zamanlı yapmak için oldukça büyük bir acı olduğunu keşfetmeye eğilimlisiniz.


Dağıtılmış bir dosya sistemi kullanmaya cron rsync komutlarından geçişin ilk aşamalarındayım. Gluster tüm tuğlalarda stat () çalıştırırsa, bunu bir çözüm olarak tekrar düşünmem gerekebilir.
Jesusaur

1
Çoğaltılmış bir dosya sisteminde durum böyledir; stat()baktığınız bloğun kopyalarına sahip tüm tuğlalarda çalışır . Örneğin, 2x2 şeritli bir çoğaltmanız varsa, statçoğaltılmış blokla iki tuğla üzerinde çalışır, ancak diğer ikisinde de çalışmaz. Çok sayıda küçük dosya içeren uygulamamda (her biri 4K veri altındaki bir milyon dosya sırasına göre), ne NFS ne de FUSE, çoğaltılan birimlerde iyi performans sağlamadı. Ve ~ 20 makinelere georeplication, birçok yapılandırmada çok güvenilmezdi.
dannysauer

1
Kilometreniz değişebilir, ancak Gluster'dan her yerde (sadece çoğaltma için kullanıyordum, Gluster'ın gerçekten iyi yaptığı diğer tüm harika şeyler için değil) yerel dosya sistemlerinde rsync'e taşındım. :) Şimdi cron yerine lsyncd ( github.com/axkibe/lsyncd ) ' e geçmeye bakıyorum , böylece Gluster yükü olmadan gerçek zamanlıya yaklaşabilirim.
dannysauer

0

Proxmox VE kurulumu ile rsync'ten ceph'e geçtim.

Şimdi 14TB'yi canlı çoğaltma ile tek bir kümede yönetiyorum. Yaklaşık 4 yıldır.

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.