Kami memiliki struktur folder di intranet kami yang berisi sekitar 800.000 file yang dibagi menjadi sekitar 4.000 folder. Kami perlu menyinkronkan ini ke sekelompok kecil mesin di DMZ kami. Kedalaman struktur sangat dangkal (tidak pernah melebihi dua tingkat dalam).
Sebagian besar file tidak pernah berubah, setiap hari ada beberapa ribu file yang diperbarui dan 1-2 ribu file baru. Data tersebut adalah data pelaporan historis yang dikelola di mana data sumber telah dibersihkan (yaitu ini adalah laporan akhir yang datanya cukup lama yang kami arsipkan dan hapus). Sinkronisasi sekali per hari sudah cukup mengingat hal itu bisa terjadi dalam kerangka waktu yang masuk akal. Laporan dihasilkan dalam semalam, dan kami menyinkronkan hal pertama di pagi hari sebagai tugas yang dijadwalkan.
Tentunya karena sedikit file yang berubah secara teratur, kami dapat mengambil manfaat besar dari salinan tambahan. Kami telah mencoba Rsync, tetapi itu bisa memakan waktu delapan hingga dua belas jam hanya untuk menyelesaikan operasi "membangun daftar file". Sudah jelas bahwa kita dengan cepat melampaui kemampuan rsync (jangka waktu 12 jam terlalu lama).
Kami telah menggunakan alat lain yang disebut RepliWeb untuk menyinkronkan struktur, dan itu dapat melakukan transfer tambahan dalam waktu sekitar 45 menit. Namun sepertinya kami telah melampaui batasnya, ia sudah mulai melihat file muncul sebagai dihapus ketika mereka tidak (mungkin beberapa struktur memori internal telah habis, kami tidak yakin).
Adakah orang lain yang mengalami proyek sinkronisasi skala besar semacam ini? Apakah ada sesuatu yang dirancang untuk menangani struktur file besar seperti ini untuk sinkronisasi?
sumber
Jawaban:
Jika Anda dapat mempercayai cap waktu sistem berkas yang terakhir dimodifikasi, Anda dapat mempercepat dengan menggabungkan Rsync dengan utilitas 'find' UNIX / Linux. 'find' dapat menyusun daftar semua file yang menunjukkan waktu modifikasi terakhir dalam satu hari terakhir, dan kemudian pipa HANYA daftar file / direktori yang disingkat menjadi Rsync. Ini jauh lebih cepat daripada Rsync membandingkan metadata dari setiap file pada pengirim dengan server jauh.
Singkatnya, perintah berikut akan menjalankan Rsync ONLY pada daftar file dan direktori yang telah berubah dalam 24 jam terakhir: (Rsync TIDAK akan repot-repot memeriksa file / direktori lain.)
Jika Anda tidak terbiasa dengan perintah 'temukan', itu muncul melalui subtree direktori tertentu, mencari file dan / atau direktori yang memenuhi kriteria apa pun yang Anda tentukan. Sebagai contoh, perintah ini:
akan mulai di direktori saat ini (".") dan berulang melalui semua sub-direktori, mencari:
Ini mencetak nama path lengkap ("-print") dari apa pun yang cocok dengan kriteria tersebut pada output standar. Opsi '-nama', '-jenis', dan '-waktu' disebut "tes", dan opsi '-cetak' disebut "tindakan". Halaman manual untuk 'find' memiliki daftar tes dan tindakan yang lengkap.
Jika Anda ingin menjadi benar-benar pintar, Anda dapat menggunakan tes 'find' command '-cnewer', alih-alih '-time' untuk membuat proses ini lebih toleran terhadap kesalahan dan fleksibel. '-cnewer' menguji apakah setiap file / direktori di dalam tree telah mengubah metadata-nya lebih baru daripada beberapa file referensi. Gunakan 'sentuh' untuk membuat file referensi NEXT run di awal setiap proses, tepat sebelum 'find ... | Perintah rsync ... 'dijalankan. Inilah implementasi dasarnya:
Script ini secara otomatis tahu kapan terakhir kali dijalankan, dan hanya mentransfer file yang dimodifikasi sejak terakhir kali dijalankan. Meskipun ini lebih rumit, ini melindungi Anda dari situasi di mana Anda mungkin telah melewatkan menjalankan pekerjaan selama lebih dari 24 jam, karena downtime atau kesalahan lainnya.
sumber
touch $next_ref_file
pada akhirnya? Itu tidak meninggalkan kita tanpa kemampuan untuk mengatasi jalur yang dihapus (bahkan laporan arsip statis ini akhirnya menjadi cukup tua sehingga mereka diarsipkan dan dihapus). Itu mungkin bukan penghenti acara.find . -ctime 0
cukup lambat pada struktur direktori ini (masih menunggu untuk menyelesaikan untuk melaporkan waktunya). Itu sebenarnya membuat saya sedikit kecewa karena sepertinya ini mungkin operasi tingkat rendah yang mungkin menetapkan standar untuk tercepat yang bisa kita harapkan untuk diselesaikan pekerjaan ini. Ini mungkin kasus bahwa I / O disk adalah faktor pembatas di sini.Coba serempak , itu secara khusus dirancang untuk menyelesaikan masalah ini dengan menjaga daftar perubahan (daftar file bangunan), secara lokal untuk setiap server, mempercepat waktu untuk menghitung delta, dan mengurangi jumlah yang dikirim melintasi kawat setelah itu.
sumber
http://oss.linbit.com/csync2/ dirancang untuk hal semacam ini, saya akan mencobanya.
sumber
Jika Anda menggunakan tombol -z pada rsync, coba jalankan tanpanya. Untuk beberapa alasan saya telah melihat ini mempercepat bahkan enumerasi awal file.
sumber
Mengambil -z dari perintah rsync yang tidak ada kompresi membuat "daftar file penerima" berjalan jauh lebih cepat dan kami harus mentransfer sekitar 500 GB. Sebelum butuh satu hari dengan saklar -z.
sumber