Cadangan, Bagian 1: Tujuan, Ikhtisar Teknik dan Teknologi

Cadangkan? Saya tidak perlu cadangan !!

Mengapa Anda perlu membuat cadangan? Bagaimanapun, peralatan ini sangat, sangat andal, di samping itu, ada "cloud" yang lebih baik daripada server fisik dalam hal keandalan: jika dikonfigurasi dengan benar, server "cloud" akan dengan mudah selamat dari kegagalan server fisik infrastruktur, dan dari sudut pandang pengguna layanan, akan ada lompatan kecil, hampir tidak terlihat dalam waktu layanan. Selain itu, duplikasi informasi seringkali memerlukan pembayaran untuk waktu prosesor "ekstra", beban disk, lalu lintas jaringan.

Program ideal berjalan cepat, tidak mengalir melalui RAM, tidak memiliki lubang, dan tidak ada.

—Tidak diketahui
Karena program masih ditulis oleh pengembang protein, dan proses pengujian sering tidak ada, ditambah pengiriman program sangat jarang dengan penggunaan "praktik terbaik" (yang juga merupakan program itu sendiri, dan karena itu tidak sempurna), administrator sistem sering harus menyelesaikan masalah yang terdengar singkat tapi ringkas: "kembali seperti semula," "bawa pangkalan kembali ke operasi normal," "itu bekerja perlahan - kita memutar kembali", dan juga favorit saya "Saya tidak tahu apa, tapi perbaiki".

Selain kesalahan logis yang muncul sebagai hasil kerja pengembang yang ceroboh, atau kombinasi keadaan, serta pengetahuan yang tidak lengkap atau kesalahpahaman tentang fitur kecil dari program pembangunan - termasuk pengikat dan yang sistem, termasuk sistem operasi, driver dan firmware - ada juga kesalahan lainnya. Sebagai contoh, sebagian besar pengembang mengandalkan runtime, benar-benar lupa tentang hukum fisik yang masih mustahil dilewati dengan bantuan program. Ini termasuk keandalan tak terbatas dari subsistem disk dan setiap subsistem penyimpanan data secara umum (termasuk RAM dan cache prosesor!), Dan nol waktu pemrosesan pada prosesor, dan tidak adanya kesalahan selama transmisi melalui jaringan dan selama pemrosesan pada prosesor, dan latensi jaringan, yaitu 0. Jangan abaikan tenggat waktu yang terkenal, karena jika Anda tidak punya waktu untuk itu, akan ada masalah yang lebih bersih daripada nuansa jaringan dan disk.

Chef, semuanya hilang! berdasarkan pada tangan Berlian

Tetapi bagaimana dengan masalah yang muncul dalam pertumbuhan penuh dan menggantungnya data yang berharga? Tidak ada yang bisa menggantikan pengembang langsung, dan bukan fakta bahwa itu akan mungkin dalam waktu dekat. Di sisi lain, untuk sepenuhnya membuktikan bahwa program akan berfungsi sebagaimana dimaksud, sejauh ini hanya beberapa proyek yang berhasil, dan sama sekali tidak mungkin untuk mengambil dan menerapkan bukti ke proyek lain yang serupa. Juga, bukti semacam itu membutuhkan banyak waktu, dan membutuhkan keterampilan dan pengetahuan khusus, dan ini praktis meminimalkan kemungkinan aplikasi mereka dengan tenggat waktu. Selain itu, kami masih tidak tahu bagaimana teknologi yang sangat cepat, murah, dan andal untuk menyimpan, memproses, dan mentransmisikan informasi. Teknologi semacam itu, jika ada, maka dalam bentuk konsep, atau - paling sering - hanya dalam buku dan film fiksi ilmiah.
Artis yang bagus meniru, seniman hebat mencuri.

—Pablo Picasso.
Solusi yang paling sukses dan hal-hal sederhana yang mengejutkan biasanya terjadi di mana ada konsep, teknologi, pengetahuan, bidang sains yang benar-benar tidak kompatibel.

Misalnya, burung dan pesawat memiliki sayap, tetapi terlepas dari kesamaan fungsional - prinsip operasi dalam beberapa mode adalah sama, dan masalah teknis diselesaikan dengan cara yang sama: tulang berlubang, penggunaan bahan yang kuat dan ringan, dll. - hasilnya sangat berbeda, meskipun sangat mirip. Sampel terbaik yang kami amati dalam teknologi kami juga sebagian besar dipinjam dari alam: kompartemen kedap udara di kapal dan kapal selam - analogi langsung dengan annelida; membangun susunan serangan dan memeriksa integritas data - duplikasi rantai DNA; serta organ berpasangan, kemandirian kerja berbagai organ dari sistem saraf pusat (fungsi jantung otomatis) dan refleks adalah sistem otonom di Internet. Tentu saja, mengambil dan menerapkan solusi siap pakai "langsung" penuh dengan masalah, tetapi siapa tahu, mungkin tidak ada solusi lain.
Jika saya tahu di mana Anda akan jatuh, saya akan meletakkan sedotan!

—Pepatah Belarus
Jadi, cadangan sangat penting bagi mereka yang menginginkan:

  • Untuk dapat mengembalikan pengoperasian sistem mereka dengan downtime minimal, atau bahkan tanpa mereka
  • Jangan ragu untuk bertindak, karena jika terjadi kesalahan selalu ada kemungkinan untuk kembalikan
  • Minimalkan efek korupsi data yang disengaja

Ini sedikit teori
Klasifikasi apa pun adalah arbitrer. Alam tidak mengklasifikasikan. Kami mengklasifikasikan, karena lebih nyaman bagi kami. Dan kami mengklasifikasikan berdasarkan data, yang juga kami ambil secara sewenang-wenang.

—Jan Bruler
Terlepas dari metode penyimpanan fisik, penyimpanan logis data dapat dibagi menjadi 2 cara mengakses data ini: blok dan file. Divisi ini baru-baru ini sangat buram, karena murni blok, serta murni file, penyimpanan logis tidak ada. Namun, untuk kesederhanaan, kami menganggap itu memang benar.

Blok penyimpanan data menyiratkan bahwa ada perangkat fisik di mana data direkam dalam beberapa bagian tetap, blok. Akses ke blok menuju ke alamat tertentu, setiap blok memiliki alamatnya sendiri di dalam perangkat.

Pencadangan biasanya dilakukan dengan menyalin blok data. Untuk memastikan integritas data pada saat penyalinan, pencatatan blok baru, serta modifikasi yang sudah ada, ditangguhkan. Jika kita mengambil analogi dari dunia biasa, lemari terdekat adalah dengan sel bernomor yang sama.

Blokir penyimpanan data

Penyimpanan file data dengan prinsip perangkat logis dekat dengan penyimpanan blok dan sering diatur di atas. Perbedaan penting adalah keberadaan hierarki penyimpanan dan nama yang dapat dibaca manusia. Abstraksi disorot dalam bentuk file - area data bernama, serta direktori - file khusus di mana deskripsi dan akses ke file lain disimpan. File dapat diberikan dengan metadata tambahan: waktu pembuatan, bendera akses, dll. Mereka biasanya membuat cadangan dengan cara ini: mereka mencari file yang diubah, kemudian menyalinnya ke penyimpanan file lain dengan struktur yang sama. Integritas data biasanya diimplementasikan dengan tidak adanya file yang sedang ditulis. Metadata file didukung dengan cara yang sama. Analogi terdekat adalah perpustakaan, yang memiliki bagian-bagian dengan buku yang berbeda, serta katalog dengan nama buku yang dapat dibaca manusia.

Penyimpanan data file

Baru-baru ini, opsi lain kadang-kadang dijelaskan, dengan mana, pada prinsipnya, penyimpanan file data dimulai, dan yang memiliki fitur kuno yang sama: penyimpanan data objek.

Ini berbeda dari penyimpanan file karena tidak memiliki lebih dari satu sarang (tata letak datar), dan nama file, meskipun dapat dibaca oleh manusia, tetap lebih cocok untuk diproses oleh mesin. Saat mencadangkan, penyimpanan objek paling sering diperlakukan seperti penyimpanan file, tetapi kadang-kadang ada opsi lain.
- Ada dua jenis administrator sistem, mereka yang tidak membuat cadangan, dan mereka yang sudah melakukannya.
- Sebenarnya, ada tiga jenis: ada juga yang memverifikasi bahwa cadangan dapat dipulihkan.

—Tidak diketahui
Penting juga dipahami bahwa proses pencadangan data dilakukan oleh program, sehingga memiliki semua kelemahan yang sama dengan program lain. Untuk menghapus (tidak mengecualikan!) Ketergantungan pada faktor manusia, serta fitur - yang secara individual tidak sangat mempengaruhi, tetapi bersama-sama dapat memberikan efek nyata - menerapkan apa yang disebut aturan 3-2-1. Ada banyak opsi untuk mendekripsi, tetapi saya lebih suka interpretasi berikut: Anda perlu menyimpan 3 set data yang sama, 2 set harus disimpan dalam format yang berbeda, dan 1 set harus disimpan dalam penyimpanan yang jauh secara geografis.

Format penyimpanan harus dipahami sebagai berikut:

  • Jika ada ketergantungan pada metode penyimpanan fisik, kami mengubah metode fisik.
  • Jika ada ketergantungan pada metode penyimpanan logis, kami mengubah metode logis.

Untuk mencapai efek maksimum aturan 3-2-1, disarankan untuk mengubah format penyimpanan dengan dua cara.

Dari sudut pandang kesiapan cadangan untuk tujuan yang dimaksudkan - pemulihan operabilitas, ada cadangan "panas" dan "dingin". Panas dari dingin berbeda hanya dalam satu hal: mereka segera siap untuk bekerja, sementara dingin untuk pemulihan memerlukan beberapa tindakan tambahan: dekripsi, ekstraksi dari arsip, dll.

Jangan bingung salinan panas dan dingin dengan salinan online dan offline, yang menyiratkan isolasi fisik data, dan pada kenyataannya, adalah tanda lain dari klasifikasi metode cadangan. Jadi salinan offline - tidak terhubung langsung ke sistem di mana perlu dipulihkan - bisa panas atau dingin (dalam hal kesiapan untuk pemulihan). Salinan online mungkin tersedia langsung di tempat yang perlu dipulihkan, dan paling sering panas, tetapi ada juga yang dingin.

Selain itu, jangan lupa bahwa proses membuat cadangan biasanya tidak berakhir dengan membuat cadangan tunggal, dan mungkin ada cukup banyak salinan. Oleh karena itu, perlu untuk membedakan antara cadangan lengkap, mis. salinan yang dapat dipulihkan secara terpisah dari cadangan lain, serta salinan diferensial (inkremental, diferensial, decremental, dll.) - yang tidak dapat dipulihkan sendiri dan memerlukan pemulihan awal satu atau lebih cadangan lain.

Cadangan inkremental diferensial - upaya untuk menghemat jumlah ruang untuk menyimpan cadangan. Dengan demikian, hanya data yang dimodifikasi dari cadangan sebelumnya yang ditulis ke cadangan.

Perbedaan decrementals dibuat untuk tujuan yang sama, tetapi dengan cara yang sedikit berbeda: cadangan penuh dibuat, tetapi hanya perbedaan antara salinan baru dan yang sebelumnya benar-benar disimpan.

Secara terpisah, ada baiknya mempertimbangkan proses pencadangan di atas penyimpanan, yang mendukung tidak adanya penyimpanan duplikat. Jadi, jika Anda menulis cadangan penuh di atasnya, pada kenyataannya hanya perbedaan antara cadangan yang akan dicatat, namun, proses pengembalian cadangan akan sama dengan memulihkan dari salinan lengkap dan sepenuhnya transparan.

Quis custodiet ipsos custodes?

(Siapa yang akan menjaga sendiri penjaga? - lat.)


Sangat tidak menyenangkan ketika tidak ada cadangan, tetapi jauh lebih buruk jika cadangan tampaknya dibuat, tetapi selama pemulihan ternyata tidak dapat dipulihkan, karena:

  • Integritas sumber data telah dilanggar.
  • Penyimpanan cadangan rusak.
  • Pemulihan bekerja sangat lambat, Anda tidak dapat menggunakan data yang sebagian dipulihkan.


Proses pencadangan yang dibangun dengan benar harus memperhitungkan komentar semacam itu, terutama yang pertama.

Integritas sumber data dapat dijamin dalam beberapa cara. Yang paling umum digunakan adalah: a) membuat snapshot sistem file pada level blok, b) membekukan status sistem file, c) perangkat blok khusus dengan penyimpanan versi, d) rekaman berurutan file atau blok. Checksum juga digunakan untuk memastikan verifikasi data selama pemulihan.

Kerusakan pada penyimpanan juga dapat dideteksi menggunakan checksum. Metode tambahan adalah penggunaan perangkat khusus atau sistem file di mana tidak mungkin untuk memodifikasi data yang sudah direkam, tetapi Anda dapat menambahkan yang baru.

Untuk mempercepat pemulihan, pemulihan data digunakan dengan beberapa proses pemulihan - asalkan tidak ada "hambatan" dalam bentuk jaringan yang lambat atau sistem disk yang lambat. Untuk menghindari situasi dengan data yang dipulihkan sebagian, dimungkinkan untuk memecah proses pencadangan menjadi subtugas yang relatif kecil, yang masing-masing dilakukan secara terpisah. Dengan demikian, menjadi mungkin untuk secara konsisten mengembalikan kinerja dengan prediksi waktu pemulihan. Masalah ini paling sering terletak pada bidang organisasi (SLA), jadi kami tidak akan membahasnya secara rinci.

Tahu banyak tentang rempah-rempah bukan orang yang menambahkannya ke setiap hidangan, tetapi orang yang tidak pernah menambahkan sesuatu yang berlebihan untuk itu.

—B. Sinyavsky


Praktik mengenai perangkat lunak yang digunakan oleh administrator sistem dapat bervariasi, tetapi prinsip-prinsip umum masih sama, satu atau lain cara, khususnya:

  • Solusi siap pakai sangat dianjurkan.
  • Program harus bekerja dengan mudah, mis. Seharusnya tidak ada fitur atau kemacetan yang tidak terdokumentasi.
  • Menyiapkan setiap program harus cukup sederhana sehingga Anda tidak perlu membaca manual atau lembar contekan setiap saat.
  • Solusinya harus universal, jika memungkinkan. server dalam spesifikasi perangkat kerasnya dapat sangat bervariasi.


Program umum berikut tersedia untuk menghapus cadangan dari perangkat blok:

  • dd, akrab dengan veteran administrasi sistem, program serupa juga berlaku di sini (dd_rescue yang sama, misalnya).
  • Utilitas (utilitas) dibangun ke dalam beberapa sistem file yang membuat dump dari sistem file.
  • Utilitas omnivora; mis. partclone.
  • Keputusan sendiri, seringkali hak milik; mis. NortonGhost dan yang lebih baru.


Untuk sistem file, tugas cadangan sebagian diselesaikan menggunakan metode yang berlaku untuk memblokir perangkat, namun, masalahnya dapat diselesaikan lebih efisien, menggunakan, misalnya:

  • Rsync, program dan protokol universal untuk menyinkronkan keadaan sistem file.
  • Alat pengarsipan bawaan (ZFS).
  • Alat pengarsipan pihak ketiga; perwakilan yang paling populer adalah tar. Ada yang lain, misalnya, mengganti tar dengan fokus pada sistem modern.

Secara terpisah, ada baiknya menyebutkan perangkat lunak konsistensi data saat membuat cadangan. Opsi yang paling umum digunakan adalah:

  • Memasang sistem file dalam mode hanya baca (ReadOnly), atau membekukan sistem file (membekukan) - metode ini terbatas.
  • Membuat snapshot dari keadaan sistem file atau memblokir perangkat (LVM, ZFS).
  • Penggunaan alat pihak ketiga untuk mengatur gips, bahkan dalam kasus di mana paragraf sebelumnya tidak dapat diberikan karena alasan apa pun (program seperti hotcopy).
  • Teknik copy-on-change (CopyOnWrite), bagaimanapun, itu paling sering dikaitkan dengan FS yang digunakan (BTRFS, ZFS).


Jadi, untuk server kecil, Anda perlu menyediakan skema cadangan yang memenuhi persyaratan berikut:

  • Mudah digunakan - tidak diperlukan langkah tambahan khusus saat bekerja, langkah minimal untuk membuat dan mengembalikan salinan.
  • Universal - bekerja pada server besar dan kecil; ini penting ketika meningkatkan jumlah server atau penskalaan.
  • Itu diinstal oleh manajer paket, atau dalam satu atau dua perintah dari tipe "unduh dan unzip".
  • Stabil - menggunakan format penyimpanan standar atau lama.
  • Cepat dalam bekerja.

Pelamar dari mereka yang kurang lebih memenuhi persyaratan:

  • rdiff-backup
  • rsnapshot
  • sendawa
  • duplikat
  • bermuka dua
  • dup deja
  • sayang
  • zbackup
  • tenang
  • borgbackup

Tempat tidur procrustean

Mesin virtual (berdasarkan XenServer) dengan karakteristik berikut akan digunakan sebagai bangku tes:

  • 4 core 2,5 GHz,
  • RAM 16 GB
  • Penyimpanan hybrid 50 GB (penyimpanan dengan caching pada SSD sebesar 20% dari ukuran disk virtual) sebagai disk virtual terpisah tanpa partisi,
  • Saluran Internet 200 Mbps.

Mesin yang hampir sama akan digunakan sebagai server tujuan cadangan, hanya dengan hard drive 500 GB.

Sistem operasi - Centos 7 x64: kerusakan standar, partisi tambahan akan digunakan sebagai sumber data.

Mari kita ambil situs wordpress sebagai sumber data, dengan file media 40 GB, database mysql. Karena server virtual sangat bervariasi dalam karakteristik, serta untuk reproduktifitas yang lebih baik, ada

hasil tes server menggunakan sysbench.
sysbench --threads = 4 --time = 30 --cpu-max-prime = 20.000 cpu run
sysbench 1.1.0-18a9f86 (menggunakan bundel LuaJIT 2.1.0-beta3)
Menjalankan tes dengan opsi berikut:
Jumlah utas: 4
Menginisialisasi generator angka acak dari waktu sekarang

Batas bilangan prima: 20.000

Menginisialisasi utas pekerja ...

Utas dimulai!

Kecepatan CPU:
acara per detik: 836.69

Throughput:
acara / s (eps): 836.6908
waktu berlalu: 30.0039d
total jumlah acara: 25104

Latensi (ms):
min: 2,38
rata-rata: 4,78
maks: 22,39
Persentil ke-95: 10.46
jumlah: 119923,64

Keadilan benang:
acara (rata-rata / stddev): 6276.0000 / 13.91
waktu eksekusi (rata-rata / stddev): 29.9809 / 0,01

sysbench --threads = 4 --time = 30 --memory-block-size = 1K --memory-scope = global --memory-total-size = 100G --memory-oper = read memory run
sysbench 1.1.0-18a9f86 (menggunakan bundel LuaJIT 2.1.0-beta3)
Menjalankan tes dengan opsi berikut:
Jumlah utas: 4
Menginisialisasi generator angka acak dari waktu sekarang

Menjalankan uji kecepatan memori dengan opsi berikut:
ukuran blok: 1KiB
ukuran total: 102400MiB
operasi: baca
ruang lingkup: global

Menginisialisasi utas pekerja ...

Utas dimulai!

Total operasi: 50900446 (1696677.10 per detik)

49707,47 MiB ditransfer (1656,91 MiB / detik)

Throughput:
acara / s (eps): 1696677.1017
waktu berlalu: 30.0001s
total jumlah acara: 50900446

Latensi (ms):
min: 0,00
rata-rata: 0,00
maks: 24,01
Persentil ke-95: 0,00
jumlah: 39106,74

Keadilan benang:
acara (rata-rata / stddev): 12725111.5000 / 137775.15
waktu eksekusi (avg / stddev): 9.7767 / 0.10

sysbench --threads = 4 --time = 30 --memory-block-size = 1K --memory-scope = global --memory-total-size = 100G --memory-oper = tulis memory run
sysbench 1.1.0-18a9f86 (menggunakan bundel LuaJIT 2.1.0-beta3)
Menjalankan tes dengan opsi berikut:
Jumlah utas: 4
Menginisialisasi generator angka acak dari waktu sekarang

Menjalankan uji kecepatan memori dengan opsi berikut:
ukuran blok: 1KiB
ukuran total: 102400MiB
operasi: tulis
ruang lingkup: global

Menginisialisasi utas pekerja ...

Utas dimulai!

Total operasi: 35910413 (1197008,62 per detik)

35068,76 MiB ditransfer (1168,95 MiB / detik)

Throughput:
acara / s (eps): 1197008.6179
waktu berlalu: 30.0001s
total jumlah acara: 35910413

Latensi (ms):
min: 0,00
rata-rata: 0,00
maks: 16.90
Persentil ke-95: 0,00
jumlah: 43604,83

Keadilan benang:
acara (rata-rata / stddev): 8977603.2500 / 233905.84
waktu eksekusi (avg / stddev): 10.9012 / 0.41

sysbench --threads = 4 --file-test-mode = rndrw --time = 60 --file-block-size = 4K --file-total-size = 1G file menjalankan
sysbench 1.1.0-18a9f86 (menggunakan bundel LuaJIT 2.1.0-beta3)
Menjalankan tes dengan opsi berikut:
Jumlah utas: 4
Menginisialisasi generator angka acak dari waktu sekarang

Bendera terbuka file ekstra: (tidak ada)
128 file, masing-masing 8MiB
Total ukuran file 1GiB
Ukuran blok 4KiB
Jumlah permintaan IO: 0
Rasio Baca / Tulis untuk uji IO acak kombinasi: 1,50
FSYNC Berkala diaktifkan, memanggil fsync () setiap 100 permintaan.
Memanggil fsync () di akhir tes, Diaktifkan.
Menggunakan mode I / O sinkron
Melakukan uji r / w acak
Menginisialisasi utas pekerja ...

Utas dimulai!

Throughput:
baca: IOPS = 3868.21 15.11 MiB / s (15.84 MB / s)
tulis: IOPS = 2578.83 10,07 MiB / s (10,56 MB / s)
fsync: IOPS = 8226.98

Latensi (ms):
min: 0,00
rata-rata: 0,27
maks: 18,01
Persentil ke-95: 1,08
jumlah: 238469.45

Catatan ini mulai besar



: Finnix

Source: https://habr.com/ru/post/id449282/


All Articles