{"id":74327,"date":"2020-03-16T08:42:33","date_gmt":"2020-03-16T05:42:33","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/tonkoe-rezervirovanie-fajlovyh-sistem-linux-kak-sozdavat-rabochie-kopii-trehterabajtnoj-subd-mysql-za-20-sekund"},"modified":"2020-03-16T08:42:33","modified_gmt":"2020-03-16T05:42:33","slug":"tonkoe-rezervirovanie-fajlovyh-sistem-linux-kak-sozdavat-rabochie-kopii-trehterabajtnoj-subd-mysql-za-20-sekund","status":"publish","type":"post","link":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/tonkoe-rezervirovanie-fajlovyh-sistem-linux-kak-sozdavat-rabochie-kopii-trehterabajtnoj-subd-mysql-za-20-sekund","title":{"rendered":"Reservas delgadas de sistemas de archivos Linux. C\u00f3mo crear copias de seguridad de una base de datos MySQL de tres terabytes en 20 segundos","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Reservas delgadas de sistemas de archivos Linux. C\u00f3mo crear copias de seguridad de una base de datos MySQL de tres terabytes en 20 segundos\" src=\"\/wp-content\/uploads\/2020\/03\/7502785a78bd6f069913e97829ff2f63.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Me llamo Yuri, soy el l\u00edder del grupo de administraci\u00f3n de sistemas en Sitimobil. Hoy compartir\u00e9 mi experiencia con la tecnolog\u00eda de aprovisionamiento fino (thin provisioning) de sistemas de archivos Linux y explicar\u00e9 c\u00f3mo se puede aplicar en los procesos tecnol\u00f3gicos CI\/CD de la empresa. Analizaremos la situaci\u00f3n en la que, para realizar pruebas autom\u00e1ticas del c\u00f3digo al implementar en producci\u00f3n, necesitamos copias de la base de datos MySQL lo m\u00e1s cercanas posible a la versi\u00f3n 'en vivo', accesibles para lectura y escritura.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3 id=\"vvedenie-zachem-davat-vrednye-sovety\">Introducci\u00f3n: \u00bfpor qu\u00e9 dar consejos da\u00f1inos?<\/h3>\n<p><\/p>\n<p>Es una pregunta l\u00f3gica, ya que existen mecanismos establecidos para migraciones de esquemas de bases de datos a entornos de prueba. \u00bfPor qu\u00e9 llevar la base de datos principal no shardada a tales vol\u00famenes? Adem\u00e1s, no se necesitan todos los datos para las pruebas. Intentar\u00e9 explicar.<\/p>\n<p><\/p>\n<p>Hace aproximadamente un a\u00f1o, en medio del crecimiento activo de nuestro agregador de taxis (en 2018 aumentamos las operaciones completadas aproximadamente 15 veces), crecieron los vol\u00famenes de datos, la carga en los servidores y la frecuencia de las implementaciones. Nos encontramos en la siguiente situaci\u00f3n:<\/p>\n<p><\/p>\n<ul>\n<li>La base de datos MySQL principal creci\u00f3 hasta aproximadamente 1000 tablas con un volumen total de 2,5 TB, y continu\u00f3 creciendo.<\/li>\n<li>No hab\u00eda forma de fragmentar r\u00e1pidamente y dispersar la base de datos. Esto se deb\u00eda al antiguo enfoque de 'escribo en la base de datos lo que quiero y como quiero', con un mont\u00f3n de JOINs y dependencias internas en las tablas.<\/li>\n<li>No hab\u00eda un mecanismo para las migraciones de esquemas de base de datos a entornos de prueba.<\/li>\n<li>No hab\u00eda pruebas autom\u00e1ticas del c\u00f3digo al implementar en producci\u00f3n.<\/li>\n<\/ul>\n<p><\/p>\n<p>Quer\u00eda resolver el \u00faltimo problema lo m\u00e1s r\u00e1pido posible. Ya se hab\u00edan escrito pruebas de Postman para comprobar el monolito PHP principal, pero faltaba una base de datos actual. Al mismo tiempo, no pod\u00edamos crear una r\u00e9plica por la noche, convertirla en maestro y entregarla para su uso durante el d\u00eda: un n\u00famero muy grande de implementaciones y cambios, tanto en los datos como en el esquema de la base de datos, habr\u00eda hecho que el entorno no funcionara incluso a media jornada. Y restringir las implementaciones a solo la jornada laboral ser\u00eda ineficaz. <\/p>\n<p><\/p>\n<p>Sin embargo, la tarea se complet\u00f3: obtuvimos el primer entorno operativo ya despu\u00e9s de dos semanas. A lo largo del a\u00f1o pasado, ha sufrido muchos cambios y contin\u00faa utiliz\u00e1ndose.<\/p>\n<p><\/p>\n<p>A continuaci\u00f3n, describir\u00e9 detalladamente todos los pasos y etapas del desarrollo de nuestra soluci\u00f3n. Ver\u00e1s que este m\u00e9todo merece existir.<\/p>\n<p><\/p>\n<p><strong>\u00bfQu\u00e9 es el 'aprovisionamiento fino'?<\/strong><br \/>\nEsta es una tecnolog\u00eda de hardware o software (otro nombre es vol\u00famenes escasos), que permite asignar m\u00e1s recursos de los que se tienen disponibles. Al mismo tiempo, el volumen asignado debe cumplir con los criterios de just-in-time (lo necesario en el momento justo) y just-enough (s\u00f3lo lo que se necesita). Principalmente, el aprovisionamiento fino se aplica en diversas SAN para proporcionar espacio en disco en vol\u00famenes que superan los realmente disponibles. La tecnolog\u00eda es compatible con varios sistemas de archivos, como LVM2, ZFS, BTRFS. Se utiliza ampliamente en hipervisores de virtualizaci\u00f3n. Para nosotros, el aprovisionamiento fino nos permiti\u00f3 crear r\u00e1pidamente tantas copias de la partici\u00f3n principal de datos (directorio de datos de la base de datos MySQL) a partir de instant\u00e1neas como necesitamos.<\/p>\n<p><\/p>\n<h3 id=\"pervyy-stend-tehnologiya-thin-lvm\">Primera bancada, tecnolog\u00eda Thin LVM<\/h3>\n<p><\/p>\n<p>Este cap\u00edtulo tambi\u00e9n se puede llamar 'C\u00f3mo hacer instant\u00e1neas de grandes vol\u00famenes de datos de la manera m\u00e1s r\u00e1pida con <noindex><a rel=\"nofollow\" href=\"http:\/\/man7.org\/linux\/man-pages\/man7\/lvmthin.7.html\">Thin LVM<\/a><\/noindex>', reduciendo la estabilidad del sistema de archivos y de la base de datos MySQL hasta niveles inaceptables.' <\/p>\n<p><\/p>\n<p>Como ya hab\u00edamos utilizado LVM para construir las particiones principales del sistema operativo, decidimos comenzar precisamente con esta tecnolog\u00eda. Para empezar, necesit\u00e1bamos una m\u00e1quina f\u00edsica separada: una r\u00e9plica de nuestra base de datos MySQL principal, donde podr\u00edamos crear, a pedido, una instant\u00e1nea de la r\u00e9plica y levantarla en otra instancia de MySQL. Durante la fase de prueba, permitimos realizar operaciones modificadoras en esta instancia, y al finalizar las pruebas, la eliminamos exitosamente. La configuraci\u00f3n del servidor era la siguiente:<\/p>\n<p><\/p>\n<ul>\n<li>2 x Intel Silver 4114 (10&#215;2,2 GHz HT)<\/li>\n<li>8 x 32 GB DDR4 <\/li>\n<li>8 x 1920 GB Intel SSD en controlador RAID Adaptec en RAID-10<\/li>\n<\/ul>\n<p><\/p>\n<p>Sobre la elecci\u00f3n entre un controlador RAID y RAID software MD se podr\u00eda escribir un art\u00edculo separado. Solo dir\u00e9 que nuestra elecci\u00f3n se vio afectada por dos factores:<\/p>\n<p><\/p>\n<ul>\n<li>En el momento de establecer la tarea, coloc\u00e1bamos todas las bases de datos en controladores RAID, por lo que se puede decir que as\u00ed se desarroll\u00f3 hist\u00f3ricamente. <\/li>\n<li>La diferencia en el rendimiento en pruebas sint\u00e9ticas del sistema de archivos y pruebas con diversas operaciones en MySQL fue m\u00ednima. <\/li>\n<\/ul>\n<p><\/p>\n<p>Hemos dividido el RAID-10 resultante: creamos un \u00fanico Grupo de Volumen (VG) para todo el espacio (con sobrecostos de aproximadamente 6,7 GB) y creamos una partici\u00f3n l\u00f3gica (Logical Volume, LV) para el sistema de 50 GB. En una situaci\u00f3n normal, designar\u00edamos el resto del espacio para la partici\u00f3n de MySQL. Pero necesit\u00e1bamos un almacenamiento fino, as\u00ed que primero creamos lo que se llama un pool, dentro del cual creamos la partici\u00f3n para \/var\/lib\/mysql de 3,5 TB (en base a los vol\u00famenes de base de datos esperados):<\/p>\n<p><\/p>\n<pre><code class=\"bash\">lvcreate -l 100%FREE -T vga\/thin\nlvcreate -V 3.5T -T vga\/thin -n mysql<\/code><\/pre>\n<p><\/p>\n<p>Formateamos la partici\u00f3n en ext4, la montamos, escribimos la r\u00e9plica y obtuvimos el entorno inicial. Luego hicimos un enlace en forma de API, que debe crear instant\u00e1neas, levantar una instancia de BBDD MySQL en un puerto dado y eliminar la instancia creada. Dado que solo se utilizan llamadas del sistema, elegimos bash como el lenguaje de escritura de scripts y como enlace API HTTP \u2192 bash implementamos una soluci\u00f3n de c\u00f3digo abierto <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/phonkee\/goexpose\">goexpose<\/a><\/noindex>, escrito en Go. <\/p>\n<p><\/p>\n<p>Alg\u00fan d\u00eda publicaremos nuestros scripts bash en c\u00f3digo abierto, pero por ahora simplemente describir\u00e9 el algoritmo principal:<\/p>\n<p><\/p>\n<p>Creaci\u00f3n de la instant\u00e1nea principal snapmain:<\/p>\n<p><\/p>\n<ol>\n<li>Detenemos la r\u00e9plica principal.<\/li>\n<li>Colocamos un bloqueo en las operaciones con la instant\u00e1nea snapmain.<\/li>\n<li>Creamos una nueva instant\u00e1nea snapmain.<\/li>\n<li>Iniciamos MySQL y quitamos el bloqueo.<\/li>\n<\/ol>\n<p><\/p>\n<p>Creaci\u00f3n de BBDD en un puerto arbitrario desde snapmain:<\/p>\n<p><\/p>\n<ol>\n<li>Colocamos un bloqueo en la instancia espec\u00edfica de BBDD (puerto).<\/li>\n<li>Verificamos la existencia de un bloqueo en la creaci\u00f3n de la instant\u00e1nea principal. Si existe, esperamos y volvemos a verificar cada 5 segundos.<\/li>\n<li>Verificamos si hay una antigua partici\u00f3n LV de la instancia.<br \/>\n3.1 Si existe, detenemos la instancia de MySQL utilizando kill -9 y eliminamos la partici\u00f3n LV.<\/li>\n<li>Creamos una nueva instancia desde snapmain.<\/li>\n<li>Preparamos y montamos los directorios para esta instancia.<\/li>\n<li>Eliminamos las se\u00f1ales de slave (archivos) y comenzamos la instancia de MySQL.<\/li>\n<li>Hacemos de ella un master.<\/li>\n<li>Quitamos el bloqueo.<\/li>\n<\/ol>\n<p><\/p>\n<p>Eliminaci\u00f3n de la BBDD en un puerto arbitrario:<\/p>\n<p><\/p>\n<ol>\n<li>Colocamos un bloqueo en la instancia espec\u00edfica de BBDD (puerto).<\/li>\n<li>Matamos la instancia de MySQL utilizando kill -9.<\/li>\n<li>Desmontamos los directorios.<\/li>\n<li>Eliminamos la partici\u00f3n LV y levantamos el bloqueo.<\/li>\n<\/ol>\n<p><\/p>\n<p>Ejemplo de comandos para clonar particiones de una nueva instancia de BBDD:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">lvcreate -n stage_3307 -s vga\/snapmain\nlvchange -ay -K vga\/stage_3307\nmount -o noatime,nodiratime,data=writeback \/dev\/mapper\/vga-stage_3307 \/mnt\/stage_3307<\/code><\/pre>\n<p><\/p>\n<p>Ahora hablar\u00e9 sobre el principal problema que enfrentamos al utilizar la reserva fina. Nos encontramos con el rendimiento de los discos SSD. Esto ocurri\u00f3 debido a las caracter\u00edsticas de Thin LVM: opera a nivel de dispositivo utilizando bloques de baja nivel de 4 MB por defecto. As\u00ed es como se present\u00f3 la situaci\u00f3n:<\/p>\n<p><\/p>\n<ol>\n<li>Creamos un snapshot de la partici\u00f3n principal \/var\/lib\/mysql.<\/li>\n<li>Iniciamos la replicaci\u00f3n para alcanzar al maestro.<\/li>\n<li>Cualquier cambio en las tablas de la r\u00e9plica obliga a guardar bloques de datos antiguos e inalterados en la secci\u00f3n del snapshot.<\/li>\n<li>Cualquier cambio en la instancia de prueba levantada obliga a guardar bloques de datos antiguos e inalterados en la secci\u00f3n del snapshot clonado para esta instancia.<\/li>\n<li>Alcanzamos una carga de operaciones de entrada\/salida del 100% en el dispositivo, ralentizando cualquier operaci\u00f3n y causando un retraso gradual en la r\u00e9plica.<\/li>\n<li>Al final de la jornada laboral, tenemos un stand que ha quedado rezagado por varias horas.<\/li>\n<\/ol>\n<p><\/p>\n<p>C\u00f3mo lidiamos con esto para obtener un resultado m\u00e1s razonable (puntos clave):<\/p>\n<p><\/p>\n<p>Controlador RAID:<\/p>\n<p><\/p>\n<ul>\n<li>Desactivamos por defecto todos los tipos de cach\u00e9. <\/li>\n<li>Configuramos el writeback (cuando los datos entran en el b\u00fafer, la escritura se completa antes de que se realice el guardado real en el disco).<\/li>\n<\/ul>\n<p><\/p>\n<p>Sistema de archivos:<\/p>\n<p><\/p>\n<ul>\n<li>En el punto de montaje \/var\/lib\/mysql especificamos <em>noatime,nodiratime,data=writeback<\/em><\/li>\n<li>Desactivamos el registro de ext4 usando tune2fs.<\/li>\n<\/ul>\n<p><\/p>\n<p>MySQL:<\/p>\n<p><\/p>\n<ul>\n<li>Especificamos <em>innodb_flush_method = O_DSYNC<\/em> (aumentamos la velocidad de escritura, reduciendo as\u00ed la fiabilidad).<\/li>\n<li>Desactivamos el registro, no necesitamos logs.<\/li>\n<li>Especificamos <em>innodb_buffer_pool_size = 4G<\/em> (cuanto menor sea el tama\u00f1o del pool InnoDB, m\u00e1s r\u00e1pido se apagar\u00e1 MySQL al detenerse y m\u00e1s r\u00e1pido crearemos el snapshot).<\/li>\n<\/ul>\n<p><\/p>\n<p>Esta no es una lista completa, especialmente en lo que respecta a MySQL. Sin embargo, los dem\u00e1s cambios son menores y a menudo no se aplican de manera consistente. Por ejemplo, en un intento de aliviar la carga de los discos, incluso trasladamos <em>innodb_parallel_doublewrite_path<\/em> a \/dev\/shm, lo que en algunos casos al iniciar una instancia incorrectamente finalizada nos ahorraba hasta 5 segundos.<\/p>\n<p><\/p>\n<p>\u00bfPor qu\u00e9 detenemos MySQL antes de hacer un snapshot? Porque podr\u00edamos tomarlo de una r\u00e9plica en funcionamiento. Es cierto, pero la nueva instancia de la base de datos en este snapshot se considerar\u00e1 da\u00f1ada por defecto y requerir\u00e1 un escaneo completo al iniciar. Definitivamente, detener la r\u00e9plica es m\u00e1s r\u00e1pido, aunque al final es la operaci\u00f3n m\u00e1s prolongada de todo el proceso.<\/p>\n<p><\/p>\n<p>Como resultado, obtuvimos tiempos m\u00e1s aceptables y un stand listo para trabajar. Sin embargo, como se puede ver en el gr\u00e1fico m\u00e1s elocuente del retraso de replicaci\u00f3n de la r\u00e9plica principal, la situaci\u00f3n todav\u00eda est\u00e1 lejos de ser ideal:<br \/>\n<img decoding=\"async\" alt=\"Reservas delgadas de sistemas de archivos Linux. C\u00f3mo crear copias de seguridad de una base de datos MySQL de tres terabytes en 20 segundos\" src=\"\/wp-content\/uploads\/2020\/03\/9bb7bb7d9abfea124a75616deec57f05.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Entre otras desventajas, se debe mencionar la casi imposibilidad de monitorear el grupo Thin LVM: adem\u00e1s de las funciones est\u00e1ndar del sistema como iostat, no es posible entender, por ejemplo, qu\u00e9 elemento del grupo est\u00e1 generando la mayor carga en el sistema de archivos.<\/p>\n<p><\/p>\n<p>Cabe destacar una gran desventaja relacionada con la optimizaci\u00f3n mencionada anteriormente: obtuvimos un stand YOLO. Aproximadamente una vez cada uno o dos meses, ext4 no soportaba tal abuso y se romp\u00eda irremediablemente, requiriendo reformateo y recarga de la r\u00e9plica. Al ganar en velocidad, destruyeron sin esperanza la estabilidad.<\/p>\n<p><\/p>\n<p>\u00bfQu\u00e9 m\u00e9tricas se deben seguir durante la operaci\u00f3n de Thin LVM:<\/p>\n<p><\/p>\n<ul>\n<li>Porcentaje de datos del grupo delgado<\/li>\n<li>Porcentaje de metadatos del grupo delgado<\/li>\n<\/ul>\n<p><\/p>\n<p>Si nuestro stand sobrevive a la falta de espacio para datos (solo es necesario limpiar los discos), la falta de espacio para metadatos conducir\u00e1 a un colapso total del grupo y a la necesidad de recrearlo desde cero.<\/p>\n<p><\/p>\n<p>El sistema de archivos dentro del grupo se fragmenta mucho con el tiempo. Recomiendo ejecutar a diario, mediante cron, el comando <em>fstrim -v \/var\/lib\/mysql<\/em>.<\/p>\n<p><\/p>\n<p>Resultados intermedios:<\/p>\n<p><\/p>\n<ul>\n<li>La tecnolog\u00eda es f\u00e1cilmente aplicable, al igual que el LVM, y no requiere cualificaciones especiales de los ingenieros.<\/li>\n<li>Es adecuada para bases de datos peque\u00f1as y no demasiado cargadas. Cuanto m\u00e1s peque\u00f1a sea la base de datos, menos fragmentos se mueven por el sistema de archivos dentro del grupo, y menor es la carga en los discos.<\/li>\n<li>Para nuestra tarea, comenzamos a buscar otras soluciones, de las cuales se hablar\u00e1 en la siguiente secci\u00f3n.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"vtoroy-stend-tehnologiya-zfs\">El segundo stand, tecnolog\u00eda ZFS<\/h3>\n<p><\/p>\n<p>Hace mucho tiempo trat\u00e9 con el sistema de archivos ZFS, pero entonces funcionaba bastante bien en su sistema operativo nativo Solaris. Exist\u00eda una versi\u00f3n portado a FreeBSD con un nivel de implementaci\u00f3n bastante bueno. Tambi\u00e9n hab\u00eda un puerto incompleto en Linux que pocos utilizaban. Debido a la estructura de almacenamiento de datos B-tree (por cierto, la misma estructura de almacenamiento que InnoDB de MySQL), ZFS tuvo un rendimiento deficiente en instalaciones con un n\u00famero muy grande de archivos. Todo esto, junto con la necesidad de aprender la teor\u00eda antes de usarlo, elimin\u00f3 esta experiencia de mi pr\u00e1ctica durante mucho tiempo. Aparecieron ext4 y xfs, que se convirtieron en el est\u00e1ndar. Pero considerando que ZFS se adapta muy bien a nuestra tarea, y que la versi\u00f3n de Linux, seg\u00fan los comentarios, ha evolucionado en un producto bastante decente (aunque no con soporte completo, por lo que instalar un sistema en ZFS desde cero solo se puede hacer con varios trucos), decidimos probarlo.<\/p>\n<p><\/p>\n<p>Por razones obvias, elegimos un stand con una configuraci\u00f3n similar (excepto por el controlador RAID). Instalamos ocho discos SSD de 1920 GB. No ten\u00edamos ganas de escribir nuestra propia imagen de red para cargar el servidor en un ZFS virgen, as\u00ed que tomamos 50 GB de cada disco y creamos un RAID-10 MD para el sistema. Combinamos los restantes 1950 GB en un ZFS an\u00e1logo de RAID-10:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">zpool create zpool mirror \/dev\/sda2 \/dev\/sdb2 mirror \/dev\/sdc2 \/dev\/sdd2 mirror \/dev\/sde2 \/dev\/sdf2 mirror \/dev\/sdg2 \/dev\/sdh2<\/code><\/pre>\n<p><\/p>\n<p>Creamos las particiones para MySQL:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">zfs create zpool\/mysql\nzfs set compression=gzip zpool\/mysql\nzfs set recordsize=128k zpool\/mysql\nzfs set atime=off zpool\/mysql\nzfs create zpool\/mysql\/data\nzfs set recordsize=16k zpool\/mysql\/data\nzfs set primarycache=metadata zpool\/mysql\/data\nzfs set mountpoint=\/var\/lib\/mysql zpool\/mysql\/data<\/code><\/pre>\n<p><\/p>\n<p>Tenga en cuenta que hemos habilitado la compresi\u00f3n de datos gzip est\u00e1ndar. Tenemos muchos recursos de CPU en el servidor y no est\u00e1n completamente utilizados. Como resultado, nuestros 3 TB de base de datos se convirtieron en 1.6 TB, y dado que el eslab\u00f3n d\u00e9bil, al igual que en el caso anterior, son las m\u00e1ximas prestaciones de los discos, cuanto menos datos haya, mejor. Desde el principio obtuvimos un excelente bono de ZFS. En hora pico, con la carga m\u00e1xima para mantener gzip, se utilizan hasta 4 n\u00facleos, pero no nos quejamos.<\/p>\n<p><\/p>\n<p>Luego, la implementaci\u00f3n avanz\u00f3 m\u00e1s r\u00e1pido. Copiamos las configuraciones de r\u00e9plica de MySQL del stand de LVM. Tuvimos que dedicar algo de tiempo a reescribir los scripts a los comandos de ZFS, pero en general los algoritmos permanecieron iguales. Ejemplo de creaci\u00f3n de un snapshot:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">zfs set snapdir=visible zpool\/mysql\/data\nzfs create zpool\/stage_3307\nzfs clone zpool\/mysql\/data@snapmain zpool\/stage_3307\/data\nzfs set mountpoint=\/mnt\/stage_3307 zpool\/stage_3307\/data<\/code><\/pre>\n<p><\/p>\n<p>De la optimizaci\u00f3n adicional: hemos extra\u00eddo a la memoria las secciones ZFS con metadatos y registros l2arc y zil. Para nuestra tarea, como result\u00f3 m\u00e1s adelante, esto fue excesivo, pero por ahora hemos dejado esta optimizaci\u00f3n, cambiarlo en caso de necesidad no es complicado. Entre los efectos negativos, est\u00e1 el tener que recrear las \u00e1reas de memoria correspondientes despu\u00e9s de reiniciar el servidor. Los datos, en este caso, no se pierden. Extracto de zpool status:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">logs\n      \/dev\/shm\/zil_slog.img  ONLINE       0     0     0\ncache\n      \/dev\/shm\/l2arc.img     ONLINE       0     0     0<\/code><\/pre>\n<p><\/p>\n<p>Con esta configuraci\u00f3n comenzamos a probar el entorno y obtuvimos excelentes resultados: con dos instancias de la base de datos funcionando simult\u00e1neamente (y una r\u00e9plica principal activa) sobre las instant\u00e1neas, obtuvimos una carga de disco del 50-60%.<\/p>\n<p><\/p>\n<p>Hemos eliminado nuestro problema principal, lo que se puede ver en el gr\u00e1fico de retraso de replicaci\u00f3n (comparar con el gr\u00e1fico anterior en la secci\u00f3n Thin LVM):<br \/>\n<img decoding=\"async\" alt=\"Reservas delgadas de sistemas de archivos Linux. C\u00f3mo crear copias de seguridad de una base de datos MySQL de tres terabytes en 20 segundos\" src=\"\/wp-content\/uploads\/2020\/03\/15df9283838a4662ff0f68accfde4089.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Adem\u00e1s, y gracias a esto, hemos acelerado significativamente en todas las operaciones: la creaci\u00f3n completa de una instant\u00e1nea con la detenci\u00f3n y el reinicio de la r\u00e9plica tarda hasta 40 segundos, el despliegue de una nueva instancia de MySQL a partir de una instant\u00e1nea lleva hasta 20 segundos. Lo que satisface m\u00e1s que adecuadamente a nosotros y a nuestras pruebas de c\u00f3digo.<\/p>\n<p><\/p>\n<p>Resultados intermedios:<\/p>\n<p><\/p>\n<ul>\n<li>Los resultados satisfacen completamente nuestra necesidad de obtener una copia de la base de datos de producci\u00f3n para pruebas de c\u00f3digo.<\/li>\n<li>La tecnolog\u00eda requiere aprendizaje: hay que entender qu\u00e9 es ZFS y c\u00f3mo trabajar con \u00e9l.<\/li>\n<li>No hemos comprobado el estado actual de ZFS con una gran cantidad (m\u00e1s de 1 mill\u00f3n) de archivos peque\u00f1os. Pero suponemos que el problema persiste, por lo que no recomendar\u00eda este sistema de archivos para ning\u00fan tipo de almacenamiento de archivos.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"chto-dalshe\">\u00bfQu\u00e9 sigue?<\/h3>\n<p><\/p>\n<p>En el marco del stand no hacer m\u00e1s nada, el resultado nos satisface. Quiz\u00e1s m\u00e1s adelante a\u00f1adamos en la configuraci\u00f3n de replicaci\u00f3n del stand excepciones para tablas que no son necesarias para las pruebas, lo que reducir\u00e1 a\u00fan m\u00e1s el volumen de la base de datos. No hemos probado el sistema BTRFS y su implementaci\u00f3n de la tecnolog\u00eda de respaldo fino. Sin embargo, esa tarea ya no es prioritaria, ya que el objetivo principal ha sido alcanzado. En general, por supuesto, nos gustar\u00eda alejarnos del enfoque descrito anteriormente: implementar migraciones de base de datos funcionales en el entorno de pruebas, crear un contorno de prueba de base de datos separado, trabajar en la fragmentaci\u00f3n de la base de datos principal. Mucho de esto ya lo estamos llevando a cabo, lo que definitivamente compartiremos en art\u00edculos futuros. <\/p>\n<p><\/p>\n<h3 id=\"itogi\">Resultados<\/h3>\n<p><\/p>\n<p>La tarea inicial se resolvi\u00f3, aunque de una manera inusual. En los resultados intermedios se describieron las ventajas y desventajas de cada una de las tecnolog\u00edas aplicadas, por lo que decidamos qu\u00e9 tecnolog\u00eda y cu\u00e1ndo se puede utilizar:<\/p>\n<p><\/p>\n<ul>\n<li>Thin LVM \u2014 en bases de datos peque\u00f1as y cuando no se quiere o no hay tiempo para estudiar ZFS.<\/li>\n<li>ZFS \u2014 si hay experiencia en su uso o la posibilidad de dedicar tiempo a su estudio en cualquier situaci\u00f3n. <\/li>\n<\/ul>\n<p><\/p>\n<p>A un nivel m\u00e1s alto de representaci\u00f3n, este art\u00edculo no es solo una comparaci\u00f3n de la tecnolog\u00eda de dos sistemas de archivos. La idea principal que me gustar\u00eda transmitir y consolidar es que no debemos tener miedo de pensar de manera no convencional en situaciones cr\u00edticas para el negocio y de seguir solo recetas preestablecidas. En su momento, todo el departamento t\u00e9cnico podr\u00eda haber sacudido la cabeza y haber dicho que la tarea de crear copias de seguridad de base de datos de tres terabytes en menos de un minuto era inejecutable, y que no necesit\u00e1bamos tecnolog\u00edas arriesgadas, que hici\u00e9ramos como deb\u00edamos. Eso era posible, pero habr\u00edamos perdido alrededor de seis meses a un a\u00f1o y muchos viajes de clientes (los viajes son nuestro principal indicador comercial) sin pruebas y durante la implementaci\u00f3n. Actuando de manera no convencional, no perdimos tanto tiempo en la implementaci\u00f3n, ganamos experiencia en nuevas y olvidadas tecnolog\u00edas, y proporcionamos las pruebas precisamente en el momento en que las necesit\u00e1bamos mucho. Sin duda, esto tuvo un impacto positivo en todos nuestros indicadores. La elecci\u00f3n siempre es suya, y de nuestra parte, continuaremos hablando en nuestro blog sobre logros actuales y futuros interesantes.<\/p>\n<p>Fuente: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/citymobil\/blog\/492172\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u042e\u0440\u0438\u0439, \u044f \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u0433\u0440\u0443\u043f\u043f\u044b \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u0421\u0438\u0442\u0438\u043c\u043e\u0431\u0438\u043b. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043f\u043e\u0434\u0435\u043b\u044e\u0441\u044c \u043e\u043f\u044b\u0442\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0435\u0439 \u0442\u043e\u043d\u043a\u043e\u0433\u043e \u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f (thin provisioning) \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c Linux \u0438 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u0432 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 CI\/CD-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u0445 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438. \u041c\u044b \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e, \u043a\u043e\u0433\u0434\u0430 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u043f\u0440\u0438 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0435 \u0435\u0433\u043e \u0432 production \u043d\u0430\u043c \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b \u043a\u043e\u043f\u0438\u0438 \u0411\u0414 MySQL, \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":74328,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-74327","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/tonkoe-rezervirovanie-fajlovyh-sistem-linux-kak-sozdavat-rabochie-kopii-trehterabajtnoj-subd-mysql-za-20-sekund\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0422\u043e\u043d\u043a\u043e\u0435 \u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c Linux. \u041a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0447\u0438\u0435 \u043a\u043e\u043f\u0438\u0438 \u0442\u0440\u0435\u0445\u0442\u0435\u0440\u0430\u0431\u0430\u0439\u0442\u043d\u043e\u0439 \u0421\u0423\u0411\u0414 MySQL \u0437\u0430 20 \u0441\u0435\u043a\u0443\u043d\u0434 | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/tonkoe-rezervirovanie-fajlovyh-sistem-linux-kak-sozdavat-rabochie-kopii-trehterabajtnoj-subd-mysql-za-20-sekund\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-03-16T05:42:33+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-03-16T05:42:33+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Reserva fina de sistemas de archivos Linux. C\u00f3mo crear copias de seguridad de una base de datos MySQL de tres terabytes en 20 segundos | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/tonkoe-rezervirovanie-fajlovyh-sistem-linux-kak-sozdavat-rabochie-kopii-trehterabajtnoj-subd-mysql-za-20-sekund","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"es_ES","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0422\u043e\u043d\u043a\u043e\u0435 \u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c Linux. \u041a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0447\u0438\u0435 \u043a\u043e\u043f\u0438\u0438 \u0442\u0440\u0435\u0445\u0442\u0435\u0440\u0430\u0431\u0430\u0439\u0442\u043d\u043e\u0439 \u0421\u0423\u0411\u0414 MySQL \u0437\u0430 20 \u0441\u0435\u043a\u0443\u043d\u0434 | ProHoster","og:url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/tonkoe-rezervirovanie-fajlovyh-sistem-linux-kak-sozdavat-rabochie-kopii-trehterabajtnoj-subd-mysql-za-20-sekund","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-03-16T05:42:33+00:00","article:modified_time":"2020-03-16T05:42:33+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"74327","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 18:16:23","updated":"2022-10-01 23:42:57","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/74327","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=74327"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/74327\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/74328"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=74327"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=74327"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=74327"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}