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

Dejar un comentario