ZFS: ¿Redistribuir zvol sobre todos los discos en el zpool?


12

¿Hay alguna forma en que se pueda solicitar a ZFS que redistribuya un sistema de archivos dado sobre todos los discos en su zpool?

Estoy pensando en un escenario en el que tengo un volumen ZFS de tamaño fijo que se exporta como LUN sobre FC. El zpool actual es pequeño, solo dos discos duplicados de 1TB, y el zvol es de 750GB en total. Si tuviera que expandir repentinamente el tamaño del zpool a, digamos, 12 discos de 1TB, creo que el zvol aún estaría efectivamente 'alojado' solo en los dos primeros cabezales.

Dado que más husos = más IOPS, ¿qué método podría usar para 'redistribuir' el zvol sobre los 12 husos para aprovecharlos?

Respuestas:


8

Debería reescribir sus datos en el zpool expandido para reequilibrarlo. De lo contrario, a medida que pase el tiempo, sus escritos se distribuirán en todo el grupo.


¿Supongo que no hay una manera rápida y fácil de hacer eso ...?
growse

77
zfs send | zfs recv
the-wabbit

Voy a probar eso, no puedo creer que algo tan simple lo haga. :)
growse

3
Informe, nunca he hecho esto y también tengo curiosidad.
StrangeWill

3

No hay ninguna razón para que zvol se almacene solo en los dispositivos iniciales. Si amplía el grupo, ZFS abarcará los datos actualizados en todos los dispositivos subyacentes disponibles. No hay particiones fijas con ZFS.


44
En mi experiencia, esto no es cierto. Si bien no hay 'parición fija', ZFS no moverá los datos por su propia voluntad fuera de las solicitudes de E / S del cliente. Si crea el escenario que describí, agregue más discos y luego haga algunas E / S pesadas en el LUN original, solo verá actividad en los dos primeros discos de la matriz, porque ahí es donde están los datos. ewwhite señala que con el tiempo se equilibra, pero tengo curiosidad por saber si hay una forma más rápida de hacerlo.
growse

1
Lo siento si no estaba claro. Por supuesto, los datos existentes no se moverán mágicamente. Solo los datos actualizados se reubicarán de manera uniforme. Eso es lo que quise decir con "nuevas IO". En lo que respecta a los datos estáticos existentes, el almacenamiento en caché también mejorará el rendimiento siempre que los bloques se lean más de una vez.
jlliagre

0

Esta es una "continuación" de la respuesta de ewwhite:

Debería reescribir sus datos en el zpool expandido para reequilibrarlo

Escribí un script PHP ( disponible en github ) para automatizar esto en mi host Ubuntu 14.04.

Uno solo necesita instalar la herramienta CLI de PHP con sudo apt-get install php5-cliy ejecutar el script, pasando la ruta a los datos de sus grupos como primer argumento. P.ej

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

Idealmente, debe ejecutar el script dos veces en todos los datos del grupo. La primera ejecución equilibrará la utilización de la unidad, pero los archivos individuales se asignarán en exceso a las unidades que se agregaron en último lugar. La segunda ejecución asegurará que cada archivo esté "bastante" distribuido entre las unidades. Digo bastante en lugar de hacerlo de manera uniforme porque solo se distribuirá de manera uniforme si no está mezclando las capacidades de la unidad, ya que estoy con mi raid 10 de pares de diferentes tamaños (espejo de 4 TB + espejo de 3 TB + espejo de 3 TB).

Razones para usar un script

  • Tengo que solucionar el problema "en el lugar". Por ejemplo, no puedo escribir los datos en otro sistema, eliminarlos aquí y volver a escribirlos.
  • Llené mi grupo más del 50%, por lo que no podía simplemente copiar todo el sistema de archivos a la vez antes de eliminar el original.
  • Si solo hay ciertos archivos que necesitan funcionar bien, entonces uno podría ejecutar el script dos veces sobre esos archivos. Sin embargo, la segunda ejecución solo es efectiva si la primera ejecución logró equilibrar la utilización de las unidades.
  • Tengo muchos datos y quiero poder ver una indicación del progreso realizado.

¿Cómo puedo saber si se logra incluso la utilización de la unidad?

Use la herramienta iostat durante un período de tiempo (por ejemplo iostat -m 5) y verifique las escrituras. Si son lo mismo, entonces ha logrado una distribución uniforme. No están perfectamente igualados en la captura de pantalla a continuación porque estoy ejecutando un par de 4 TB con 2 pares de unidades de 3 TB en RAID 10, por lo que los dos 4 se escribirán un poco más. ingrese la descripción de la imagen aquí

Si la utilización de su unidad está "desequilibrada", iostat mostrará algo más parecido a la captura de pantalla a continuación donde se escriben las nuevas unidades de manera desproporcionada. También puede decir que son las nuevas unidades porque las lecturas están en 0 ya que no tienen datos sobre ellas. ingrese la descripción de la imagen aquí

El script no es perfecto, solo es una solución, pero me funciona mientras tanto hasta que ZFS algún día implemente una función de reequilibrio como BTRFS (dedos cruzados).


Oh my ... Wow ...
ewwhite

0

Bueno, esto es un truco, pero dado que ha detenido la máquina usando el zvol, podría enviar el sistema de archivos a un archivo local en localhost llamado bar.zvol, y luego volver a recibir el sistema de archivos. Eso debería reequilibrar los datos por usted.

zfs send tank/bar > bar.zvol

zfs receive tank/bar < bar.zvol

-1

La mejor solución que encontré fue duplicar la mitad de sus datos en el grupo expandido y luego eliminar los datos duplicados originales.


3
¿Puedes elaborar?
ewwhite

@reco: zvols no son sistemas de archivos, por lo que no puede eliminar ni duplicar datos en ellos. Puede sobrescribir los datos, pero eso los corrompería a menos que lo haga con el mismo contenido que efectivamente abarcaría los datos en los volúmenes subyacentes, pero esto es lo que ewwhite ya sugirió hace un año.
jlliagre

Sí, tiene usted razón. Estaba mirando alrededor e investigando el mismo tema. de lo que me di cuenta es que con zfs no se necesita redistribuir datos a través de vdevs. pero si aún desea duplicar los datos y eliminar los originales, acelerará lo que zfs haría con el tiempo.
reco

1
La redistribución de datos a través de vdevs es una solicitud legítima. Me temo que aún te falta la pregunta sobre zvols, no sobre sistemas de archivos. No puede duplicar o eliminar datos en un volumen, eso no tiene sentido.
jlliagre

hola jlliagre sí, tienes razón, lo siento
reco
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.