Bitácora de EleKtR0

English - Italiano - Deutsch - Français - Português - русский

21 de enero de 2015

Instalar un cluster en Debian desde 0

1º Instalar Corosync y Pacemaker
aptitude install corosync pacemaker
Esto crea un usuario hacluster en un grupo llamado haclient

2º Modificaremos en /etc/corosync/corosync.conf la ip de la interfaz de red que usará el cluster para comunicarse. Por defecto podemos encontrar 127.0.0.1 en bindnetaddr Si vamos a usar multicast para la comunicación y localización de nodos en el cluster podemos dejar la ip por defecto en mcastaddr si no tenemos otros servidores que vayan a usarla.
        interface {
                # The following values need to be set based on your environment
                ringnumber: 0
                bindnetaddr: 192.168.1.81  # ip de la interfaz a usar por el cluster
                mcastaddr: 226.94.1.1
                mcastport: 5405
        }

Aprovecharemos para configurar el log en un fichero separado puesto que el cluster generará mucha información y hará que el log del sistema sea inmanejable. Para ellos pondremos en el apartado logging de /etc/corosync/corosync.conf lo siguiente:
 to_syslog: no     # cambiar el valor por defecto yes a no  
 to_logfile: yes   # cambiar el valor por defecto no a yes para desviar la salida a un fichero
 logfile: /var/log/cluster.log  # esta línea no existe y hay que añadirla para indicar el nombre del fichero de log
3º Para que el servicio arranque, pondremos START=yes en /etc/default/corosync y ejecutaremos:
 service corosync start 
4º Configurar el resto de nodos del cluster de la misma forma si no lo hemos hecho en los pasos anteriores y arrancar el servicio corosync.

5º El servicio gestor de recursos del cluster pacemaker no arranca si no indicamos un recurso stonith antes pero temporalmente podemos poner en las propiedades del cluster con el comando crm configure edit la propiedad stonith-enabled="false" para que nos deje arrancar el servicio pacemaker. Ejemplo:
property $id="cib-bootstrap-options" \
        dc-version="1.1.7-ee0730e13d124c3d58f00016c3376a1de5323cff" \
        cluster-infrastructure="openais" \
        expected-quorum-votes="2" \
        no-quorum-policy="ignore" \
        stonith-enabled="false"
Si tenemos un cluster de sólo dos nodos es necesaria la propiedad no-quorum-policy="ignore" para que al fallar un nodo se mantengan levantados los servicios en otro nodo ya que se pierde el quorum. Si tenemos más de un nodo no es necesario y además contrapropucente porque puede darse una situación de split brain. El comando crm_verify -L nos mostrará errores de configuración del cluster si no arranca algún servicio. En versiones anteriores de Pacemaker se arrancaba el servicio con el script en /etc/init.d pero en la versión actual, incluida en Debian Wheezy el servicio pacemaker es ejecutado como plugin de Corosync y no hay que ejecutarlo como servicio del sistema.

6º Probaremos a configurar manualmente una ip flotante en el cluster. Recomendable usar alguna herramienta gráfica, como Hawk o crm_gui, para configurar los recursos. Para configurarla manualmente añadimos estas líneas con crm configure edit
primitive ip-apache ocf:heartbeat:IPaddr2 \
 params cidr_netmask="24" ip="192.168.1.88" \
 op stop interval="0" timeout="20s" \
 op start interval="0" timeout="20s" \
 op monitor interval="10s" timeout="20s"
Con el comando crm_mon podremos comprobar que se está ejecutando el recurso en uno de los nodos (con un ping se puede probar que la ip del ejemplo, 192.168.1.88, responde). Ahora podemos añadir/quitar recursos en el cluster y configurar el recurso stonith para que un servidor inestable se reinicie o apague. No nos olvidemos de poner la propiedad stonith-enabled="true" cuando configuremos stonith.

Etiquetas: , ,

31 de diciembre de 2014

Arrancar una máquina virtual en VirtualBox desde USB

Para arrancar una máquina virtual desde una unidad conectada por USB (pendrive, disco externo, etc.) en el host hay que crear un disco virtual que acceda a la unidad USB y luego asignar el disco virtual a la máquina que queramos desde la interfaz de VirtualBox.

Por ejemplo, para crear un disco virtual llamado usb.vmdk que enlace con la ruta /dev/sdb donde tengo conectado un pendrive que arranca un sistema operativo instalado en él:

VBoxManage internalcommands createrawvmdk -filename usb.vmdk -rawdisk /dev/sdb

Aviso que VirtualBox necesitará permiso de lectura/escritura en /dev/sdb tanto a la hora de crear este disco como cuando arranquemos una máquina virtual con él y por defecto tiene permisos sólo para root aunque para hacer una prueba rápida podemos dar los permisos necesarios con chmod 777 /dev/sdb

Etiquetas: , , ,

20 de noviembre de 2014

Fuentes de documentación sobre clusters en Linux

La web de Linbit está repleta de manuales sobre Pacemaker, Corosync, GFS, DRBD, etc. para montar clusters en Linux. Requiere registro gratuito previo en la web para descargar la documentación: Linbit Tech Guides

En la web de Clusterlabs están las últimas guías sobre Pacemaker, con Corosync o CMAN, además de howtos, ejemplos, etc.

Una página de referencia en el tema de alta disponibilidad en Linux fue, en su momento, Linux-HA pero su guía de usuario no se actualiza desde 2010.

Por último, la guía de usuario de DRBD

Etiquetas: , , ,

10 de noviembre de 2014

Instalando adaptador Wifi MT7601U en Raspbian

Si has comprado un adaptador Wifi USB con chipset MT7601U, identificado como 148f:7601 al ejecutar lsusb, tienes que compilar el driver del fabricante si quieres hacerlo funcionar en Raspbian. La última versión del driver está en este enlace de la web del fabricante. Al compilar el driver probablemente te muestre un error al compilar el fichero rt_linux.o
/usr/src/linux-headers-3.12-1-common/scripts/Makefile.build:308: recipe for target '/root/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux/../../os/linux/rt_linux.o' failed
make[4]: *** [/root/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux/../../os/linux/rt_linux.o] Error 1
/usr/src/linux-headers-3.12-1-common/Makefile:1245: recipe for target '_module_/root/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux' failed
make[3]: *** [_module_/root/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux] Error 2
Makefile:130: recipe for target 'sub-make' failed
make[2]: *** [sub-make] Error 2
Makefile:8: recipe for target 'all' failed
make[1]: *** [all] Error 2
make[1]: Leaving directory '/usr/src/linux-headers-3.12-1-rpi'
Makefile:401: recipe for target 'LINUX' failed
make: *** [LINUX] Error 2

Según he encontrado en los foros de Ubuntu, el problema se soluciona cambiando en el fichero include/os/rt_linux.h del driver el tipo de dato de dos campos en la estructura _OS_FS_INFO_. Esta estructura está sobre la línea 280 del fichero include/os/rt_linux.h
typedef struct _OS_FS_INFO_
{
        int                             fsuid;
        int                             fsgid;
        mm_segment_t    fs;
} OS_FS_INFO;
Hay que cambiar el tipo de dato int por los que indico más abajo, guardar los cambios y ejecutar lo siguiente para recompilar: make clean && make && make install
typedef struct _OS_FS_INFO_
{
        kuid_t                             fsuid;
        kgid_t                             fsgid;
        mm_segment_t    fs;
} OS_FS_INFO;
El parche completo sería el siguiente:
--- include/os/rt_linux.h 2013-09-12 13:27:14.000000000 +0800
+++ include/os/rt_linux.h.patched 2014-03-23 11:45:03.907628847 +0800
@@ -279,8 +279,8 @@ typedef struct file* RTMP_OS_FD;
 
 typedef struct _OS_FS_INFO_
 {
- int    fsuid;
- int    fsgid;
+ kuid_t    fsuid;
+ kgid_t    fsgid;
  mm_segment_t fs;
 } OS_FS_INFO;
 
Fuentes: Can't compile driver for TP link WN727n v4 USB wireless adapter
Compiling MT7601U/RT2870 WiFi Driver in Fedora

Etiquetas: , , ,

24 de octubre de 2014

Algunos comandos habituales de WLST (Weblogic)

Para arrancar el node manager (en el ejemplo tengo instalado Weblogic en /opt/oracle/Middleware y configurado para escuchar en todas las interfaces locales):
startNodeManager(verbose='true', NodeManagerHome='/opt/oracle/Middleware/wlserver_10.3/common/nodemanager', ListenPort='5556', ListenAddress='localhost');


Para conectar al node manager:
nmConnect('nodemanagerUser', 'nodemanagerPassword', 'localhost', '5556','base_domain','/opt/oracle/Middleware/user_projects/domains/base_domain','ssl')


Para arrancar un servidor:
nmStart('AdminServer');


Para parar un servidor que fue arrancado con node manager:
nmKill('ManagedServer1');


Para conectar a un servidor:
connect("user", "password", 't3://localhost:7001');


Para parar el node manager:
stopNodeManager()

Etiquetas: , ,