domingo, 17 de julio de 2011

Storage distribuido con SheepDog

Instalé SheepDog siguiendo las instrucciones del sitio sobre un Debian Sid, todo funcionó excelente!

Todo el esquema de pruebas lo armé en mi notebook:
  • Host: acer (Ubuntu Desktop 11.04)
    • Guest: debian-virt-server-01 (Debian Sid / libvirt+KVM)
      • ejecutando SheepDog
    • Guest: debian-virt-server-02 (Debian Sid / libvirt+KVM)
      • ejecutando SheepDog
    • Guest: debian-virt-server-03 (Debian Sid / libvirt+KVM)
      • ejecutando SheepDog
    • Guest: linux-over-sheepdog (Ubuntu 10.04 Server / QEMU)
      • usando "linux-over-sheepdog" como disco (esta imagen es creada usando qemu-img).
Luego configuré coresync y arranqué sheepdog en debian-virt-server-01debian-virt-server-02 y debian-virt-server-03.

Ahora, a crear la imagen de disco!

root@debian-virt-server-01:~# collie cluster format --copies=2

Este comando sólo se debe ejecutar en 1 nodo.

root@debian-virt-server-01:~# collie node list
 Idx - Host:Port Number of vnodes
------------------------------------------------
* 0 - 192.168.122.101:7000 64
 1 - 192.168.122.102:7000 64
 2 - 192.168.122.103:7000 64
El cluster fue "formateado" para que mantenga 2 copias de la información. Los 3 nodos se están viendo, ya que aparecen al ejecutar "collie node list". 

Creamos imagen para ser usado como disco

acer| ~$ qemu-img create sheepdog:192.168.122.101:7000:linux-over-sheepdog 4G
Formatting 'sheepdog:192.168.122.101:7000:linux-over-sheepdog', fmt=raw size=4294967296
Booteamos QEMU

acer| ~$ qemu-system-x86_64 -enable-kvm -m 512 -cdrom ubuntu-10.04-server-amd64-LTS.iso sheepdog:192.168.122.101:7000:linux-over-sheepdog

Y listo! La instalación de Ubuntu Server se inició correctamente sobre un "disco virtual" hosteado usando SheepDog.



miércoles, 13 de julio de 2011

Procesamiento de anotaciones en Java

Hay un bug en la JVM de Sun Oracle que hace fallar el procesamiento de anotaciones. Me pasó que compilando el proyecto funcionaba OK, pero al agregar "-processor ....", aparecía el siguiente problema:


[javac] /...../ValidationCheck.java:25: incompatible types
[javac] found   : ......annotations.Type
[javac] required: ......Type
[javac] Type type() default Type.WORKER;

El problema es el Enum "Type". Este Enum existe y está en el classpath, pero javac "no la ve". Está definido de la siguiente manera:

Type type() default Type.WORKER;

La solución para zafar de este bug es introducir el paquete en el nombre del Enum, de manera que quede:

Type type() default my.package.annotations.Type.WORKER;


Y con eso compila!

BUGhttp://bugs.sun.com/view_bug.do?bug_id=6512707

viernes, 1 de julio de 2011

Cómo usar dispositivos USB desde KVM

Quiero usar mi pendrive desde un guest KVM (gestionado por libvirt). El dispositivo USB es el marcado con negrita:

acer| ~$ lsusb
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 004: ID 0930:6545 Toshiba Corp. Kingston DataTraveler 102 flash drive

Primera opción: usando vendor id + product id

Editamos el XML usando "virsh edit", y agregamos lo siguiente en el elemento devices:



Esta opción asocia un "tipo de dispositivo" (en este caso, el pendrive Kingston) al guest KVM, sin importar en qué puerto se conecte.

Segunda opcióni: usando bus + device

Editamos el XML usando "virsh edit", y agregamos lo siguiente en el elemento devices:



Esta opción asocia un puerto USB al guest, sin importar qué tipo de dispositivo se conecte.