Archivos categorizados en: Servidores

Aumentar la memoria swap con ayuda de un archivo swap

Categoría(s): Debian, FreeBSD, GNU/Linux, Línea de comandos, Servidores, UNIX

Muy rara vez puede ocurrir que un servidor se vea colapsado a tal punto que el acceso por consola o remoto se vea interrumpido y el resto de los servicios que prestan se hagan inaccesible. Este tipo de falla podría originarse de diversas causas que puede ser un tema interesante en este Blog.
Sin embargo, para no salir del tema que quiero citar aquí, sólo mencionaré algunas de las posibles razones que suele pasar por la mente de un Administrador de Sistemas u otras personas que sean responsables de mantener un servidor, tales como; un disco duro fallido,  que el sistema haya sido atacado por un hacker,  se daño el LVM d) el Firewall está bloqueando los puertos.

Pero como dije al principio, rara vez puede ocurrir y menos pensar que la falla se debe a la memoria, es decir, “se agotó la memoria RAM” e incluso la memoria swap. Esto compromete el sistema de paginación de memoria del servidor –obviamente– lo que origina que los servicios que se corren en el servidor no puedan gestionarse. Casi todo se detiene.-

Un caso ejemplo; un servidor de correos que maneja una diversidad de servicios que operan al unísono y que tienen la tarea de atender peticiones concurrentes, del MTA, Apache, PHP, servicio Webmail, anti-spam, antivirus, MySql, entre otros.

Solución 1: agregar memoria RAM adicional

Sin embargo, en un momento dado que no cuentas con partes o piezas que puedas usar como spare, y sabes que el servidor tiene instalada una cantidad de memoria relativamente aceptable –mas de 3 Gb– entonces puedo optar por buscar otra solución si la situación se debe a que el sistema operativo no reconoce mas allá de esta cantidad de memoria.

Solución 2: Instalar y arrancar con un Kernel que haga un uso mas extensivo de memoria”

En Linux, puedes optar por varios Kernel del tipo “bigmem”

root@mail:~# aptitude search linux-image|grep bigmem
p   linux-image-2.6-686-bigmem      - Linux kernel 2.6 image on PPro/Celeron/PII
p   linux-image-2.6-686-bigmem-etch - Linux 2.6-etchnhalf image on PPro/Celeron/
p   linux-image-2.6.18-4-686-bigmem - Linux 2.6.18 image on PPro/Celeron/PII/PII
p   linux-image-2.6.18-5-686-bigmem - Linux 2.6.18 image on PPro/Celeron/PII/PII
i   linux-image-2.6.18-6-686-bigmem - Linux 2.6.18 image on PPro/Celeron/PII/PII
p   linux-image-686-bigmem          - Linux kernel image on PPro/Celeron/PII/PII

Ah, pero si eso no es posible arrancar el sistema con un kernel de tipo bigmem, porque otra limitación con que te enfrentas es que la plataforma instalada –Zimbra, por citar un ejemplo- se programó con una configuración de memoria específica y un kernel base, entonces sugiero:

Solución 3: Ampliar la memoria Swap

Para lograr esto, podría sugerir inmediatamente que uses alguna herramienta de particionado basado en Gparted y así ampliar tu partición swap, ya que hoy día es tan simple hacerlo de manera gráfica. Sin embargo, cambiar el tamaño de tu partición en un sistema que está en producción es un cambio severo que podría afectar todo el servidor.

Para lograr aumentar la memoria swap, lo haremos de una manera simple tan solo agregando un archivo. Tan simple que usaré el entorno de trabajo favorito para mi; una consola de comandos

En primer lugar, verifico cuanta espacio de memoria swap hay en el servidor;

root@mail:~# swapon -s
Filename				Type		Size	Used	Priority
/dev/cciss/c0d0p12                      partition	979924	679472	-1

Los números bajo “Size” y “Used” están en Kilobytes. En este sistema usamos aproximadamente 680 Mb de 979 Mb de memoria Swap —y en este instante la carga del servidor ha bajado debido al horario de trabajo.

Se necesita un archivo auxiliar de memoria swap

Ahora, conocer cuanto espacio en disco hay disponible para averiguar donde ponerlo. Ejecutaré el comando “df” –disminutivo de “disk free”– desde la de línea de comandos para genera una salida así:

root@mail:~# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/cciss/c0d0p5     6.5G  1.5G  4.7G  24% /
tmpfs                 1.7G     0  1.7G   0% /lib/init/rw
udev                   10M   96K   10M   1% /dev
tmpfs                 1.7G     0  1.7G   0% /dev/shm
/dev/cciss/c0d0p13     64G  180M   60G   1% /backup
/dev/cciss/c0d0p1      92M   19M   69M  22% /boot
/dev/cciss/c0d0p6     6.5G  3.7G  2.5G  61% /home
/dev/cciss/c0d0p10     16G  174M   15G   2% /opt
/dev/cciss/c0d1p1     673G  176G  361G  33% /opt/zimbra
/dev/cciss/c0d0p9     6.5G  214M  5.9G   4% /tmp
/dev/cciss/c0d0p7     6.5G  464M  5.7G   8% /usr
/dev/cciss/c0d0p8     6.5G  994M  5.2G  16% /var
/dev/cciss/c0d0p11     23G  1.5G   21G   7% /var/log

El switch “-h” usado aquí para quienes no conozcan su uso. Se utiliza ampliamente en varios comando de Unix o Linux para mostrar la salida en un formato –human-readable– legible, tal como lo reseña el “man df” o “man ls”.

Ahora bien, vemos que entre todas las particiones disponible existe /backup que cuenta con suficiente espacio libre y no ha sido utilizado ni siquiera en un 50%. Tomaré esta partición para crear allí el archivo auxiliar de –swapping– memoria swap.

Para crear el archivo, usaré el comando “dd” –data dump– de manera cuidadosa.

root@mail:~# dd if=/dev/zero of=/backup/extraswap bs=1M count=2048
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB) copied, 32.8718 seconds, 65.3 MB/s

He utilizado 2048 en el “count” para crear un archivo de 2 Gb. Los disminutivo “if” y “of” indican “infile” y “outfile”, archivo entrante y archivo de salida. El argumento “/dev/zero” nos dará una salida en blanco al archivo de salida.

Reviso la partición en “/backup” y tengo esto:

root@mail:~# ls -lpa /backup/
total 2099220
-rw-r--r-- 1 root root 2147483648 2009-10-28 16:31 extraswap
drwx------ 2 root root      16384 2009-04-07 14:34 lost+found

Ahora que cuento con un archivo en disco, necesito prepararlo para que sea usado como una partición swap.

root@zmail:~# mkswap /backup/extraswap
Setting up swapspace version 1, size = 2147479 kB
no label, UUID=1ea42c4e-2d62-456a-b0f4-b35abc7bad12

He usado el comando “mkswap” cuidadosamente en hacer referencia al archivo en la partición “/backup” y con esto logro que se convierta en un archivo consumible para el Kernel de Linux en modo swap.

Para activar este nuevo archivo de partición, ejecuto:

root@mail:~# swapon /backup/extraswap

Reviso cuando memoria swap existe ahora;

root@zmail:~# swapon -s
Filename				Type		Size	Used	Priority
/dev/cciss/c0d0p12                      partition	979924	679472	-1
/backup/extraswap                       file		2097144	0	-2

Con esto se ha comprobado que el Kernel de Linux está utilizando más memoria auxiliar. Sin embargo, no he terminado. Es necesario hacer este cambio permanente, editando el archivo “/etc/fastab”.

Si se reinicia el servidor ahora, este archivo auxiliar de swap no estará activo, y tendré que utilizar de nuevo “ swapon /backup/extraswap”.

Primero hago una copia de la manera como guste o sea conveniente.

root@zmail:~# cp /etc/fstab /backup/
root@zmail:~# ls /backup/ -lpa
total 2099232
drwxr-xr-x  3 root root       4096 2009-10-28 16:43 ./
drwxr-xr-x 22 root root       4096 2009-10-08 13:15 ../
-rw-r--r--  1 root root 2147483648 2009-10-28 16:39 extraswap
-rw-r--r--  1 root root       1018 2009-10-28 16:43 fstab
drwx------  2 root root      16384 2009-04-07 14:34 lost+found/
root@zmail:~# cp /etc/fstab /etc/fstab.backup-281009
root@zmail:~# ls -lpa /etc/fstab*
-rw-r--r-- 1 root root 1018 2009-04-07 16:01 /etc/fstab
-rw-r--r-- 1 root root 1018 2009-10-28 16:44 /etc/fstab.backup-281009

Yo he realizado dos copias en dos directorios diferentes. —por si acaso– y también la he verificado ambas.

Veamos que hay en “/etc/fstab”:

root@zmail:~# cat /etc/fstab
# /etc/fstab: static file system information.
#
#
proc            /proc           proc    defaults        0       0
/dev/cciss/c0d0p5 /               ext3    defaults,errors=remount-ro 0       1
/dev/cciss/c0d0p13 /backup         ext3    defaults        0       2
/dev/cciss/c0d0p1 /boot           ext3    defaults        0       2
/dev/cciss/c0d0p6 /home           ext3    defaults        0       2
/dev/cciss/c0d0p10 /opt            ext3    defaults        0       2
/dev/cciss/c0d1p1 /opt/zimbra     ext3    defaults        0       2
/dev/cciss/c0d0p9 /tmp            ext3    defaults        0       2
/dev/cciss/c0d0p7 /usr            ext3    defaults        0       2
/dev/cciss/c0d0p8 /var            ext3    defaults        0       2
/dev/cciss/c0d0p11 /var/log        ext3    defaults        0       2
/dev/cciss/c0d0p12 none            swap    sw              0       0
/dev/hda        /media/cdrom0   udf,iso9660 user,noauto     0       0

Ahora, edito el “/etc/fstab” para agregar el punto de montaje del archivo auxiliar swap justo debajo de la línea del swap, de este modo:

/backup/extraswap  none            swap    sw              0       0

Guardo los cambios en el archivo y para comprobar que el cambio no contiene errores;

root@zmail:~# cat /etc/fstab
# /etc/fstab: static file system information.
#
#
proc            /proc           proc    defaults        0       0
/dev/cciss/c0d0p5 /               ext3    defaults,errors=remount-ro 0       1
/dev/cciss/c0d0p13 /backup         ext3    defaults        0       2
/dev/cciss/c0d0p1 /boot           ext3    defaults        0       2
/dev/cciss/c0d0p6 /home           ext3    defaults        0       2
/dev/cciss/c0d0p10 /opt            ext3    defaults        0       2
/dev/cciss/c0d1p1 /opt/zimbra     ext3    defaults        0       2
/dev/cciss/c0d0p9 /tmp            ext3    defaults        0       2
/dev/cciss/c0d0p7 /usr            ext3    defaults        0       2
/dev/cciss/c0d0p8 /var            ext3    defaults        0       2
/dev/cciss/c0d0p11 /var/log        ext3    defaults        0       2
/dev/cciss/c0d0p12 none            swap    sw              0       0
/backup/extraswap  none            swap    sw              0       0
/dev/hda        /media/cdrom0   udf,iso9660 user,noauto     0       0

Ahora bien.!!. Después de todo lo que se ha hecho, puedo reiniciar el servidor ahora o dejarlo funcionado como tal. A este punto, he logrado solventar la carencia de memoria swap necesaria para mantener operativo un servidor.

Para futuras instalaciones, debería asignar mas espacio para la partición swap… o –preferiblemente– poner más memoria RAM en el servidor y antes de proceder a instalar y configurar las aplicaciones y los servicios, habilitar el Kernel tipo “bigmem”.

Hasta la próxima publicación… he perdido la oportunidad de irme a mi casa temprano para vacilarme mi película favorita: CSI Miami… –veré si llego a tiempo para ver LIFE.

Seguir leyendo» Sin comentarios

Migración del servidor web

Categoría(s): Servidores

Aproveché este fin de semana –con puente, del 12 de Octubre– para migrar mi servidor Web actual que está funcionando en un:

Compaq Deskpro EN, con un procesador Pentium II de 400 Mhz, 628 de RAM y un disco duro IDE de 80 GB

a un equipo más potente porque ya me estaba causando tedio cuando me dedicaba a registrar entradas en mi Blog. Ahora el servidor Web está corriendo de la manera más aceptable, en un equipo con las siguientes especificaciones;

Equipo HP con un procesador Pentium D CPU 3.00GHz, 3 Gb de RAM y un disco SATA de 160 GB.

Todo el proceso de migración se redujo a un plan de trabajo que hice de la siguiente manera. Para que se comprenda con facilidad, llamaré equipo A al viejo servidor web, y Equipo B al nuevo.

  1. Respaldar configuración del Servidor Web del equipo A.
  2. Respaldar las base de datos de Wordpress del equipo A.
  3. Respaldar configuración del Wordpress del equipo A.
  4. Respaldo los que sea necesario del equipo nuevo del equipo B.
  5. Instalar sistema operativo en el nuevo equipo en el equipo B.
  6. Crear la cuenta administrativa y los directorios de trabajo en el equipo B.
  7. Instalar Apache, PHP y otros componentes en el equipo B.

Esto fue lo que se me ocurrió como plan al momento de iniciar este trabajo. No obstante, el asunto fue más rápido y eficiente de lo que yo pensé.

El único inconveniente fue darme cuenta que necesitaba hacer la instalación del sistema operativo con el CD de instalación, y la unidad de CD del equipo B  no podía conectarse debido a que el equipo no dispone de interfaces IDE, sino SATA.  Desafortunadamente, ninguno de los otros computadores que tengo dispone de una unidad de CD SATA.

Pensé en bajar una versión en disquette para realizar la instalación. Sin embargo, nada más pensar en desarmar equipos para montarle la unidad de disquette al equipo B, me causó fastidio. Puse a darle vuelta a la imaginación….

Se me ocurrió una idea, y así me dije ya pondré a funcionar la unidad de CD IDE. Sólo me bastaba que resultara.

Desarmé una unidad de disco externo que funciona vía USB; extraje el tablero electrónico y conecte la unidad de CD.

Conecté la toma USB al equipo B y encendí éste,  pero no funcionó porque no leyó el CD. Lo intenté de nuevo, conectándolo en otra toma USB.

Al ver parpadear la LED de la unidad de CD, me di cuenta que la idea funcionó.

Ahora bien, la migración se realizó tal como lo había planeado.

Quizás en otra ocasión, escriba una entrada en este blog para dedicarla a mostrar cuales fueron los pasos que se hicieron a nivel de la consola de comando para lograr este objetivo.

Este día no fue muy interesante para mi, De broma, hice esta entrada porque no me siento anímicamente bien para nada… De vaina, lo que he hecho es navegar en algunas páginas de otros Blogger y escuchar música.

Hasta pronto!!

Seguir leyendo» Sin comentarios