Penyimpanan cadangan untuk ribuan mesin virtual dengan alat gratis

Penyimpanan cadangan untuk ribuan mesin virtual dengan alat gratis

Hai, saya baru-baru ini menemukan tugas yang menarik: menyiapkan penyimpanan untuk mencadangkan sejumlah besar perangkat blok.

Kami mencadangkan semua mesin virtual di cloud kami setiap minggu, jadi kami harus mampu mengelola ribuan cadangan secepat dan seefisien mungkin.

Sayangnya, konfigurasi standar RAID5, RAID6 Dalam kasus ini, mereka tidak akan mau melakukannya karena proses pemulihan pada disk sebesar milik kami akan sangat lama dan kemungkinan besar tidak akan pernah berakhir.

Mari kita pertimbangkan apa saja alternatif yang ada:

Penghapusan Coding — Mirip dengan RAID5 dan RAID6, tetapi dengan tingkat paritas yang dapat dikonfigurasi. Dalam hal ini, redundansi dilakukan bukan per blok, melainkan per objek. Cara paling sederhana untuk mencoba pengkodean penghapusan adalah dengan menerapkan kecil.

DRAID — Ini adalah fitur ZFS yang saat ini belum dirilis. Tidak seperti RAIDZ, DRAID memiliki blok paritas terdistribusi dan memanfaatkan semua disk dalam array selama pemulihan, membuatnya lebih tangguh terhadap kegagalan disk dan pulih lebih cepat setelah terjadi kerusakan.

Penyimpanan cadangan untuk ribuan mesin virtual dengan alat gratis

Penyimpanan cadangan untuk ribuan mesin virtual dengan alat gratis

Ada server yang tersedia Fujitsu Primergy RX300 S7 dengan prosesor Prosesor Intel Xeon E5-2650L 0 @ 1.80GHz, sembilan modul RAM Samsung DDR3-1333 8Gb PC3L-10600R ECC Terdaftar (M393B1K70DH0-YH9), rak cakram Supermicro SuperChassis 847E26-RJBOD1, terhubung melalui Ekspander LSI SAS2X36 Ganda dan 45 cakram Seagage ST6000NM0115-1YZ110 pada 6TB semuanya.

Sebelum kita memutuskan sesuatu, pertama-tama kita perlu menguji semuanya dengan benar.

Untuk melakukan ini, saya menyiapkan dan menguji berbagai konfigurasi. Untuk ini, saya menggunakan minio, yang bertindak sebagai backend S3 dan menjalankannya dalam berbagai mode dengan jumlah target yang berbeda-beda.

Kasus minio terutama diuji dalam pengkodean penghapusan vs. raid perangkat lunak dengan jumlah disk dan disk paritas yang sama, yaitu: RAID6, RAIDZ2 dan DRAID2.

Sebagai referensi: ketika Anda menjalankan minio hanya dengan satu target, minio beroperasi dalam mode gateway S3, yang menjadikan sistem berkas lokal Anda sebagai penyimpanan S3. Jika Anda menjalankan minio dengan beberapa target, mode Erasure Coding akan otomatis diaktifkan, yang akan menyebarkan data ke seluruh target Anda, sehingga memberikan toleransi kesalahan.

Secara default, minio membagi target ke dalam kelompok-kelompok yang terdiri dari 16 disk, dengan dua disk paritas per kelompok. Ini berarti dua disk dapat gagal secara bersamaan tanpa kehilangan data.

Untuk pengujian kinerja, saya menggunakan 16 disk, masing-masing berkapasitas 6 TB, dan menuliskan objek kecil berukuran 1 MB ke dalamnya. Hal ini secara akurat menggambarkan beban kerja kami di masa mendatang, karena semua alat pencadangan modern membagi data ke dalam blok-blok berukuran beberapa megabita dan menuliskannya dengan cara tersebut.

Untuk melakukan benchmark, utilitas s3bench dijalankan di server jarak jauh, mengirimkan puluhan ribu objek tersebut ke minio melalui ratusan thread. Kemudian, utilitas tersebut mencoba meminta objek tersebut kembali dengan cara yang sama.

Hasil benchmark ditunjukkan pada tabel berikut:

Penyimpanan cadangan untuk ribuan mesin virtual dengan alat gratis

Seperti yang dapat kita lihat, minio dalam mode pengkodean penghapusan asli berkinerja jauh lebih buruk pada penulisan daripada minio yang berjalan di atas perangkat lunak RAID6, RAIDZ2, dan DRAID2 dalam konfigurasi yang sama.

Secara terpisah saya diminta Saya menguji minio di ext4 vs. XFS. Anehnya, untuk jenis beban kerja saya, XFS ternyata jauh lebih lambat daripada ext4.

Pada batch pengujian pertama Mdadm menunjukkan keunggulan atas ZFS, tetapi kemudian Gmelikov diminta, bahwa Anda dapat meningkatkan kinerja ZFS dengan menetapkan opsi berikut:

xattr=sa atime=off recordsize=1M

dan setelah itu pengujian dengan ZFS menjadi jauh lebih baik.

Anda juga dapat melihat bahwa DRAID tidak memberikan peningkatan kinerja yang signifikan atas RAIDZ, tetapi secara teori seharusnya jauh lebih aman.

Dalam dua pengujian terakhir, saya juga mencoba memindahkan metadata (khusus) dan ZIL (log) ke mirror SSD. Namun, pemindahan metadata tersebut tidak memberikan banyak manfaat pada kecepatan tulis, dan pemindahan ZIL mengakibatkan SSDSC2KI128G8 Kami mencapai batas utilisasi 100%, jadi saya menganggap pengujian ini gagal. Saya tidak menutup kemungkinan jika saya memiliki drive SSD yang lebih cepat, hasilnya mungkin akan meningkat secara signifikan, tetapi sayangnya, saya tidak memilikinya.

Pada akhirnya, saya memutuskan untuk berhenti menggunakan DRAID dan meskipun statusnya beta, ini adalah solusi penyimpanan tercepat dan paling efisien dalam kasus kami.

Saya membuat DRAID2 sederhana dalam konfigurasi dengan tiga grup dan dua suku cadang terdistribusi:

# zpool status data
  pool: data
 state: ONLINE
  scan: none requested
config:

    NAME                 STATE     READ WRITE CKSUM
    data                 ONLINE       0     0     0
      draid2:3g:2s-0     ONLINE       0     0     0
        sdy              ONLINE       0     0     0
        sdam             ONLINE       0     0     0
        sdf              ONLINE       0     0     0
        sdau             ONLINE       0     0     0
        sdab             ONLINE       0     0     0
        sdo              ONLINE       0     0     0
        sdw              ONLINE       0     0     0
        sdak             ONLINE       0     0     0
        sdd              ONLINE       0     0     0
        sdas             ONLINE       0     0     0
        sdm              ONLINE       0     0     0
        sdu              ONLINE       0     0     0
        sdai             ONLINE       0     0     0
        sdaq             ONLINE       0     0     0
        sdk              ONLINE       0     0     0
        sds              ONLINE       0     0     0
        sdag             ONLINE       0     0     0
        sdi              ONLINE       0     0     0
        sdq              ONLINE       0     0     0
        sdae             ONLINE       0     0     0
        sdz              ONLINE       0     0     0
        sdan             ONLINE       0     0     0
        sdg              ONLINE       0     0     0
        sdac             ONLINE       0     0     0
        sdx              ONLINE       0     0     0
        sdal             ONLINE       0     0     0
        sde              ONLINE       0     0     0
        sdat             ONLINE       0     0     0
        sdaa             ONLINE       0     0     0
        sdn              ONLINE       0     0     0
        sdv              ONLINE       0     0     0
        sdaj             ONLINE       0     0     0
        sdc              ONLINE       0     0     0
        sdar             ONLINE       0     0     0
        sdl              ONLINE       0     0     0
        sdt              ONLINE       0     0     0
        sdah             ONLINE       0     0     0
        sdap             ONLINE       0     0     0
        sdj              ONLINE       0     0     0
        sdr              ONLINE       0     0     0
        sdaf             ONLINE       0     0     0
        sdao             ONLINE       0     0     0
        sdh              ONLINE       0     0     0
        sdp              ONLINE       0     0     0
        sdad             ONLINE       0     0     0
    spares
      s0-draid2:3g:2s-0  AVAIL   
      s1-draid2:3g:2s-0  AVAIL   

errors: No known data errors

Oke, kita sudah membahas penyimpanan, sekarang mari kita bahas solusi pencadangan. Saya ingin berbagi tiga solusi yang sudah saya coba:

Benji Backup - garpu Backy2, solusi pencadangan perangkat blok khusus, memiliki integrasi yang erat dengan Ceph. Solusi ini dapat mengekstrak diff antar snapshot dan membuat cadangan inkremental darinya. Mendukung berbagai backend penyimpanan, termasuk lokal dan S3. Membutuhkan database terpisah untuk menyimpan tabel hash deduplikasi. Kekurangan: Ditulis dengan Python dan memiliki CLI yang agak kurang responsif.

Cadangan Borg - garpu Loteng, alat pencadangan yang telah lama dikenal dan terbukti, dapat mencadangkan data dan mendeduplikasinya dengan baik. Alat ini dapat menyimpan cadangan baik secara lokal maupun ke server jarak jauh melalui scp. Alat ini dapat mencadangkan perangkat blok jika dijalankan dengan tanda . --specialKekurangannya, saat membuat cadangan, repositori terkunci sepenuhnya, jadi disarankan untuk membuat repositori terpisah untuk setiap mesin virtual. Hal ini tidak menjadi masalah, karena pembuatannya mudah.

Istirahat — sebuah proyek yang sedang dikembangkan secara aktif, ditulis dalam bahasa Go, cukup cepat dan mendukung banyak backend penyimpanan, termasuk penyimpanan lokal, scp, S3, dan banyak lagi. Perlu dicatat juga bahwa ada fitur yang dibuat khusus server istirahat untuk restic, yang memungkinkan ekspor penyimpanan tercepat untuk penggunaan jarak jauh. Dari semua yang disebutkan di atas, saya paling suka yang ini. Dapat dicadangkan dari stdin. Hampir tidak ada kekurangan yang terlihat, tetapi ada beberapa keanehan:

  • Pertama, saya mencoba menggunakannya sebagai repositori bersama untuk semua VM (seperti Benji), dan berfungsi dengan baik, tetapi operasi pemulihan membutuhkan waktu yang sangat lama karena Restic mencoba membaca metadata semua cadangan sebelum setiap pemulihan. Masalah ini mudah diatasi, seperti halnya dengan Borg, dengan membuat repositori terpisah untuk setiap VM. Pendekatan ini juga terbukti sangat efektif untuk manajemen cadangan. Repositori terpisah dapat memiliki kata sandi terpisah untuk mengakses data, dan kita tidak perlu khawatir repositori global akan rusak. Membuat repositori baru sama mudahnya dengan cadangan Borg.

    Bagaimanapun, deduplikasi dilakukan hanya relatif terhadap versi cadangan sebelumnya, cadangan sebelumnya ditentukan oleh jalur untuk cadangan yang ditentukan, jadi jika Anda mencadangkan objek yang berbeda dari stdin ke repositori umum, jangan lupa untuk menentukan opsi --stdin-filename, atau secara eksplisit menentukan opsi setiap kali --parent.

  • Kedua, pemulihan ke stdout membutuhkan waktu yang jauh lebih lama daripada pemulihan ke sistem berkas karena sifatnya yang paralel. Ke depannya, kami berencana untuk menambahkan dukungan yang lebih ketat untuk pencadangan perangkat blok.

  • Ketiga, saat ini direkomendasikan untuk menggunakan versi dari master, karena versi 0.9.6 memiliki bug dengan pemulihan file besar yang lama.

Untuk menguji efisiensi pencadangan dan kecepatan pencadangan/pemulihan, saya membuat repositori terpisah dan mencoba mencadangkan citra mesin virtual kecil (21 GB). Saya melakukan dua pencadangan tanpa mengubah citra aslinya, menggunakan masing-masing solusi yang tercantum, untuk menguji seberapa cepat/lambat data yang dideduplikasi disalin.

Penyimpanan cadangan untuk ribuan mesin virtual dengan alat gratis

Seperti yang dapat kita lihat, Borg Backup memiliki rasio efisiensi pencadangan awal terbaik, tetapi kalah dalam hal kecepatan tulis dan pemulihan.

Restic ternyata lebih cepat daripada Benji Backup, tetapi butuh waktu lebih lama untuk memulihkan ke stdout, dan sayangnya, belum bisa menulis langsung ke perangkat blok.

Setelah mempertimbangkan semua pro dan kontra, saya memutuskan untuk memutuskan istirahat с server istirahat sebagai solusi cadangan yang paling nyaman dan menjanjikan.

Penyimpanan cadangan untuk ribuan mesin virtual dengan alat gratis

Dalam rekaman layar ini, Anda dapat melihat bagaimana kanal 10 Gigabit dimanfaatkan sepenuhnya oleh beberapa operasi pencadangan yang berjalan secara bersamaan. Perlu dicatat bahwa utilisasi disk tidak melebihi 30%.

Saya lebih dari puas dengan keputusan yang saya terima!

Sumber: www.habr.com

Beli hosting yang andal untuk situs dengan perlindungan DDoS, server VPS VDS 🔥 Beli hosting website andal dengan perlindungan DDoS, server VPS VDS | ProHoster