Bagaimana cara mencadangkan server Linode yang berjalan?

21

Kami ingin mengambil cadangan semua yang ada di server Debian kami, yang berjalan jarak jauh di sisi lain dunia (di-host oleh Linode), tanpa mematikannya.

Sistem ini menjalankan shell, email, XMPP / prosody dan web, dengan beberapa pengaturan nginx sederhana.
Kami ingin membuat cadangan file yang terkait dengan hal-hal itu agar aman. Misalnya, file yang disimpan pengguna di direktori home mereka.

Kita tidak perlu secara tepat menyalin pengaturan setup yang ada setiap file / etc; alih-alih, alasan kami melakukan back up di tempat pertama adalah agar kami dapat memindahkan semuanya ke pengaturan baru (versi terbaru dari Debian masih menggunakan Linode).

Saya melihat bahwa Linode menawarkan layanan cadangan. Tetapi dalam jangka panjang kita juga membutuhkan cadangan kita sendiri, di sini, jika mereka jatuh atau sesuatu yang aneh terjadi.

Alasan pertanyaan ini ada adalah ketika saya mencoba membuat cadangan di masa lalu saya terus membuat salah satu dari dua kesalahan ini:

  • Saya telah pergi "OK, saya hanya akan menyalin /dan semua yang ada di bawahnya" dan kemudian terjebak dalam beberapa loop aneh tak terbatas baik karena drive saya menyalin ke dipasang di / media / backup dan itu menyalin sendiri secara rekursif [obv masalah khusus itu tidak berlaku di sini karena kita akan melakukan backup melalui rsync atau yang serupa] atau macet ketika mencoba menyalin beberapa hal "hidup" di / proc atau / var atau apa pun, seperti mencoba mengikuti log yang selalu berubah, atau
  • Saya telah pergi "OK, saya hanya akan mengambil minimal apa yang kita butuhkan ... hmm, direktori home semua orang, dan direktori server web kami (semuanya di bawah /var) dan mari kita ambil salinan /etcdan semua email lama di bawah / var / vmail "dan kemudian saya selalu mengacaukan izin file atau cap waktu (akan memastikan saya tidak mencadangkan file unix ke drive FAT kali ini) atau lupa sesuatu (" oh, tembak, saya punya beberapa skrip khusus di / usr / lokal / bin yang tidak pernah saya simpan di tempat lain, saya lupa mendapatkannya, kira sudah hilang ").

Jadi, menyalin semua drive secara langsung telah menyebabkan jebakan dan menyalin direktori secara selektif telah menyebabkan jebakan. Saya ingin tahu bagaimana melakukannya dengan benar.

Pertanyaan Kesalahan Server Apa yang dibutuhkan untuk sistem cadangan lengkap? mencakup filosofi dan praktik yang baik, tetapi saya mencari detail yang lebih spesifik dari:

  • Direktori mana yang harus saya salin dan yang harus saya kecualikan (mengingat bahwa itu adalah sistem yang saat ini menjalankan & dan melayani wiki, obrolan XMPP, email - dengan pesan baru masuk saat pekerjaan salin sedang berjalan)
  • Atribut file apa seperti stempel waktu & pemilik & grup yang perlu saya sajikan dan bagaimana saya melakukannya? ← Saya pikir saya bisa menjawab sendiri setengah dari pertanyaan ini dengan sesuatu seperti ... um ... rsync -HXazsaya pikir itu pilihan yang baik untuk kita? The -zobv tidak benar-benar terkait dengan pertanyaan yang "apa yang harus saya melestarikan"

Banyak saran cadangan yang saya lihat, seperti menggunakan dd, tampaknya mengandaikan bahwa drive tidak di-mount dan tidak digunakan. Tapi aku tidak seharusnya mengecualikan "hidup" direktori seperti / proc dan beberapa subdirektori di bawah / var (Namun, beberapa hal di bawah / var Aku tahu kita pasti lakukan perlu untuk menjaga) dan / mount? Apa lagi yang perlu saya pikirkan dalam situasi ini? Maka saya kira saya hanya bisa snarf dengan rsync dan menggunakan banyak --excludebendera.

Atau ada ide yang lebih baik, terutama yang ramah FOSS?

Sandra
sumber
Saya mendapatkan bahwa pertanyaan ini tampaknya sangat mendasar tetapi setelah menjalankan sistem semacam ini sejak lama saya telah mengacaukan ini lagi dan lagi dan saya tidak pernah benar-benar mengoceh bagaimana melakukannya dengan benar
Sandra
Untuk apa nilainya, cp -r -aakan mempertahankan atribut file sebanyak mungkin saat menyalin file (berdasarkan apa yang didukung oleh sistem file target). The -abendera menginstruksikan cpuntuk melestarikan atribut. Untuk menyalin melalui jaringan atau melalui sistem file yang tidak mendukung atribut yang diperlukan, tar -cselalu bekerja untuk saya walaupun saya percaya ada beberapa kasus tepi yang tidak tercakup dan khususnya saya percaya tarsecara default tergantung pada nama pengguna yang cocok dengan kedua sistem. Yang mengatakan, saya telah menyalin seluruh sistem Linux (tidak terpasang) menggunakan tartanpa masalah yang jelas.
Micheal Johnson
Juga adakah alasan khusus mengapa perlu menyalin sistem secara langsung?
Micheal Johnson
Gunakan layanan snapshot linode?
ivanivan

Jawaban:

15

Jadi Anda ingin mem-backup semua drive Anda tanpa semua kesalahan buruk itu dan juga memfilter semua / proc dan folder sementara lainnya?

Opsi adalah untuk memasang folder root ke folder lain dalam sistem file, seperti ini:

$ cd /mnt
$ mkdir drive
$ mount --bind / drive

Ini akan memberi Anda semua file yang ada di drive Anda yang tidak dianggap sementara (seperti folder / proc atau / sys).

Sekarang setelah Anda memiliki tampilan yang bersih dari folder root Anda, Anda bisa menyalinnya ke drive cadangan menggunakan standar cpatau rsync. Sesuatu di sepanjang garis:

cp -R /mnt/drive /mnt/backupdrive

Ini menyelesaikan kedua masalah yang Anda sebutkan:

  • Anda tidak masuk ke rekursi, karena disk cadangan tidak dipasang di dalam drive (sudut pandang)
  • Anda tidak ketinggalan file penting apa pun, karena Anda mengambil semuanya

Lihat juga: man mount (8)

rollstuhlfahrer
sumber
6
Hati-hati, dengan solusi ini Anda dapat menyalin file yang sedang ditulis, seperti database. Saya sarankan menjalankan skrip untuk membuang database dalam file terpisah sebelum menyalin file. Misalnya untuk MySQL Anda bisa menggunakan mysqldump.
Marco Martinelli
10

Di Linux semuanya adalah file. Mungkin melalui rsync, tetapi ada hal-hal yang perlu diperhatikan, yang (paling-paling) sulit untuk dilakukan.

Anda harus memikirkan replikasi terlebih dahulu, terutama untuk database. Juga ini adalah ide yang baik untuk mengatur penyeimbang proxy / beban di depan server utama Anda, sehingga Anda dapat dengan mudah beralih bolak-balik dengan server primer dan server mirror selama transisi.

Pada tingkat perangkat keras, situasi terbaik adalah memiliki server seperti cermin di sisi lain, dengan jumlah port ethernet yang sama, tata letak hdd yang sama, dan sebagainya. Segala sesuatu yang berbeda menyiratkan perlunya perubahan konfigurasi sistem.

yaitu jika Anda memiliki dua port et, Anda ingin memastikan bahwa konfigurasi jaringan, firewall dan sebagainya cocok dengan nama antarmuka di kedua server, dan jika itu berbeda Anda perlu mengubah konfigurasi setelah rsync atau mengubah nama perangkat pada yang kedua server (tujuan).

Sama dengan tata letak partisi. Anda harus membuat partisi yang sama seperti pada server utama Anda, tetapi jika Anda membuatnya dari awal Anda akan berakhir dengan UUID yang berbeda, jadi Anda harus mengubah fstab, grub, mdadm (jika soft-raid terlibat), dan sebagainya .

Tapi, ada juga banyak hal yang salah, seperti database, yang bisa tidak konsisten jika tidak dihentikan sebelumnya (sebelum melakukan rsync).

Strategi terbaik adalah mempersiapkan perangkat keras dan sistem file (partisi) - untuk mencocokkan konfigurasi server primer. Kemudian pasang parititon kosong melalui sistem perantara (seperti live CD dengan ssh-server terinstal sementara). Anda membuat kosong / proc, / dev, / sys dan kemudian rsync sisanya, seperti:

rsync -avz -H --delete /etc /bin (...and so on) destserver:/mnt/yourrootfs/

Kemudian Anda perlu menginstal grub pada perangkat dan bekerja pada konfigurasi, untuk membuatnya bootable, ubah konfigurasi jaringan, fstab dan hal-hal lain yang disebutkan sebelumnya.

Anda juga dapat mencoba menginstal sistem baru (dengan versi yang sama yang Anda gunakan pada server utama Anda), kemudian matikan, pasang melalui sistem sementara lainnya (seperti live cd), lalu ganti apa pun selain / proc, / sys, / dev dan / boot dengan rsync.

Tapi itu hanya gagasan umum. Hal-hal mungkin menyulitkan tergantung pada apa yang sebenarnya Anda miliki di server ini, apa konfigurasi Anda, pengaturan jaringan dan perangkat keras. Dan pada akhirnya, ini mungkin sangat sulit atau tidak mungkin dilakukan tanpa downtime yang nyata.

Comar
sumber
Basis data ulang: Jika Anda memiliki abstraksi sistem file yang sesuai (misalnya LVM), Anda mungkin dapat mengambil snapshot yang konsisten dari drive tanpa menggunakan replikasi DB penuh. Namun, ini mensyaratkan bahwa basis data Anda kill -9aman, atau mungkin gagal memulihkan. Database yang baik harus menangani situasi itu, tetapi sejumlah produk mengejutkan tidak (atau lebih buruk, mereka hampir selalu pulih, tetapi gagal sekali dalam bulan biru ketika Anda benar-benar membutuhkannya untuk bekerja). Jadi dalam praktiknya, replikasi mungkin lebih dapat diandalkan pula.
Kevin
5

Apa yang sebenarnya Anda inginkan adalah mengembalikan. Apa pun yang Anda lakukan, Anda harus mengembalikannya secara teratur.


Linode memiliki layanan cadangan. Snapshots dapat diambil pada jadwal yang ditentukan sebelumnya terbatas atau dengan API.

Keuntungan dari backup berbasis snapshot adalah mereka menawarkan titik waktu yang tajam, karena data tidak berubah ketika salinan dibuat. Snapshots juga dapat dengan mudah dikembalikan ke host yang berbeda, Linode baru dalam kasus ini.

John Mahowald
sumber
Saya tidak melihat apa-apa tentang memastikan cadangan itu masih berfungsi jika, misalnya Linode bangkrut.
Tandai
Saya mengetahui tentang layanan cadangan Linode saat mengetik salah satu suntingan untuk pertanyaan saya dan saya membicarakannya dengan kolega saya dan kami melakukannya. Itu memecahkan krisis langsung kami, tetapi kami akan mencoba menemukan cara untuk menyimpan data di rumah kami sendiri juga. Jadi + untuk mengemukakan bahwa mereka memiliki layanan itu, saya tidak tahu ketika saya pertama kali memposting. Tetapi mengembalikan memiliki masalah berikut: Jika server kami salah konfigurasi, bola permen karet dan gantungan kawat, kami tidak selalu ingin mengembalikannya ke keadaan salah konfigurasi yang sama. Kami memang menginginkan data favorit kami.
Sandra
Saya telah menulis lebih banyak tentang juga mengekspor cadangan ini ke penyimpanan lain jika cocok dengan tujuan titik pemulihan Anda dan domain kegagalan. Tapi saya membiarkannya singkat. Rencana kesinambungan bisnis yang baik, yang cadangannya hanya bagian dari, mengidentifikasi dan menangani risiko semacam itu.
John Mahowald
1

Saya menggunakan BackupPC untuk server pribadi virtual kecil saya, ini bekerja dengan cukup baik. BackupPC dapat menggunakan rsync di bawah tenda dan mendukung pencadangan penuh dan tambahan. Lihatlah dan lihat apakah itu akan memenuhi kebutuhan Anda.

Hans-Martin Mosner
sumber
1

Jalankan sistem Anda di ZFS. Kemudian Anda dapat mengambil snapshot atom seketika menggunakan sesuatu yang mirip dengan:

# zfs snap -r tank@name-of-backup

di mana tankpun nama kolam ZFS Anda dinamai. Cuplikan ini dijamin sebagai snapshot sesaat dari sistem file dan semua sistem file anaknya.

Setelah Anda membuat snapshot, Anda dapat mentransfernya ke host lain menggunakan zfs senddan ssh.

Jim L.
sumber
0

Saya pendapat saya Itu tergantung apa dan di mana Anda menjalankan server dengan perintah linux internal itu tidak mungkin, Anda harus meniru / pipa data lengkap dan perpustakaan. Jika Anda menjalankan vmware dan terkonfigurasi dengan baik itu menyediakan migrasi langsung. Atau Anda harus menggunakan alat pihak ketiga. Semoga ini bisa membantu Anda. Beberapa referensi lagi Bagaimana cara membuat cadangan server langsung?

Rsync adalah perintah yang baik untuk menyinkronkan data antar server.

asktyagi
sumber
0

Ada 2 solusi yang tersedia, di mana Anda tidak perlu bergantung (lagi) pada bit yang hilang serta kehilangan satu item dari daftar Anda karena daftar periksa yang tidak lengkap atau mungkin karena sesuatu yang panas diabaikan.

Pertama, jika Anda memindahkan ini ke platform dengan kontrol lebih besar atas platform perangkat keras yang mendasarinya, Anda dapat mengambil snapshot disk dari semua file saat server sedang berjalan. Misalnya pada AWS Anda dapat snapshot disk EBS dan bahkan hanya membayar untuk perbedaan ketika Anda membuat snapshot lain nanti.

Kedua, saya sarankan untuk skrip pengaturan server lengkap Anda dengan sistem manajemen konfigurasi, seperti Ansible. Ini akan

  • mendokumentasikan semua yang telah Anda konfigurasikan dalam kontrol sumber

  • memungkinkan Anda untuk menguji membuat ulang server dari cadangan atau bare metal untuk memastikan skrip Anda up to date

  • memungkinkan Anda untuk menjalankan kembali skrip pada sistem operasi yang lebih baru, biasanya dengan perubahan yang sangat kecil.

jdog
sumber
1
Ternyata Anda dapat melakukan snapshot pada Linode juga. Aku akan periksa Ansible! Itu semacam topik sampingan dari apa yang awalnya ingin kuketahui, tetapi sesuatu seperti itu — dan aku belum pernah mendengarnya [maksudku, aku pernah mendengar alat fiksi dari buku-buku Hainish yang indah] —sangat luar biasa!
Sandra