ZFS: Mendistribusikan ulang zvol ke semua disk di zpool?


12

Apakah ada cara di mana ZFS dapat diminta untuk mendistribusikan kembali sistem file yang diberikan ke semua disk di zpool?

Saya sedang memikirkan sebuah skenario di mana saya memiliki volume ZFS ukuran tetap yang diekspor sebagai LUN di atas FC. Zpool saat ini kecil, hanya dua disk mirror 1TB, dan zvol totalnya 750GB. Jika saya tiba-tiba memperluas ukuran zpool menjadi, katakanlah, 12 disk 1TB, saya yakin zvol masih akan secara efektif 'ditempati' pada dua spindel pertama saja.

Mengingat bahwa lebih banyak spindle = lebih banyak IOPS, metode apa yang dapat saya gunakan untuk 'mendistribusikan kembali' zvol ke semua 12 spindel untuk memanfaatkannya?

Jawaban:


8

Anda perlu menulis ulang data Anda ke zpool yang diperluas untuk menyeimbangkannya. Jika tidak, seiring berjalannya waktu, tulisan Anda akan didistribusikan di seluruh kumpulan.


Saya kira tidak ada cara cepat dan mudah untuk melakukan itu ...?
growse

7
zfs send | zfs recv
the-wabbit

Saya akan mengujinya - tidak bisa percaya sesuatu yang begitu sederhana akan melakukannya. :)
growse

3
Laporkan kembali, saya belum pernah melakukan ini dan saya juga ingin tahu.
StrangeWill

3

Tidak ada alasan untuk zvol disimpan hanya pada perangkat awal. Jika Anda memperbesar kumpulan, ZFS akan merentangkan data yang diperbarui pada semua perangkat mendasar yang tersedia. Tidak ada partisi tetap dengan ZFS.


4
Dalam pengalaman saya, ini tidak benar. Meskipun tidak ada 'paritioning tetap', ZFS tidak akan memindahkan data berdasarkan kehendaknya sendiri di luar permintaan IO klien. Jika Anda membuat skenario yang saya jelaskan, tambahkan lebih banyak disk dan kemudian lakukan beberapa IO berat pada LUN asli, Anda hanya akan melihat aktivitas pada dua disk pertama dalam array, karena di situlah datanya. Putih menunjukkan bahwa seiring waktu berjalan seimbang, tetapi saya ingin tahu apakah ada cara yang lebih cepat untuk melakukan ini.
growse

1
Maaf jika saya tidak jelas. Tentu saja, data yang ada tidak akan bergerak secara ajaib. Hanya data yang diperbarui akan dipindahkan secara merata. Itulah yang saya maksud dengan "IO baru". Sejauh menyangkut data statis yang ada, caching juga akan meningkatkan kinerja selama blok dibaca lebih dari sekali.
jlliagre

0

Ini adalah "kelanjutan" dari jawaban ewwhite:

Anda perlu menulis ulang data Anda ke zpool yang diperluas untuk menyeimbangkannya

Saya menulis skrip PHP ( tersedia di github ) untuk mengotomatisasi ini pada host Ubuntu 14.04 saya.

Satu hanya perlu menginstal alat PHP CLI dengan sudo apt-get install php5-clidan menjalankan skrip, melewati jalur ke data kumpulan Anda sebagai argumen pertama. Misalnya

php main.php /path/to/my/files

Idealnya, Anda harus menjalankan skrip dua kali di semua data di kumpulan. Proses pertama akan menyeimbangkan pemanfaatan drive, tetapi masing-masing file akan dialokasikan terlalu besar ke drive yang ditambahkan terakhir. Jalankan kedua akan memastikan bahwa setiap file "cukup" didistribusikan di seluruh drive. Saya katakan secara adil alih-alih secara merata karena hanya akan didistribusikan secara merata jika Anda tidak mencampurkan kapasitas drive seperti saya dengan serangan saya 10 pasangan ukuran yang berbeda (cermin 4 TB + cermin 3TB + cermin 3TB).

Alasan untuk Menggunakan Skrip

  • Saya harus memperbaiki masalah "di tempat". Misalnya saya tidak bisa menulis data ke sistem lain, hapus di sini dan tulis kembali semua.
  • Saya mengisi kumpulan saya lebih dari 50%, jadi saya tidak bisa hanya menyalin seluruh sistem file sekaligus sebelum menghapus yang asli.
  • Jika hanya ada file tertentu yang perlu berkinerja baik, maka orang bisa menjalankan skrip dua kali dari file-file itu. Namun, jalankan kedua hanya efektif jika dijalankan pertama berhasil berhasil menyeimbangkan pemanfaatan drive.
  • Saya memiliki banyak data dan ingin dapat melihat indikasi kemajuan yang dibuat.

Bagaimana Saya Dapat Mengetahui jika Penggunaan Drive Sekalipun Dicapai?

Gunakan alat iostat selama periode waktu tertentu (misalnya iostat -m 5) dan periksa tulisan. Jika mereka sama, maka Anda telah mencapai spread yang merata. Mereka bahkan tidak sempurna dalam screenshot di bawah ini karena saya menjalankan sepasang 4TB dengan 2 pasang drive 3TB di RAID 10, sehingga kedua 4 ini akan ditulis lebih sedikit. masukkan deskripsi gambar di sini

Jika penggunaan drive Anda "tidak seimbang", maka iostat akan menampilkan sesuatu yang lebih seperti tangkapan layar di bawah di mana drive baru sedang ditulis secara tidak proporsional. Anda juga dapat mengatakan bahwa itu adalah drive baru karena bacaannya 0 karena mereka tidak memiliki data. masukkan deskripsi gambar di sini

Skripnya tidak sempurna, hanya solusi, tetapi sementara itu saya bekerja sampai ZFS mengimplementasikan fitur penyeimbangan seperti yang dimiliki BTRFS (semoga saja).


Oh my ... Wow ...
ewwhite

0

Yah ini sedikit hack tetapi mengingat bahwa Anda telah menghentikan mesin menggunakan zvol, Anda bisa zfs mengirim sistem file ke file lokal di localhost bernama bar.zvol, dan kemudian Anda menerima sistem kembali file lagi. Itu harus menyeimbangkan kembali data untuk Anda.

zfs send tank/bar > bar.zvol

zfs receive tank/bar < bar.zvol

-1

solusi terbaik yang saya temukan adalah menggandakan setengah dari data Anda pada kumpulan yang diperluas dan kemudian menghapus data duplikat asli.


3
Bisakah Anda menguraikan?
ewwhite

@ reco: zvols bukan sistem file sehingga Anda tidak dapat menghapus atau menggandakan data. Anda mungkin menimpa data tetapi itu akan merusaknya kecuali jika Anda melakukannya dengan konten yang sama yang secara efektif akan merentang data pada volume yang mendasarinya, tetapi ini adalah apa yang sudah disarankan oleh ewwhite satu tahun yang lalu.
jlliagre

ya kamu benar. Saya mencari-cari dan meneliti topik yang sama. Apa yang saya sadari adalah bahwa dengan zfs mendistribusikan kembali data melalui vdevs tidak diperlukan. tetapi jika Anda masih ingin alasan apa pun menggandakan data dan menghapus yang asli akan mempercepat apa yang akan dilakukan zfs dari waktu ke waktu.
reco

1
Mendistribusikan ulang data melalui vdevs adalah permintaan yang sah. Saya khawatir Anda masih melewatkan pertanyaannya adalah tentang zvols, bukan sistem file. Anda tidak dapat menggandakan atau menghapus data pada volume, itu tidak masuk akal.
jlliagre

hi jlliagre. ya kamu benar maaf
reco
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.