Apakah GlusterFS pilihan yang baik untuk menjaga server web tetap sinkron?

9

Saya punya 2 server web, dengan kemungkinan harus menambahkan lebih banyak server di sepanjang jalan. Saat ini saya menjaga server-server ini selaras menggunakan lsyncd + csync2. Ini berfungsi dengan baik berdasarkan kinerja karena semua file ada di kedua server (tidak ada akses jaringan yang diperlukan untuk membuka file secara lokal), tetapi tidak begitu baik dalam kasus lain.

Salah satu contohnya adalah jika saya menghapus file di server 1 dan segera mengunggah file baru ke server 1 yang memiliki nama yang sama. File kemudian akan dihapus dari server 2 sementara itu, menyebabkan file yang baru diunggah di server 1 dihapus karena server 2 mengirimkan acara penghapusan ke server 1 untuk menyelesaikan "lingkaran pembaruan".

Saya tidak dapat berhenti berpikir bahwa harus ada cara yang lebih baik untuk menjaga server tetap selaras. Saya telah melihat GlusterFS, dan saya melihat bahwa pengaturan di mana semua file direplikasi ke semua server tidak disarankan. Namun, saya menjalankan sistem CMS seperti Drupal di server ini. Sistem CMS seperti itu sering membuka beberapa file, dan saya khawatir terlalu banyak lalu lintas jaringan untuk mendapatkan file-file ini akan memperlambat permintaan.

Apakah itu ide untuk mengganti lsyncd + csync2 dengan GlusterFS yang diatur untuk mereplikasi semua file ke semua node, atau apakah itu ide yang buruk?

sbrattla
sumber
2
Saya mungkin salah paham masalah Anda di sini, tetapi mengapa tidak menggunakan penyimpanan jaringan yang dibagikan di antara server?
mveroone
1
@ Kwaio: saya ingin "mencerminkan" semua server web (baik skrip dan konten yang diunggah pengguna) karena ini akan mencegah downtime jika ada yang salah dengan server hosting penyimpanan bersama. Dengan kata lain, saya tidak ingin bergantung pada pengaturan di mana semua webservers kembali bergantung pada penyimpanan file tunggal.
sbrattla
Lalu mengapa bukan cluster penyimpanan jaringan ketersediaan tinggi?
mveroone
Tentu, tapi apa artinya itu? Perangkat keras?
sbrattla
Saya bukan spesialis, tetapi itu berarti memiliki penyimpanan jaringan Anda dicerminkan dalam arsitektur master-slave lebih dari 2 cluster, dan sistem yang beralih jika terjadi kegagalan master. Sebagian besar vendor perangkat penyimpanan jaringan memiliki solusi untuk itu, bahkan jika Anda dapat membangunnya sendiri dengan peralatan linux, yang akan membutuhkan pengembangan yang cukup banyak.
mveroone

Jawaban:

2

Sinkronisasi BitTorrent dapat melakukan perbuatan untuk Anda. Saya menggunakannya untuk menyimpan file dalam sinkronisasi antara beberapa server internal di rumah saya dan melakukan pekerjaan luar biasa. Hal lain yang perlu Anda pikirkan adalah database backend ketika aplikasi Anda menggunakan CMS. Pastikan ada replikasi MySQL yang sedang berlangsung, atau semacamnya.

whiskykilo
sumber
Itu menarik. Bagaimana BitTorrent Sync menangani konflik? Katakanlah saya punya 5 server web, dan sebuah file diperbarui di server A. Kemudian, 2 detik kemudian file yang sama diperbarui di server C sebelum perubahan pada A mencapai C. Apakah perangkat lunak memiliki algoritme untuk mengatur server mana menang dalam kasus ini?
sbrattla
Pemahaman saya adalah, BitTorrent Sync akan membandingkan tanggal / waktu modifikasi pada kedua salinan dan hanya menyimpan yang terbaru, yang mungkin ideal atau dapat merusak use case.
whiskykilo
1

Gluster akan memecahkan masalah yang Anda miliki karena dapat menahan kunci, menyebarkan perubahan - menghapus file di semua node lain, tetapi mungkin menambah latensi tambahan yang bisa menjadi masalah bagi server web. Alternatif berikutnya adalah DRBD + OCFS2 atau GFS, tapi itu mungkin lebih kompleks karena dengan gluster Anda menggunakan sistem file yang mendasarinya - itu tidak beroperasi pada tingkat blok sehingga jika server tidak sinkron itu tidak terlalu sulit untuk diperbaiki, file dapat mudah rusak karena otak terpecah, dll ...

Kami menggunakannya untuk server surat dan sangat lambat untuk direktori dengan banyak file. Anda harus menguji semuanya sebelum melakukan penyebaran. Saya sedang menguji mount NFS karena berfungsi lebih baik untuk file kecil.

Jure1873
sumber
1

GlusterFS sulit untuk digunakan. Untuk data web, tingkat sinkronisasi file seperti Unison jauh lebih mudah untuk digunakan dan dipelihara.

DRBD adalah solusi sempurna untuk menjaga sinkronisasi data pada level blok. Tetapi Anda harus memformatnya ke format khusus seperti OCFS2 atau yang serupa.

truongtx
sumber
GlusterFS tidak seperti DRBD - tidak beroperasi pada level blok, tetapi pada level file. Tapi saya setuju bahwa serentak lebih mudah untuk digunakan.
Jure1873
-3

Mengapa Anda tidak menggunakan alat seperti boneka ? Menulis sekali dalam satu sumber dan sekali siap menyebarkannya ke target menggunakan "tendangan boneka" atau mcolletive. Ini didokumentasikan dengan baik. Dan Anda dapat dengan mudah menambahkan server nanti jika diperlukan.

Anda juga dapat mengandalkan alat yang menggunakan inotify, seperti lsyncd, yang bekerja pada level kernel. Ini mengawasi perubahan dalam folder dan memicu sinkronisasi. Tetapi jika alat yang didedikasikan untuk sinkronisasi file pada cluster seperti csync2 tidak cukup saya tidak tahu apa yang akan terjadi.

Hanya untuk memastikan, apakah modifikasi terjadi juga di server 2 atau hanya di server 1?

Rosco
sumber
3
Downvoted - Wayang bukan cara yang baik untuk menyimpan file dalam sinkronisasi antara server. Ini adalah namun alat yang cemerlang untuk mengelola konfigurasi server .
Craig Watson
Modifikasi dapat terjadi di server mana pun, karena mereka berpartisipasi dalam penyiapan yang seimbang. Pengguna dapat mengunggah file ke server mana pun, dan file itu seharusnya tersedia di semua server karena lalu lintas tersebar di antara server.
sbrattla
1
Nah, dalam hal ini boneka bukanlah yang Anda inginkan (tapi tetap saja, @Craig Watson, file adalah file, konfigurasi, atau HTML, itu masih file). Saya ragu GlusterFS siap diproduksi, jadi jika Anda benar-benar menginginkan sesuatu yang aman, Anda sebaiknya menggunakan server NFS dengan ketersediaan tinggi.
Rosco