Convertir a raid1 un sistema de ficheros ya instalado en un solo disco

con No hay comentarios

Partimos de un sistema ya instalado con tres particiones distintas: /dev/sda1 para /boot, /dev/sda5 para el swap y /dev/sda6 para /.

Filesystem            Size  Used Avail Use% Mounted on
/dev/sda6             7.4G  509M  6.5G   8% /
tmpfs                  63M     0   63M   0% /lib/init/rw
udev                   10M   84K   10M   1% /dev
tmpfs                  63M     0   63M   0% /dev/shm
/dev/sda1             177M   11M  157M   7% /boot

 

  • Después de añadir el disco a la máquina utilizamos el truco que ya usamos en el artículo original para copiar la tabla de particiones de un disco a otro:
    shian:~# sfdisk -d /dev/sda | sfdisk /dev/sdb
    Checking that no-one is using this disk right now ...
    OK
    
    Disk /dev/sdb: 1044 cylinders, 255 heads, 63 sectors/track
    
    sfdisk: ERROR: sector 0 does not have an msdos signature
     /dev/sdb: unrecognized partition table type
    Old situation:
    No partitions found
    New situation:
    Units = sectors of 512 bytes, counting from 0
    
       Device Boot    Start       End   #sectors  Id  System
    /dev/sdb1            63    385559     385497  83  Linux
    /dev/sdb2        385560  16771859   16386300   5  Extended
    /dev/sdb3             0         -          0   0  Empty
    /dev/sdb4             0         -          0   0  Empty
    /dev/sdb5        385623   1172744     787122  82  Linux swap / Solaris
    /dev/sdb6       1172808  16771859   15599052  83  Linux
  • Editamos con fdisk las particiones de /dev/sdb y cambiamos del tipo a fd de las número 1, 5 y 6. El resultado final es:
    ...
    Command (m for help): p
    
    Disk /dev/sdb: 8589 MB, 8589934592 bytes
    255 heads, 63 sectors/track, 1044 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sdb1               1          24      192748+  fd  Linux raid autodetect
    /dev/sdb2              25        1044     8193150    5  Extended
    /dev/sdb5              25          73      393561   fd  Linux raid autodetect
    /dev/sdb6              74        1044     7799526   fd  Linux raid autodetect
  • Ahora creamos los dispositivos raid para las particiones.
    shian:~# mdadm --create /dev/md0 --level=1 --raid-disks=2 missing /dev/sdb1
    mdadm: array /dev/md0 started.
    shian:~# mdadm --create /dev/md1 --level=1 --raid-disks=2 missing /dev/sdb5
    mdadm: array /dev/md1 started.
    shian:~# mdadm --create /dev/md2 --level=1 --raid-disks=2 missing /dev/sdb6
    mdadm: array /dev/md2 started.
  • Formateamos las nuevas particiones.
    shian:~# mkfs.ext2 /dev/md0
    shian:~# mkswap /dev/md1
    shian:~# mkfs.ext3 /dev/md2
  • Actualizamos el archivo mdadm.conf con los nuevos dispositivos raid.
    shian:~# cd /etc/mdadm
    shian:/etc/mdadm# cp mdadm.conf mdadm.conf.`date +%y%m%d`
    shian:/etc/mdadm# echo "DEVICE partitions" > mdadm.conf
    shian:/etc/mdadm# mdadm --detail --scan >> mdadm.conf
  • Montamos las particiones del raid.
    shian:~# mkdir /mnt/md0
    shian:~# mkdir /mnt/md2
    
    shian:~# mount /dev/md0 /mnt/md0
    shian:~# mount /dev/md2 /mnt/md2
  • Editamos el archivo /etc/fstab y cambiamos sda1, sda5 y sda6 por los nuevos dispositivos del raid (md0, md1 y md2 respectivamente).
    # /etc/fstab: static file system information.
    #
    #     
           
    
    proc            /proc           proc    defaults        0       0
    /dev/md2        /               ext3    defaults,errors=remount-ro 0       1
    /dev/md0        /boot           ext2    defaults        0       2
    /dev/md1        none            swap    sw              0       0
    /dev/hdc        /media/cdrom0   udf,iso9660 user,noauto     0       0
    /dev/fd0        /media/floppy0  auto    rw,user,noauto  0       0
    
    
  • Editamos el archivo /boot/grub/menu.lst de configuración del grub para añadir las entradas a ambos discos duros. Duplicamos la línea que tenemos del arranque, cambiamos sda6 por md2 y cambiamos el disco duro del que arranca.
    # Línea original
    #title           Debian GNU/Linux, kernel 2.6.18-4-686
    #root            (hd0,0)
    #kernel          /vmlinuz-2.6.18-4-686 root=/dev/sda6 ro
    #initrd          /initrd.img-2.6.18-4-686
    #savedefault
    
    # Nuevas líneas
    title           Debian GNU/Linux, kernel 2.6.18-4-686 (HD1)
    root            (hd1,0)
    kernel          /vmlinuz-2.6.18-4-686 root=/dev/md2 ro
    initrd          /initrd.img-2.6.18-4-686
    savedefault
    
    title           Debian GNU/Linux, kernel 2.6.18-4-686 (HD0)
    root            (hd0,0)
    kernel          /vmlinuz-2.6.18-4-686 root=/dev/md2 ro
    initrd          /initrd.img-2.6.18-4-686
    savedefault
  • Ahora actualizamos el ramdisk para que se reflejen los cambios que hemos hecho.
    shian:~# update-initramfs -u
    update-initramfs: Generating /boot/initrd.img-2.6.18-4-686
  • Copiamos los datos de las particiones antiguas a las nuevas del raid. La opción ‘x’ es muy importante porque sino al copiar desde / copiaríamos todo de manera recursiva.
    shian:~# cp -ax / /mnt/md2
    
    shian:~# cd /boot/
    shian:/boot# cp -ax . /mnt/md0
  • Instalamos y reconfiguramos grub en los dos discos.
    shian:~# grub
    
    grub> root (hd0,0)
     Filesystem type is ext2fs, partition type 0x83
    
    grub> setup (hd0)
     Checking if "/boot/grub/stage1" exists... no
     Checking if "/grub/stage1" exists... yes
     Checking if "/grub/stage2" exists... yes
     Checking if "/grub/e2fs_stage1_5" exists... yes
     Running "embed /grub/e2fs_stage1_5 (hd0)"...  15 sectors are embedded.
    succeeded
     Running "install /grub/stage1 (hd0) (hd0)1+15 p (hd0,0)/grub/stage2 /grub/menu.lst"... succeeded
    Done.
    
    grub> root (hd1,0)
     Filesystem type is ext2fs, partition type 0xfd
    
    grub> setup (hd1)
     Checking if "/boot/grub/stage1" exists... no
     Checking if "/grub/stage1" exists... yes
     Checking if "/grub/stage2" exists... yes
     Checking if "/grub/e2fs_stage1_5" exists... yes
     Running "embed /grub/e2fs_stage1_5 (hd1)"...  15 sectors are embedded.
    succeeded
     Running "install /grub/stage1 (hd1) (hd1)1+15 p (hd1,0)/grub/stage2 /grub/menu.lst"... succeeded
    Done.
  • Y ya podemos reinicar la máquina. Hay que tenemos en cuenta que la máquina sólo arrancará del segundo disco porque el primero todavía no forma parte del raid. Si todo va bien, una vez que arranque veremos algo como esto:
    shian:~# df -h
    Filesystem            Size  Used Avail Use% Mounted on
    /dev/md2              7.4G  509M  6.5G   8% /
    tmpfs                  63M     0   63M   0% /lib/init/rw
    udev                   10M  100K   10M   1% /dev
    tmpfs                  63M     0   63M   0% /dev/shm
    /dev/md0              183M   13M  161M   8% /boot
    
    shian:~# mount
    /dev/md2 on / type ext3 (rw,errors=remount-ro)
    tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
    proc on /proc type proc (rw,noexec,nosuid,nodev)
    sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
    udev on /dev type tmpfs (rw,mode=0755)
    tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
    devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
    /dev/md0 on /boot type ext2 (rw)
  • Lo más difícil ya está hecho. Tenemos el raid funcionando en modo degradado porque sólo está disponible el disco sdb. Ahora repetimos casi el mismo proceso para el disco antiguo. Cambiamos el tipo de particiones a fd y las añadimos particiones al raid.
    shian:~# fdisk /dev/sda
    ...
    Command (m for help): p
    
    Disk /dev/sda: 8589 MB, 8589934592 bytes
    255 heads, 63 sectors/track, 1044 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sda1               1          24      192748+  fd  Linux raid autodetect
    /dev/sda2              25        1044     8193150    5  Extended
    /dev/sda5              25          73      393561   fd  Linux raid autodetect
    /dev/sda6              74        1044     7799526   fd  Linux raid autodetect
    ...
    
    
    shian:~# mdadm --add /dev/md0 /dev/sda1
    mdadm: added /dev/sda1
    shian:~# mdadm --add /dev/md1 /dev/sda5
    mdadm: added /dev/sda5
    shian:~# mdadm --add /dev/md2 /dev/sda6
    mdadm: added /dev/sda6
  • Empezará entonces la reconstrucción de los raid.
    shian:~# cat /proc/mdstat
    Personalities : [raid1] [raid6] [raid5] [raid4]
    md2 : active raid1 sda6[2] sdb6[1]
          7799424 blocks [2/1] [_U]
          [=====>...............]  recovery = 25.2% (1967936/7799424) finish=1.1min speed=81997K/sec
    
    md1 : active raid1 sda5[0] sdb5[1]
          393472 blocks [2/2] [UU]
    
    md0 : active raid1 sda1[0] sdb1[1]
          192640 blocks [2/2] [UU]
    
    unused devices:

Un vez terminada la reconstrucción tendremos listo el sistema. Ahora, si queremos probar que todo funciona correctamente podemos reinicar de nuevo la máquina y comprobar que es capaz de arrancar desde cualquiera de los dos discos.

Con este tipo de configuración estamos seguros de que aunque falle un disco nuestro servidor estará disponible y no tendremos que reinstalar ni reconfigurar nada. Sólo será necesario cambiar el disco defectuoso, reconstruir el raid y reconfigurar el grub.

raid raid1 raid5 raid10 raid1+0 redundancy hardware storage almacenamiento

Mejorar acceso a disco y aumentar rendimiento Linux – Parte 7 – Restauración

con No hay comentarios

Esta va a ser la última parte de esta guia. No va a ser una parte de mejora de rendimiento en sí, si no de como recuperar una máquina desde nuestro software de backup(recordemos que en nuestro ejemplos nosotros usamos Veeam Backup & Replication) puesto que tenemos modificado el fichero /etc/fstab y el disco secundario(el de logs, temporales de backups, etc…) no le hacemos copia y dará error al arrancar el sistema si no seguimos estos pasos.

Parte 7 –  Restauración de VM sin disco secundario para logs

Existen dos maneras, depende que necesitemos, una es para añadirle un disco nuevo para generar la estructura de logs, y otro es volviendo a usar las carpetas de logs de la particion /var como anteriormente existian.

Opcion 1: Añadiendo un nuevo disco de logs

1- Restaurar la maquina desde Veeam. Le añadimos un disco en thin provisioning de 80GB
2- En el boot, canleamos el booteo, editamos pulsando a y al final de la linea añadimos init=/bin/bash
3- Montamos el sistema de ficheros con escritura: mount -o remount,rw /
4- Editamos /etc/fstab y comentamos las particiones de logs. Guardamos y reiniciamos.

/dev/mapper/VolGroup-lv_root        /           ext4        defaults,noatime,nodiratime,barrier=0 1 1
/dev/sda1                           /boot       ext3        defaults 1 2
/dev/mapper/VolGroup-lv_home        /home       ext4        defaults,noatime,nodiratime,barrier=0 1 2
/dev/sda2                           /tmp        ext4        defaults,noexec,relatime,barrier=0 1 2
/dev/mapper/VolGroup-lv_var         /var        ext4        defaults,usrquota,noatime,nodiratime,barrier=0 1 2
/dev/sda3                            swap        swap        defaults 0 0

tmpfs                                /dev/shm    tmpfs        defaults,noexec 0 0
devpts                               /dev/pts    devpts       gid=5,mode=620 0 0
sysfs                                /sys        sysfs        defaults 0 0
proc                                 /proc       proc         defaults 0 0

#Ramdisk para mysql-server
#tmpfs                               /ramdisk    tmpfs        rw,mode=1777,size=128M 0 0
#Este ramdisk es para mejorar mysql. Subiré un post más adelante de como optimizarlo.
#LVM para log
##### COMENTAMOS ESTAS LINEAS ####
#/dev/mapper/LVMLog-LogDir           /var/log                ext4    defaults,noatime,nodiratime,barrier=0 1 2
#/dev/mapper/LVMLog-SystemLogDir     /var/www/vhosts/system  ext4    defaults,noatime,nodiratime,barrier=0 1 2
#/dev/mapper/LVMLog-BackupsTempDir   /var/lib/psa/dumps      ext4    defaults,noatime,nodiratime,barrier=0 1 2 

5- Una vez arrancada la maquina normal, ejecutamos el script /root/scripts/restauracionVMLogs_nuevoHDD.sh para formatear y crear la estructura de directorios sobre el nuevo disco. Os dejo el contenido de dicho script:

#!/bin/bash
#Creamos un nuevo lvm sobre el nuevo disco con la misma estructura.
pvcreate /dev/sdb
vgcreate -s 32M LVMLog /dev/sdb
echo "Creando Volumenes..."
lvcreate -L 20G -n LogDir LVMLog
lvcreate -L 39G -n SystemLogDir LVMLog
lvcreate -L 20G -n BackupsTempDir LVMLog
echo "Formateando con ext4..."
mkfs -t ext4 /dev/LVMLog/LogDir
mkfs -t ext4 /dev/LVMLog/SystemLogDir
mkfs -t ext4 /dev/LVMLog/BackupsTempDir
tune2fs -c 0 -i 0  /dev/LVMLog/LogDir
tune2fs -c 0 -i 0  /dev/LVMLog/SystemLogDir
tune2fs -c 0 -i 0  /dev/LVMLog/BackupsTempDir
echo "Montando particiones..."
mount /dev/LVMLog/LogDir /var/log/
mount /dev/LVMLog/SystemLogDir /var/www/vhosts/system/
mount /dev/LVMLog/BackupsTempDir /var/lib/psa/dumps/

#Creamos las carpetas para que los procesos puedan escribir

echo "Creando estructura de carpetas..."
mkdir /var/log/httpd && chmod 700 /var/log/httpd
mkdir /var/log/nginx
mkdir /var/log/ntpstats && chown ntp:ntp  /var/log/ntpstats
mkdir /var/log/php-fpm && chmod 770 /var/log/php-fpm && chown apache:root /var/log/php-fpm
mkdir /var/log/plesk && chmod 750 /var/log/plesk && chown psaadm:root  /var/log/plesk
mkdir /var/log/plesk-roundcube && chmod 750 /var/log/plesk-roundcube && chown roundcube_sysuser:root  /var/log/plesk-roundcube
mkdir /var/log/psa-horde && chmod 750 /var/log/psa-horde && chown horde_sysuser:root  /var/log/psa-horde
mkdir /var/log/sw-cp-server && chmod 750 /var/log/sw-cp-server
mkdir /var/log/tomcat6 && chown tomcat:root  /var/log/tomcat6
mkdir /var/log/zabbix && chown zabbix:zabbix /var/log/zabbix

#Creando estructura de carpetas para cada dominio
password=` cat /etc/psa/.psa.shadow`
result=` mysql -uadmin -p$password psa --skip-column-names -e "select name from domains where parentDomainId = 0"`

items=$(echo $result | tr " " "\n")
usuario=''
for item in $items
do
 echo "Moviendo directorio logs de:" "$item"
 cd /var/www/vhosts
 cd $item
 rm -rf logs
 usuario=$(ls -l | cut -d' ' -f3 | grep -v root | sed -n 2p)
 mkdir logs
 chmod 700 logs
 chown $usuario:root logs
 #Creando enlaces a cada fichero
 #ln -s ../system/"$item"/logs logs
 cd logs
 ln -s ../../system/"$item"/logs/access_log ./access_log
 ln -s ../../system/"$item"/logs/access_log.processed ./access_log.processed
 ln -s ../../system/"$item"/logs/access_log.stat ./access_log.stat
 ln -s ../../system/"$item"/logs/access_log.webstat ./access_log.webstat
 ln -s ../../system/"$item"/logs/access_ssl_log ./access_ssl_log
 ln -s ../../system/"$item"/logs/access_ssl_log.processed ./access_ssl_log.processed
 ln -s ../../system/"$item"/logs/access_ssl_log.stat ./access_ssl_log.stat
 ln -s ../../system/"$item"/logs/access_ssl_log.webstat ./access_ssl_log.webstat
 ln -s ../../system/"$item"/logs/error_log ./error_log
 ln -s ../../system/"$item"/logs/proxy_access_log ./proxy_access_log
 ln -s ../../system/"$item"/logs/proxy_access_ssl_log ./proxy_access_ssl_log
 ln -s ../../system/"$item"/logs/proxy_error_log ./proxy_error_log
 
 chmod 750 /var/www/vhosts/system/"$item"/logs
done
rm -rf /var/www/vhosts/logs

#Arrancamos los servicios
echo "Arrancando servicios..."
service sw-engine start && service sw-cp-panel start
service psa stop && service psa start && service nginx start && service mailman start

#Reconfigurar todos los alojamientos
echo "Reconfigurando alojamientos"
/usr/local/psa/admin/bin/httpdmng --reconfigure-all 

6- Si todo finaliza correcto, editamos /etc/fstab y reactivamos las particiones de log. Reiniciamos y listo.

 

Opcion 2: Levantar servicios utilizando las carpetas de log en el mismo disco que /var

1- Restaurar la maquina desde Veeam.
2- En el boot, canleamos el booteo, editamos pulsando a y al final de la linea añadimos init=/bin/bash
3- Montamos el sistema de ficheros: mount -o remount,rw /
4- Editamos /etc/fstab y comentamos las particiones de logs. Guardamos y reiniciamos.
4- Una vez arrancada la maquina normal, ejecutamos el script /root/scripts/restauracionVMLogs_sinHDD2.sh  para crear la estructura de directorios en la particion local, pues seguramente hay diferencia desde que sepearamos los logs a otro partición. Os dejo el script:

 #!/bin/bash

echo "Montando particiones..."
mount /dev/LVMLog/LogDir /var/log/
mount /dev/LVMLog/SystemLogDir /var/www/vhosts/system/
mount /dev/LVMLog/BackupsTempDir /var/lib/psa/dumps/

#Creando estructura de carpetas para cada dominio
echo "Creando estructura de carpetas..."
password=` cat /etc/psa/.psa.shadow`
result=` mysql -uadmin -p$password psa --skip-column-names -e "select name from domains where parentDomainId = 0"`

items=$(echo $result | tr " " "\n")
usuario=''
for item in $items
do
 echo "Creando estructura directorios para:" "$item"
 cd /var/www/vhosts/system
 rm -rf logs
 mkdir $item
 chmod 711 $item
 chown root:psaserv $item
 #Creando carpetas a cada dominio
 cd $item
 mkdir conf && chown root:psaserv conf && chmod 750 conf
 mkdir logs && chown psaadm:root logs && chmod 750 /var/www/vhosts/system/"$item"/logs
 mkdir pd && chown root:psaserv pd && chmod 750 pd
 mkdir statistics && chown root:psaserv statistics && chmod 750 statistics
done
rm -rf /var/www/vhosts/logs

#Reconfigurar todos los alojamientos
echo "Reconfigurando alojamientos"
/usr/local/psa/admin/bin/httpdmng --reconfigure-all

#Arrancamos los servicios
echo "Arrancando servicios..."
service sw-engine start && service sw-cp-panel start
service psa stop && service psa start && service nginx start && service mailman start

5- Una vez realizada esta acción ya se pueden arrancar todos los servicios, aunque lo más rapido es reiniciar.

 Parte 6

atras back last page

Mejorar acceso a disco y aumentar rendimiento Linux – Parte 6 – Trucos

con No hay comentarios

Como en todas las demás, doy por hecho que ya habeis realizado la parte1, parte2, parte3, parte4 y parte5.

Parte 6 – Trucos para mantener la mejora de rendimiento.

En esta entrada vamos a tratar todos los trucos y pequeñas mejoras que con el paso del tiempo he ido recopilando, y que granito a granito terminamos mejorando aun más el rendimiento de nuestros servidores Linux, optimizando al máximo nuestro hardware.

Programación tareas de mantenimiento

1- Para que las mejoras que hemos hecho y la fragmentación de nuestras particiones no se nos vuelvan a desmadrar, programaremos una desfragmentación de vez en cuando, por ejemplo un fin de semana de cada mes, alternandolo en nuestra planta de servidores para no sobrecargar nuestras cabinas de almacenamiento, es decir, si tenemos un planta de 40 servidores, 10 cada fin de semana.

2- En caso de que usemos un panel de control como Plesk, también tenemos que programar que los enlaces simbolicos a la partición de logs, ya que algunos cambios que hacemos en la configuración de nuestro alojamiento sobrescribirá los cambios que hicimos.

Por lo tanto, las entradas del cron del usuario root quedaría por ejemplo así (Para editarlo usamos crontab -e):

#Ejecucion periodica de scripts
01 10 *   * sun /root/scripts/mover_logs_a_system.sh
01 22 1-7 * sat /usr/bin/screen -d -m  /usr/sbin/e4defrag -v /
01 23 1-7 * sat /usr/bin/screen -d -m  /usr/sbin/e4defrag -v /var/www/vhosts/system
01 00 1-7 * sun /usr/bin/screen -d -m  /usr/sbin/e4defrag -v /var

*Las desfragmentaciones las lanzaremos secuencialmente, y una vez al més por ejemplo, no es necesario más.

Trucos útiles

Servicio de correo: Muchos de nuestros servidores son o proporcionan servicio de correo, por lo que seguramente tengan  un servicio para pop3/pop3s e imap/imaps. Se suele dar el caso que usen webmail durante años y no tengan tareas de mantenimiento, acumulandose miles de correos en la Inbox de alguna cuenta. Esta situación provoca que a cada login/refresco de la carpeta inbox se tenga que recorrer los miles de correos que puede tener en su buzón. Para evitar esta situación podemos utilizar Dovecot, pues este genera un índice de correos la primera vez que se accede al buzón, pero después es mucho más eficiones que por ejemplo courier-imap.

Bases de datos: Voy a crear otra guia de optimización de BBDD MySQL/percona que es el motor más habitual, la cual mejora muy notablemente el rendimiento y reduce la cantidad de iops en disco a costa de usar un poco más de RAM. Además de esa guía, también es muy recomendable que los ficheros de las tablas se encuentren sobre almacenamiento SSD, como es el caso del almacenamiento SSD que ofrecemos en CloudCluster para por ejemplo estos menesteres.

Reducir uso de swap: Como todos sabeis, cuando un servidor, sobretodo con BBDD comienza a utilizar swap, los procesos se van encolando, aumenta todavía más el uso de memoria/swap hasta que este se colapsa, incluso llegando a producir un kernel panic. Una manera de minimizar que el servidor comienza a utilizar swap es bajando el vm.swappiness del sistema, ya que por defecto CentOS comienza a utilizar swap cuando le queda menos de un 40% de memoria libre, lo cual es una burrada. Vamos a ponerlo a que empiece a usar swap cuando solo tengamos un 5% de memoria libre.

 echo 'vm.swappiness = 5' >> /etc/sysctl.conf" && sysctp -p

 Parte 5   Parte 7

atras back last page   next siguiente proxima pagina

Mejorar acceso a disco y aumentar rendimiento Linux – Parte 5 – Backups

con No hay comentarios

Doy por hecho que ya habeis realizado la parte1, parte2, parte3 y parte 4

Parte 5 – Reducir tamaño copias de seguridad / backups

Existen muchas suites y herramientas para realizar backups de la insfraestructura y/o sistemas operativos Windows, Linux…, pero en esta parte de la gúia vamos a tratar de optimizar las copias se seguridad reduciendo su tamaño y especificando con más exactitud los datos que deseamos hacer backup y cuales no, para reducir su tamaño y tiempo necesario para realizar una copia.

En este cloud se está utilizando la suite de backup Veeam Backup & Replication, pero las funcionalidades que vamos a tratar está en muchas otras.

Lo que vamos a hacer en nuestro software de backups, es decirle que solo queremos que nos haga copia del disco principal donde se encuentran los datos de producción y/o de nuestros clientes, es decir, de /dev/sda, no de /dev/sdb(Suponiendo que sdb es el disco que hemos añadido para mover los logs a otra partición en la parte4)

Vamos a ver como haríamos esto utilizando Veeam Backup & Replication para VM´s VMware.

1- Editamos la tarea de backup que tuvíesemos creada o la creamos de 0.
2- Vamos a la selección de máquinas virtuales y seleccionamos "exclusions".
3- En la pestaña Disks editamos cada máquina virtual que queramos excluir la partición de logs y selecionamos los discos que deseemos, siendo generalmente Disk 0:0 el disco de sistema(y por ende, disk0:1 el que hemos añadido para logs), pero eso ya depende de como lo tenga implementado cada 1. 

Como cada uno usa el software de backups que desea, investigar y seguramente podreis hacer esta exclusión para copiar solo los datos que nos interesa.

 

Reducir tamaño de backups

Seguimos usando como ejemplo Veeam Backup & Replication, pero la base de esta sección es reducir el tamaño de bloque por cambio que tiene que copiar el software para backups que usemos. Entendamos un poco porque vamos a hacer esta modificación:

A cada cambio en el disco que se realiza, ya sea la modificación de un fichero, un update sobre una tabla de mysql,  un nuevo correo recibido en un buzón... ese bloque es marcado para la próxima copia incremental por un diario de cambios(CBT en Veeam), siendo el tamaño de cada bloque a copiar definido por nuestro software de backups. Es decir, si se han realizado un total de 10.000 cambios en nuestro sistema de ficheros, y tenemos un tamaño de bloque de 1MB(Predeterminado en Veeam), como mínimo nuestro backup incremental ocupará 10GB.

Entiendo el funcionamiento, vamos a ver como reducir este tamaño muy considerablemente para Veeam Backup & Replication

1- Editamos la tarea de backup que tuvíesemos creada o la creamos de 0.
2- Vamos a Storage, pulsamos en Advanced
3- En la pestaña Storage podemos definir "Storage optimization", siendo los valores de cada bloque:
Local target (16TB+): Data block size of 8192 KB.
Local target: Data block size of 1024 KB.
LAN target: Data block size of 512 KB
WAN target: Data block size of 256 KB
4- Como nuestro objetivo es reducir lo máximo posible nuestros incrementales, usaremos Wan target

Pasando de local target (16TB+) a Wan target y excluyendo los logs en nuestras copias, los backups incrementales diarios pasaron de unos 150-170GB a unos 15-30GB.

 Parte 4   Parte 6

atras back last page   next siguiente proxima pagina

Mejorar acceso a disco y aumentar rendimiento Linux – Reducir iops logs – Parte 4

con No hay comentarios

Vamos con la parte 4 de esta útil guía, recordar hacer primero la Parte 1, Parte 2 y Parte 3

 

Parte 4 – Mover los logs y directorios de ficheros temporales a otra partición separada.

El objetivo de mover los logs a una partición separada tiene varios objetivos, no solo con vistas a la mejora del rendimiento, si no también a la protección contra el llenado de la partición por el desmadre de algún log o por ejemplo los temporales de un backup, donde generalmente se encuentran por ejemplo las bases de datos y multiples servicios críticos del servidor. Vámos con ello:

Partición para logs:

Entiendo que el servidor que estamos intentando mover los logs es un servidor virtual al cual le podemos añadir un segundo disco. En el caso de que fuese un servidor físico, tendríamos que ver si podemos añadir una partición adicional si nos queda espacio libre, o tendremos que reducir algún volumen LVM ya existente para crear una partición nueva para los logs.

Vamos a dar por hecho que solo teníamos un disco, y que por ejemplo el nuevo disco será /dev/sdb y que tendrá 80GB(Cambiarlo a las necesidades de cada uno). También creamos ya de paso las particiones para los logs de cada vhosts y para los temporales y backups(En este caso para los backups de Plesk)

pvcreate /dev/sdb
vgcreate -s 32M LVMLog /dev/sdb
lvcreate -L 20G -n LogDir LVMLog
lvcreate -L 39G -n SystemLogDir LVMLog
lvcreate -L 20G -n BackupsTempDir LVMLog
mkfs -t ext4 /dev/LVMLog/LogDir
mkfs -t ext4 /dev/LVMLog/SystemLogDir
mkfs -t ext4 /dev/LVMLog/BackupsTempDir 
tune2fs -c 0 -i 0  /dev/LVMLog/LogDir
tune2fs -c 0 -i 0  /dev/LVMLog/SystemLogDir
tune2fs -c 0 -i 0  /dev/LVMLog/BackupsTempDir 

Para mapear la nueva partición en /var/log, copiaremos todo el contenido a la nueva partición, luego comprobar si hay procesos escribiendo sobre /var/log, pararlos, montar la nueva partición definitivamente sobre /var/log y arrancar los servicios.

mkdir /mnt/oldlog
mount /dev/LVMLog/LogDir /mnt/oldlog 
rsync -av /var/log/* /mnt/oldlog --exclude=*.gz --exclude=*.processed --exclude=PMM
umount /mnt/oldlog

lsof +D /var/log | awk '!/COMMAND/{print $1 | "sort -u"}'
(Ir parando los servicios/procesos que os aparezcan en el comando anterior y luego realizar el mount)
mount /dev/LVMLog/LogDir /var/log/

Partición para logs de alojamientos en paneles de control Plesk +11

Muchos paneles tienen su propio directorio de logs para cada dominio, como es el caso de Plesk en este caso a partir de la versión 11 (/var/www/vhosts/system), aunque es posible que algunos dominios migrados de paneles antiguos continuen usando la carpeta log del raid, es decir /var/www/vhosts/midominio.com/logs, por lo que también desearemos separarlos de la particion /var con iops “reales”.

mkdir /mnt/system
mount /dev/LVMLog/SystemLogDir /mnt/system
rsync -av /var/www/vhosts/system/ /mnt/system --exclude=*.gz --exclude=*.processed --exclude=*.processed.*
umount /mnt/system

Para solucionar el tema que os comentaba antes de que todos los logs apunten a system y no en local, necesitaremos crear un enlace simbolico de /var/www/vhosts/midominio.com/logs a /var/www/vhosts/system/midominio.com/logs. Podemos usar el siguiente script.

#!/bin/bash

#Cambiando directorio logs a particion system
password=` cat /etc/psa/.psa.shadow`
result=` mysql -uadmin -p$password psa --skip-column-names -e "select name from domains where parentDomainId = 0"`

items=$(echo $result | tr " " "\n")
usuario=''
for item in $items
do
 echo "Moviendo directorio logs de:" "$item"
 cd /var/www/vhosts
 cd $item
 rm -rf logs
 usuario=$(ls -l | grep httpdocs | cut -d' ' -f3 | grep -v root)
 mkdir logs
 chmod 700 logs
 chown $usuario:root logs
 #Creando enlaces a cada fichero
 #ln -s ../system/"$item"/logs logs
 cd logs
 ln -s ../../system/"$item"/logs/access_log ./access_log
 ln -s ../../system/"$item"/logs/access_log.processed ./access_log.processed
 ln -s ../../system/"$item"/logs/access_log.stat ./access_log.stat
 ln -s ../../system/"$item"/logs/access_log.webstat ./access_log.webstat
 ln -s ../../system/"$item"/logs/access_ssl_log ./access_ssl_log
 ln -s ../../system/"$item"/logs/access_ssl_log.processed ./access_ssl_log.processed
 ln -s ../../system/"$item"/logs/access_ssl_log.stat ./access_ssl_log.stat
 ln -s ../../system/"$item"/logs/access_ssl_log.webstat ./access_ssl_log.webstat
 ln -s ../../system/"$item"/logs/error_log ./error_log
 ln -s ../../system/"$item"/logs/proxy_access_log ./proxy_access_log
 ln -s ../../system/"$item"/logs/proxy_access_ssl_log ./proxy_access_ssl_log
 ln -s ../../system/"$item"/logs/proxy_error_log ./proxy_error_log
 
 chmod 750 /var/www/vhosts/system/"$item"/logs
done
rm -rf /var/www/vhosts/logs

Partición para backups de Plesk y sus temporales.

Podemos copiar el contenido de /var/lib/psa/dumps a la partición que hemos creado, pero no lo considero necesario, pues en caso de necesida, si no borrais los datos, desmontais la nueva partición y vuelven a estar los datos que habían en la partición /var originalmente.

Aplicar todo estos cambios

Para aplicar todos estos cambios seguramente no podamos hacerlo correctamente con el sistema operativo encendido, por lo que lo mejor es modificar el /etc/fstab y reiniciar. Veamos como quedaría el fstab:

/dev/mapper/VolGroup-lv_root        /           ext4        defaults,noatime,nodiratime,barrier=0 1 1
/dev/sda1                           /boot       ext3        defaults 1 2
/dev/mapper/VolGroup-lv_home        /home       ext4        defaults,noatime,nodiratime,barrier=0 1 2
/dev/sda2                           /tmp        ext4        defaults,noexec,relatime,barrier=0 1 2
/dev/mapper/VolGroup-lv_var         /var        ext4        defaults,usrquota,noatime,nodiratime,barrier=0 1 2
/dev/sda3                            swap        swap        defaults 0 0

tmpfs                                /dev/shm    tmpfs        defaults,noexec 0 0
devpts                               /dev/pts    devpts       gid=5,mode=620 0 0
sysfs                                /sys        sysfs        defaults 0 0
proc                                 /proc       proc         defaults 0 0

#Ramdisk para mysql-server
#tmpfs                               /ramdisk    tmpfs        rw,mode=1777,size=128M 0 0
#Este ramdisk es para mejorar mysql. Subiré un post más adelante de como optimizarlo.
#LVM para log
/dev/mapper/LVMLog-LogDir           /var/log                ext4    defaults,noatime,nodiratime,barrier=0 1 2
/dev/mapper/LVMLog-SystemLogDir     /var/www/vhosts/system  ext4    defaults,noatime,nodiratime,barrier=0 1 2
/dev/mapper/LVMLog-BackupsTempDir   /var/lib/psa/dumps      ext4    defaults,noatime,nodiratime,barrier=0 1 2 

Ahora ya reiniciamos y tenemos las nuevas particiones funcionando. Algunos hypervisores permiten restringir por discos los iops que se hacen sobre cada uno, por lo que nos podría interesar reducir/controlar los  iops que se hacen de logs para que no se desmadre ante un ataque DDoS por ejemplo.

 Parte 3   Parte 5

atras back last page   next siguiente proxima pagina

Mejorar acceso a disco y aumentar rendimiento Linux – Parte 3

con No hay comentarios

Antes de continuar, doy por ello que ya habeis hecho la parte 1 y la parte 2 para aumentar el rendimiento de nuestro servidor Linux y reducir iops para mejorar el acceso a disco global del servidor.

 

Parte 3 – Reducir iops de escritura servicio web en logs

 

En muchas ocasiones, los logs pueden llegar a ser un problema si los alojamientos o servicios que tenemos corriendo sobre nuestros Linux requieren de muchas escrituras, aumentando la latencia de acceso a disco global y perjudicando los tiempos de carga/respuesta.

 

En nuestro escenario, que recordemos  es un entorno de alojamientos compartidos, hay muchas escrituras de logs, tanto logs de acceso como logs de errores del servicio web, y claro está, logs de servicios del SO y transacciones de archivos(ftp por ejemplo).

 

Reducir registro de errores: De manera predeterminada, vamos a modificar el fichero /etc/php.ini para que solo registre errores:

 

error_reporting = E_ERROR 

Si teneis fastcgi también debereis de configurarselo en su fichero .ini de configuración.

 

En múltiples ocasiones, si utilizamos paneles de control como pueda ser Plesk, cada alojamiento suele tener un fichero php.ini, por lo que podemos modificarlo manualmente uno a uno en configuración php/error reporting, o podemos usar un bucle por linea de comando para que lo haga por nosotros. Son dos pasos:

 

echo "error_reporting = ~E_ALL & E_ERROR" > /root/error_reporting.txt

for DOMAIN in `mysql -u admin -p$(cat /etc/psa/.psa.shadow) psa -s -e "select name from domains"`; do /usr/local/psa/bin/subscription --update-php-settings $DOMAIN -settings /root/error_reporting.txt; done

Puede que a alguien le parezca insignificamente este cambio, pero seguro que no ha tenido un servidor con cientos de alojamientos con bastante tráfico con un incesante número de errores que registrar, además de que cada iop de escritura, necesita 3 o 4 iops de lectura, dependiendo de la configuración raid para ser procesado.

Referente a lo logs de acceso, es más dificil de modificar, simplemente porque el calculo de estadísticas de uso, véase webalizer o awstats utiliza estos logs para calcularlase cada madrugada.

 Parte 2   Parte 4

atras back last page   next siguiente proxima pagina

1 2