Herramientas de usuario

Herramientas del sitio


manuales:servidor_systemimager

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
manuales:servidor_systemimager [2010/09/01 15:13] cayumanuales:servidor_systemimager [2015/01/09 19:01] (actual) – [Procedimiento de recuperación] cayu
Línea 10: Línea 10:
   * Actualización periódica de las Imágenes de los servidores   * Actualización periódica de las Imágenes de los servidores
   * Recuperación de un equipo a partir de una Imagen, minimizando la intervención manual dentro del procedimiento   * Recuperación de un equipo a partir de una Imagen, minimizando la intervención manual dentro del procedimiento
 +  * Que se pueda utilizar cualquier hardware disponible sin tener que perder tiempo generando configuraciones especiales
 +  * Proceso lo mas desatendido posible
  
 ===== Esquema de implementación ===== ===== Esquema de implementación =====
Línea 60: Línea 62:
  
 ==== Nomenclatura y estructura de archivos y directorios  ==== ==== Nomenclatura y estructura de archivos y directorios  ====
 +
 +  * **/etc/init.d/systemimager-server-rsyncd**
 +    * //Script de inicio para el servicio de SystemImager, parametros :// start|stop|status|restart|force-reload
  
   * **/var/lib/systemimager/**   * **/var/lib/systemimager/**
Línea 304: Línea 309:
 Donde en el archivo **/tmp/filet3MvOH** tendremos algo como esto Donde en el archivo **/tmp/filet3MvOH** tendremos algo como esto
  
-<code>+<code ini>
 # #
 # "SystemImager" # "SystemImager"
Línea 322: Línea 327:
     exclude = /tmp/filet3MvOH /tmp/filek4mnqb     exclude = /tmp/filet3MvOH /tmp/filek4mnqb
 </code> </code>
 +
 +Aclaración : este es un archivo temporal que se genera automáticamente y su nombre no es importante.
 +
  
 También hay que configurar en **/etc/crontab** También hay que configurar en **/etc/crontab**
  
 <code> <code>
-02 1 * * * root /usr/local/bin/activar_sync.sh 10.1.1.10+02 1 * * * root /usr/local/bin/activar_sync.sh {ip_systemimager}
 </code> </code>
  
Línea 350: Línea 358:
 # si_getimage --golden-client ip_cliente --image nombre_de_la_imagen # si_getimage --golden-client ip_cliente --image nombre_de_la_imagen
 </code> </code>
 +
 +
 +==== Monitoreo ====
 +
 +<code php>
 +#!/usr/bin/php -q
 +<?php
 +$lista_imagenes = shell_exec("si_lsimage --verbose|grep Image");
 +$lista_imagenes = preg_split("/[\n]+/",$lista_imagenes);
 +$fecha_actual = date('Y.m.d');
 +foreach($lista_imagenes as $imagen) {
 +    if(strlen($imagen)>0) {
 + if(@!$i) {
 +     $i=1;
 + }
 + $imagen = preg_split("/[\s]+/",$imagen);
 + $imagenes[$i]['nombre'] = $imagen[2];
 + $imagenes[$i]['actualizada'] = $imagen[4];
 + $imagenes[$i]['ip'] = $imagen[8];
 + if($imagen[4] == $fecha_actual) {
 +     $imagenes[$i]['estado'] = "ok" ;
 + } else {
 +     $imagenes[$i]['estado'] = "critical" ;
 +            $critical=1;
 + }
 + $i++;
 +    }
 +}
 +
 +if(@$critical) {
 +    $head = "CRITICAL - Hubo un desfasaje en una o mas imagenes\n";
 +    $exit = 2;
 +} else {
 +    $head = "OK - Todas las imagenes actualizadas a la fecha\n";
 +    $exit = 0;
 +}
 +print $head;
 +foreach($imagenes as $imagen) {
 +    if(strlen($imagen['nombre'])<9) {
 + $tab = "\t\t";
 +    } else {
 + $tab = "\t";
 +    }
 +    if($imagen['estado'] == "ok") {
 + print "OK - ".$imagen['nombre']." ".$tab.$imagen['ip']."\n";
 +    } else {
 +        print "CRITICAL - ".$imagen['nombre']."   ".$tab.$imagen['ip']." \t actualizado a : ".$imagen['actualizada']."\n";
 +    }
 +}
 +exit($exit);
 +?>
 +</code>
 +
 +
 +==== Procedimiento de recuperación ====
 +
 +Para recuperar la imagen almacenada en el servidor, para RH lo ideal es ejecutar el procedimiento kickstart, en este caso lo que hacemos es recuperar un script que ejecuta todos los comandos necesarios para generar una maquina virtual.
 +
 +Dicho script obtiene el archivo /var/lib/systemimager/scripts/diskinfo/{maquinavirtual} que tiene informacion sobre la organizacion del disco y las particiones en diferentes lineas y separados por comas. 
 +
 +
 +^Disco^Sistema de archivos^Tamaño^Punto de montaje^
 +|hda4|swap|1000|swap|
 +|hda1|ext3|15119|/|
 +|hda2|ext3|3024|/var/log/squid|
 +|hda3|ext3|10080|/var/spool/squid|
 +
 +
 +El Kickstart para esa maquina
 +
 +<code>
 +install
 +url --url http://10.1.2.24/redhat/
 +key 6c2e0645686a4a06
 +
 +lang es_ES.UTF-8
 +keyboard es
 +
 +#network --device eth0 --bootproto static --ip 10.1.2.142 --netmask 255.255.255.0 --gateway 10.1.2.1 --nameserver 10.1.1.3 --hostname proxy1-dom0
 +network --bootproto=dhcp
 +
 +rootpw --iscrypted $1$56iPwDr8$C59yfOfHe/LZNdmEaGYh4/
 +firewall --disabled
 +authconfig --enableshadow --enablemd5
 +selinux --disabled
 +timezone --utc America/Argentina/Buenos_Aires
 +bootloader --location=mbr --driveorder=cciss/c0d0
 +
 +clearpart --all --drives=sda
 +part /boot --fstype ext3 --size=100 --ondisk=sda
 +part pv.100000 --size=0 --grow --ondisk=sda
 +volgroup VolGroup00 --pesize=32768 pv.100000
 +logvol / --fstype ext3 --name=LogVol00 --vgname=VolGroup00 --size=15184
 +logvol swap --fstype swap --name=LogVol01 --vgname=VolGroup00 --size=596 --grow --maxsize=992
 +
 +%packages
 +@spanish-support
 +@virtualization
 +wget
 +rsync
 +kernel-xen
 +xen-libs
 +
 +%post  --interpreter=/bin/bash
 +
 +echo "$(date) post install" >> /root/post-install.log && wget http://10.1.2.24/ks/recuperar  -O /usr/local/bin/recuperar && /bin/bash /mnt/sysimage/usr/local/bin/recuperar proxydmz1-new >>  /root/post-install.log 2>&1
 +</code>
 +
 +Y el archivo /var/www/html/ks/xen/{maquina} tiene informacion de la configuracion de Xen para esa maquina virtual
 +
 +<code>
 +name = "proxy1"
 +memory = "1916"
 +disk = [
 +         'phy:/dev/VolGroup00/proxy1-new-root,hda1,w',
 +         'phy:/dev/VolGroup00/proxy1-var-log-squid,hda2,w',
 +         'phy:/dev/VolGroup00/proxy1-var-spool-squid,hda3,w',
 +         'phy:/dev/VolGroup00/proxy1-swap,hda4,w'
 +       ]
 +
 +vif = [ 'mac=00:16:3e:16:cc:78, bridge=xenbr0', ]
 +
 +uuid = "57b1acec-e644-6ed7-0bb7-3153a510df0e"
 +bootloader="/usr/bin/pygrub"
 +vcpus=2
 +on_reboot   = 'restart'
 +on_crash    = 'restart'
 +</code>
 +
 +
 +**/boot/grub/menu.lst**
 +
 +En este archivo se especifican las opciones de booteo de la maquina física que contiene la maquina virtual,
 +
 +En la linea
 +
 +<code>
 +kernel /xen.gz-2.6.18-164.6.1.el5
 +</code>
 +
 +se especifica el kernel de Xen (dom0) y las opciones de booteo.\\
 +Una vez que esta instalada la maquina virtual podemos aplicar la configuración de esta manera para que solo asigne 96M de RAM a la maquina fisica (dom0), 
 +
 +<code>
 +kernel /xen.gz-2.6.18-164.6.1.el5 dom0_mem=96M
 +</code>
 +
 +luego en la configuración de la maquina virtual de Xen le asignamos la memoria RAM sobrante, ya que esta depende cuanta memoria tenga la maquina que consigamos para esta tarea.
 +
 +
 +<code>
 +#boot=/dev/cciss/c0d0
 +default=0
 +timeout=5
 +splashimage=(hd0,0)/grub/splash.xpm.gz
 +hiddenmenu
 +title Red Hat Enterprise Linux Server (2.6.18-164.6.1.el5xen)
 +        root (hd0,0)
 +        kernel /xen.gz-2.6.18-164.6.1.el5 dom0_mem=96M
 +        module /vmlinuz-2.6.18-164.6.1.el5xen ro root=/dev/VolGroup00/LogVol00
 +        module /initrd-2.6.18-164.6.1.el5xen.img
 +</code>
 +
 +Script de recuperacion de la VM
 +
 +<code bash>
 +#!/bin/bash
 +#Script para automatizar el deploy de una vm 
 +domU=$1
 +imageserver=10.1.202.224
 +
 +function error() {
 + if [ $1 == 0 ]; then
 + echo 'OK'
 + else
 + echo 'ERROR'
 + exit 1
 + fi
 +}
 +
 +if [ $# != 1 ]; then
 + echo "Uso: $0 nombredelaimagen"
 + exit 1
 +fi
 +
 +
 +if [ -e /etc/xen/$domU ];then
 + echo /etc/xen/$domU existe, saliendo...
 + exit 1
 +fi
 +
 +if [ $(which xm) != 0 ]; then
 + xm=1
 +else
 + echo "No encuentro xm, no voy a poder arrancar la VM."
 + xm=0
 +fi
 +
 +vgs=$(vgdisplay | grep "VG Name"| uniq | wc -l )
 +vgs=`echo $vgs | sed "s/\s//"`
 +
 +case $vgs in
 + 0)
 + echo "No encontre ningun Volume Group, crear VG antes de correr este script"
 + exit 1
 + ;;
 + 1)
 + vg=$(vgdisplay | grep "VG Name"| awk {'print $3'})
 + echo "Selecciono el unico VG que encontre, $vg"
 + ;;
 +# *)
 +# while [ -z $vg ]; do
 +# echo $(vgdisplay |grep "VG Name"|awk {'print $3'}) >> /tmp/vgs
 +# read -p "Encontre mas de un VG, cual tengo que usar? $(vgdisplay) : " 
 +# grep $REPLY /tmp/vgs && vg=$REPLY
 +# done
 +# ;;
 +esac
 +
 +echo -n "Obteiniendo informacion sobre las particiones para $domU desde $imageserver..."
 +rsync  $imageserver::kickstart/xen/$domU.diskinfo /tmp/diskinfo-file
 +error $?
 +mkdir -p /mnt/$domU
 +
 +#Calculo de espacio libre en el VG
 +vgfree=$(vgs VolGroup00 --noheadings --units M -o vg_free|cut -dM -f1|tr -d " "| cut -d, -f1)
 +vgfree=`echo "tmp=$vgfree; tmp /= 1;tmp" | /usr/bin/bc`
 +
 +for DISK  in $( cat /tmp/diskinfo-file ); do
 + SIZE=$(echo $DISK | cut -d, -f3)
 + TSIZE=$(($TSIZE +SIZE))
 + TSIZE=`echo "tmp=$TSIZE; tmp /= 1; tmp" | /usr/bin/bc`
 +done
 +
 +echo "En total voy a necesitar $TSIZE Mb "
 +
 +if [ $vgfree -lt  $TSIZE   ]; then
 + echo "No hay espacio suficiente en el VG seleccionado, tengo $vgfree Mb, necesito $TSIZE Mb"
 + exit 1
 +fi
 +
 +for DISK  in $(cat /tmp/diskinfo-file | sort -k4 -t ,); do
 +
 +DEV=$(echo $DISK | cut -d, -f1)
 +FSTYPE=$(echo $DISK | cut -d, -f2)
 +SIZE=$(echo $DISK | cut -d, -f3)
 +MNT=$(echo $DISK | cut -d, -f4)
 +
 +    case $MNT in
 + '/')
 + lvname=$domU-root
 + ;;
 + 'swap')
 + lvname=$domU-swap
 + ;;
 + *)
 + lvname=$domU-$( echo $MNT | sed s%/%-%g | /bin/cut -c1 --complement)
 + ;;
 +    esac
 +
 +echo -n  "Creando LV $lvname... "
 +if [ -e /dev/$vg/$lvname ]; then
 + echo "$lvname YA existe, error"
 + exit 1
 +else
 +    lvcreate -L$SIZE -n $lvname $vg > /dev/null
 +    error $?
 +    if [ $FSTYPE = "swap" ]; then
 + mkswap /dev/$vg/$lvname
 +    else
 + echo -n "Formateando /dev/$vg/$lvname..."
 + mkfs.$FSTYPE -q  /dev/$vg/$lvname
 + error $?
 + mkdir -p /mnt/${domU}${MNT}
 + echo -n "Montando ${MNT}..."
 + mount /dev/$vg/$lvname /mnt/${domU}${MNT}
 + error $?
 +    fi
 +fi
 +
 +done
 +
 +echo -n "Corriendo Rsync..."
 +rsync  -vaSH --quiet  --numeric-ids --exclude=/dev/* --exclude=/tmp/ $imageserver::$domU/* /mnt/$domU/ > /dev/null
 +error $?
 +
 +#for DISK in $(cat /tmp/diskinfo-file | sort -k4 -t ,); do
 +for DISK in $(cat /tmp/diskinfo-file ); do
 +    FSTYPE=$(echo $DISK | cut -d, -f2)
 +    MNT=$(echo $DISK | cut -d, -f4)
 +    if [ $FSTYPE != 'swap' ]; then 
 + echo -n "Desmontando ${MNT}..."
 + umount /mnt/${domU}${MNT}
 + error $?
 +    fi
 +done
 +
 +echo -n "Buscando configuracion de Xen..."
 +rsync  $imageserver::kickstart/xen/$domU.cfg /etc/xen/$domU.cfg > /dev/null
 +error $?
 +
 +#if  [ $xm == '1' ]; then
 +#    echo -n "Arrancando vm..."
 +#    xm create -c /etc/xen/$domU.cfg
 +#fi
 +
 +ln -s /etc/xen/$domU.cfg /etc/xen/auto/
 +
 +# Ajustando parametros de booteo del sistema
 +sed -e 's/kernel.*/& dom0_mem=96/g' /boot/grub/grub.conf > /tmp/grub.conf
 +</code>
 +
 +Lo único que tendremos que editar es el archivo de configuración de la maquina virtual de Xen, ajustandole el parametro memory acorde a los recursos prensentes en el hardware nuevo.
 +
 +
 +
 +{{ :manuales:procedimiento_imageserver.png }}
manuales/servidor_systemimager.1283354027.txt.gz · Última modificación: 2010/09/01 15:13 por cayu