Información Importante Sobre el Contenido
Estas accediendo al contenido antiguo del blog. Este artículo "Clonación de máquinas virtuales en serie" es de dominio público y no será mantenido a futuro. Cualquier error o problema acerca del contenido por favor contactate conmigo desde la sección contacto.
En el lugar donde trabajo, he estado montando y monitoreando muchas máquinas virtuales (gnu/linux sobre gnu/linux). En un principio, las máquinas estaban virtualizadas con VMWare, eran sólo 3 máquinas. Luego estas máquinas fueron aumentando a 5, 10 y actualmente ya son 20 máqiunas. La empresa donde trabajo ofrece el servicio de email marketing en base a newsletter y “fidelización de clientes“, y soy yo quien debe administrar los servidores de envios de correos. Se envían más de 500 mil emails semanales por lo que el uptime y la disponibilidad del servicio debe ser la más alta.
Para ésto, decidí migrar todas las máquinas a Xen y comenzar a para-virtualizar todos los servidores de envios (nosotros les llamamos “smtp“). Si pensamos que su única función es enviar correos (ya que, de la lógica del servicio se encarga otro servidor), las caracteristicas de cada smtp son muy básicas:
- 128MB ram
- 2Gb disco
- Servicios: postfix, ssh
Para lograr el objetivo, me dediqué a crear un script que me automatiza la creación y configuración de máquinas virtuales.
El script esta hecho en bash y lo único que necesitamos es tener una imágen del sistema (por ej. debian) base, con postfix instalado y la configuración que necesitemos, para luego clonarla en serie. El único trabajo que tenemos que hacer es montar una sola maquina, con todo lo que necesitemos, que sea funcional y luego de hacer pruebas y que todo ande bien, entonces usamos el script para clonarla:
-
#/bin/bash
-
-
VM_LIST=machines # file which contains list of ip and hostnames
-
-
for line in $(grep -v ^# $VM_LIST);
-
do
-
IP_ADDR=$(echo $line |awk -F ‘|’ ‘{print $1}’)
-
HOST_NAME=$(echo $line |awk -F ‘|’ ‘{print $2}’)
-
MAC=$(echo $line |awk -F ‘|’ ‘{print $3}’)
-
NAME=$(echo $HOST_NAME |awk -F . ‘{print $1}’)
-
CFG=$NAME.cfg
-
IMG=$NAME.img
-
FULLPATH_CFG=$DIR\/$HOST_NAME\/$CFG;
-
FULLPATH_IMG=$DIR"\/"$HOST_NAME"\/"$IMG;
-
FULLPATH_SWAP=$DIR/$HOST_NAME/"swap.img";
-
mkdir $HOST_NAME
-
echo "Created $HOST_NAME directory."
-
echo ">> Copying files …"
-
cp draft/swap.img draft/draft.img draft/draft.cfg $HOST_NAME/
-
mv $HOST_NAME/draft.img $HOST_NAME/$IMG
-
mv $HOST_NAME/draft.cfg $HOST_NAME/$CFG
-
echo -n ">> Parsing $CFG …"
-
sed -i ‘s/DIR_TO_DISK/\/vm\/mailers\/‘$HOST_NAME‘\/‘$IMG‘/g’ $HOST_NAME/$CFG
-
sed -i ‘s/DIR_TO_SWAP/\/vm\/mailers\/‘$HOST_NAME‘\/swap.img/g’ $HOST_NAME/$CFG
-
sed -i ‘s/HOSTNAME/’$NAME‘/g’ $HOST_NAME/$CFG
-
sed -i ‘s/IP_ADDR/’$IP_ADDR‘/g’ $HOST_NAME/$CFG
-
sed -i ‘s/MAC/’$MAC‘/g’ $HOST_NAME/$CFG
-
echo " Done."
-
mount -oloop -tauto $HOST_NAME/$IMG temp/
-
echo ">> Setting up hostname …"
-
echo $HOST_NAME > temp/etc/hostname
-
echo ">> Setting up postfix (main.cf) …"
-
sed -i ‘s/mail[0-9]./’$NAME‘/g’ temp/etc/postfix/main.cf
-
echo ">> Setting up ethernet …"
-
sed -i ‘s/aaa.bbb.ccc.ddd/’$IP_ADDR‘/’ temp/etc/network/interfaces
-
echo ">> Adding RSA Public Key …"
-
cat /home/admin/.ssh/id_rsa.pub >> temp/root/.ssh/authorized_keys
-
umount temp
-
echo "Done."
-
done
Lo que hace el script, en sencillos pasos es:
– Crear el directorio donde guardaremos nustro fichero de configuración y cosas necesarias.
– Copiar los ficheros necesarios (configuracion de la máquina, imagen del sistema operativo, etc)
– Toma el fichero de configuración y lo parsea para adaptarlo según la configuración que necesitemos.
– Monta la imagen (usando loop)de nuestra nueva máquina.
– Edita y configura los ficheros necesarios dentro de esa máquina virtual.
– Desmontamos y pasamos a la siguiente máquina.
El script se basa en un fichero de “configuración”, el cual nos debe proveer de la dirección IP, la mac y el hostname, en el siguiente formato:
aaa.bbb.ccc.ddd:hostname.tld:ma:c:a:dd:re:ss
Con este post no busco enseñar como migrar o clonar máquinas, simplemente demostrar que se puede automatizar la tarea de clonación de máquinas en serie. Claramente este script no funcionará para los requerimientos de todos nosotros, pero se puede adaptar.
Información Importante Sobre el Contenido
Estas accediendo al contenido antiguo del blog. Este artículo "Clonación de máquinas virtuales en serie" es de dominio público y no será mantenido a futuro. Cualquier error o problema acerca del contenido por favor contactate conmigo desde la sección contacto.
octubre 27, 2009 a las 10:52 pm
Cada día te metes más en Xen he?
octubre 27, 2009 a las 11:54 pm
@Noz: obvio, aprendiendo, enseñando y poniendo en practica cosas nuevas 🙂
octubre 28, 2009 a las 1:38 am
muy interesante pero muy fuera de mis conocimientos, estoy luchando por lograr una virtualizacion de una conexion serial entre dos pc con virtual box XD.
saludos
octubre 28, 2009 a las 8:59 am
@Andres: o_O Te refieres a hacer una “red” mediante el puerto serial de una maquina virtual a otra? Si es asi … nunca lo he hecho, pero VirtualBox tiene la opcion de asignar puertos seriales (paralelo y de serie creo) a cada maquina, por ende, cada virtualizacion deberia tener en una direccion X el su puerto. En teoria seria lo mismo que hacerlo con dos maquinas “normales” (sin estar virtualizadas)
saludos
octubre 28, 2009 a las 10:34 am
Interesante, aunque aún no logro virtualizar con xen en ubuntu, me quedé pegado con el vmware.
Sabes que seguridad tiene xen para el caso de una falla de discos?
octubre 30, 2009 a las 1:50 am
Buen post, se viene interesante todo este sistema de la virtualización y todas las metodologías aplicables y automatizadas que facilitan estas tareas.
Un saludo y adelante!
Daslav Ríos.
noviembre 2, 2009 a las 1:51 pm
saludos kapo!!!
espero que andes bien zerial…
diciembre 2, 2013 a las 12:02 pm
Boten XEN , instalen proxmox(kvm + openvz)….