Apakah ada cara untuk mirror dua severs di Ubuntu?

8

Saya bertanya-tanya apakah mungkin untuk mirror dua server, seperti Anda dapat mengunggah file ke satu server dan mereka akan mendorong ke server lain, dll. Saya lebih penasaran untuk mirroring file, itu tidak harus mencerminkan manajemen paket dan pengaturan (Tapi itu juga keren!)

Kyle
sumber
File Mirroring: Gluster atau DRDB; Pencerminan situs web: Varnish atau HAProxy; DB Mirroring: Replikasi Sirkular MySQL, atau Replikasi Postgres .; - Sebagian besar paket server memiliki mode operasi kluster, atau ada proksi terbalik yang memungkinkan Anda untuk melakukannya.
Tom O'Connor

Jawaban:

6

Itu sangat tergantung pada pekerjaan yang dihadapi.

Mengapa Anda perlu mirroring file. Apakah Anda ingin memperbarui sesuatu seperti repositori situs web atau konten yang biasanya diperbarui secara berkala? Atau apakah Anda memerlukan sinkronisasi data waktu nyata?

Untuk mirroring asinkron file secara berkala, biasanya cukup untuk memiliki Staging Area tempat Anda mengunggah semua data. Dan dari mana Anda mendistribusikannya ke Server. Dalam kasus Anda - dengan dua server - Anda dapat membuat beberapa pementasan fileshare di srv1 ke tempat Anda mentransfer data (melalui FTP, NFS, DAV, SFTP, dll.) Dan kemudian memiliki cronjob rsync file ke direktori "live" dari srv1 dan srv2. Cara termudah untuk menggunakan rsync dalam kasus itu adalah dengan menghasilkan ssh keypair yang akan Anda gunakan untuk transfer data dan yang diotorisasi pada semua server di cluster Anda.

Contoh:

srv1:/data/staging/  <= is where you upload your data
srv1:/data/production/ <= is where your servers get their production data from
srv2:/data/production/

srv1$ cat /etc/cron.d/syncdata.cron
=====
*/5 * * * * syncuser rsync -a --delete /data/staging/ /data/production/
*/5 * * * * syncuser rsync -az --delete -e ssh /data/staging/ srv2:/data/production/
=====

Ini seharusnya memberi Anda ide dasar. Tentu saja Anda ingin membungkus panggilan rsync dalam beberapa skrip dan menerapkan penguncian yang tepat sehingga tidak berjalan dua kali seandainya sinkronisasi membutuhkan waktu lebih dari 5 menit, dll. Selain itu, tak perlu dikatakan bahwa area pementasan tidak wajib. Anda mungkin juga menyinkronkan srv1: produksi ke srv2: produksi secara langsung. Hanya dari srv2 yang dapat menampilkan data yang lebih lama 5 menit dari pada srv1. Yang mungkin menjadi masalah, tergantung pada bagaimana Anda menyeimbangkan antara keduanya.

Cara lain untuk mendistribusikan file secara tidak sinkron adalah dengan mengemasnya sebagai rpm atau dalam file deb Anda. Letakkan ini di repositori pusat dan minta mereka menginstal / memperbarui melalui sesuatu seperti cfengine, monyet atau solusi berbasis bus pesan diy. Ini memiliki efek samping yang bagus dari versi data yang digunakan tetapi hanya cocok untuk jumlah data yang lebih kecil yang Anda hasilkan dan gunakan sendiri (seperti versi perangkat lunak Anda sendiri). Anda tidak akan mau mendistribusikan TB data dengan ini dan juga itu tidak cocok untuk mencerminkan konten yang berubah dengan frekuensi tinggi, seperti setiap menit.

Jika Anda perlu mereplikasi data dalam waktu dekat tetapi tidak selalu sinkron daripada memanggil cron setiap kali Anda dapat menggunakan beberapa metode berbasis inotify seperti incron yang telah disebutkan untuk memanggil skrip sinkronisasi Anda. Kemungkinan lain adalah menggunakan Gamin (yang juga menggunakan inotify jika ada di Kernel) dan menulis daemon sinkronisasi kecil Anda sendiri. Terakhir tetapi tidak kalah pentingnya, jika semua file diunggah ke satu server melalui mis. SFTP Anda mungkin memeriksa apakah SFTP Server Anda memungkinkan Anda menentukan kait yang dipanggil setelah peristiwa tertentu, seperti unggahan file. Dengan begitu Anda bisa memberi tahu Server Anda untuk memicu skrip sinkronisasi Anda setiap kali data baru diunggah.

Jika Anda membutuhkan mirroring data real time sinkron, sistem file cluster mungkin sudah berurutan. DRDB telah dinamai. Ini sangat bagus untuk replikasi pada tingkat blok dan sering digunakan untuk pengaturan MySQL yang tersedia tinggi. Anda mungkin juga ingin melihat GFS2, OCFS2, Luster dan GlusterFS. Meskipun Lustre dan GlusterFS tidak benar-benar cocok untuk dua pengaturan Server.

Lukas Loesche
sumber
DRBD terlihat bagus. Apakah buruk menggunakan ini dengan satu server yang aktif? Seperti bagaimana pengaruhnya terhadap server langsung?
Kyle
Tergantung - apa yang dilakukan Server langsung? Apakah itu server web, server basis data, server file, dll.? DRBD melakukan replikasi sinkron, dengan semua implikasi yang menyertainya. Tergantung pada apakah Anda berencana untuk pergi pembatasan I / O caching (dan sistem file) Single-primer atau Dual-primer tertentu yang akan berlaku yang pada gilirannya mempengaruhi aplikasi Anda. Untuk perincian, saya sarankan untuk membaca Panduan Pengguna DRBD drbd.org/users-guide-emb yang ditulis dengan sangat baik dan menjelaskan semua implikasinya dengan sangat terperinci.
Lukas Loesche
5

Pada dasarnya Anda memiliki 3 kemungkinan:

  1. Biarkan aplikasi Anda mendorong file ke kedua server.
  2. Replikasi asinkron, misalnya rsync setiap 15 menit (atau kurang) dengan tugas cron
  3. Replikasi sinkron pada sistem file (misalnya GlusterFS ) atau blokir level perangkat (mis. DRBD ). Jika Anda menggunakan replikasi pada level perangkat blok, Anda memerlukan sistem file yang mendukung penguncian terdistribusi (misalnya OCFS2 atau GFS2 ) jika Anda ingin memiliki akses r / w ke file dari kedua server pada saat yang sama.
Joseph
sumber
1

Tergantung pada kasus penggunaan khusus Anda - Anda dapat menggunakan sesuatu yang mirip dengan DRBD http://www.drbd.org/

Keiran Holloway
sumber
1

Jika Anda mencoba membangun solusi cadangan di sini (yang telah saya lakukan secara pribadi dalam pengaturan yang hampir sama) berhati-hatilah. Ada banyak hal yang berbeda yang harus Anda backup, salah satu (yang bisa dibilang) adalah penghapusan akedental terbesar - setiap sistem replikasi langsung hanya akan meniru penghapusan, dan tidak memberikan keamanan. Untuk replikasi harian ini berfungsi, tetapi jawaban yang cukup lemah. Coba RSnapshot.

Serempak mungkin bekerja untuk Anda, tetapi saya tidak memiliki pengalaman pribadi.

Menjalankan Rsync di kedua arah dengan flag aproprate dapat bekerja, tetapi memiliki masalah yang agak rumit tentang bagaimana menangani file yang dihapus, tanpa penanganan khusus, itu hanya mengembalikan file, yang baik-baik saja jika Anda tidak pernah menghapus apa pun seperti saya, tetapi sedikit sebaliknya miskin. Itu juga melakukan hal-hal aneh jika file dipindahkan.

Apa pun yang Anda lakukan, jika situasi apa pun dapat muncul di mana file dapat diedit secara bersamaan di kedua ujungnya, Anda memiliki masalah. serentak adalah satu-satunya solusi yang saya tahu yang dapat menangani ini bahkan dekat dengan memuaskan.

Thingomy
sumber
Perhatikan bahwa loop yang disebutkan di bawah tidak akan menjadi masalah dengan Rsync, karena mempertahankan tanggal modifikasi dari file yang ditransfer jika diatur dengan benar.
Thingomy
0

Jika itu satu arah (maksud saya, selalu dari satu server ke satu server lain, tetapi tidak sebaliknya) Anda bisa menggunakan incron. Itu seperti cron tetapi berdasarkan peristiwa filesystem.

Setiap kali file dibuat atau diubah, itu akan memicu scp atau rsync ke server lain.

Bi-directional memiliki masalah loop :).

chmeee
sumber
0

itu tergantung pada kebutuhan Anda ..... saya punya setup yang sangat "murah dan mudah" untuk webserver berkerumun.

saya hanya punya satu "fileserver" (NFS) di mana semua webserver me-mount dirs berikut:

/etc/apache/sites-enabled
/etc/apache2/sites-avaliable
/var/www

sederhana dan bekerja mati

bmaeser
sumber
0

clonezilla juga bisa melihat yang menggunakan rsync

dream_liner2k2
sumber
Tidak yakin clonezilla dapat digunakan di sini ... meskipun, itu adalah utilitas yang bagus.
HopelessN00b