/etc/resolv.conf en Linux

Uno de los clientes para los que trabajo, usa directorio activo para los servicios de impresión y logon de red, en los escritorios, y Linux para los servidores de bases de datos y aplicaciones. Estos funcionan como clientes de los DNS del directorio activo, y así los tenemos configurados en /etc/resolv.conf. Esto funciona perfectmente.

El problema aparece cuando se nos cae alguno o todos los servidores DNS: Todo empieza a funcionar muuuyy lentoooo en Linux. Esto es así, porque la mayoría de los servicios de red de un linux, lanzan contínuamente búsquedas al DNS para resolver las direcciones IP de los equipos que inician conexiones de red.

Cuando los servidores DNS están caídos, Linux no se da cuenta, y lanza una consulta secuencial a todas las IPs de /etc/resolv.conf: Empieza por el primero que encuentra, espera a que expire el timeout (el valor por defecto es 5 segundos), y lanza la misma consulta al siguiente, y vuelve a esperar el timeout, y así sucesivamente hasta que obtenga una respuesta o hayamos llegado a la última IP del fichero /etc/resolv.conf. Paralelamente se van haciendo reintentos (hasta 3). En resumen, si sólo tuviéramos una dirección IP en /etc/resolv.conf, y esa IP estuviera caída, cada operación de red que hiciéramos en el servidor Linux, tardaría como poco 15 segundos.
Podemos configurar este timeout a 1 , y el número de reintentos a 1, para que en vez de 15 segundos, tarde 1 segundo, añadiendo a /etc/resolv.conf la siguiente línea:

options timeout:1 attempts:1
Según nos comentaron en RedHat, esta configuración no podremos comprobarla con los comandos nslookup, ni dig, pero si aplica sobre servicios de red como SSHD o Apache.
La foto la he sacado del album de Giant Ginkgo en flickr

Bar El Guapo

Hoy es el día que es, y dejaré una entrada a propósito de ello. Muchos fines de semana, tengo la grandísima oportunidad (para los tiempos que corren), de hacer algún extra en el Bar El Guapo (tampoco va a ser todo estar con el ordenador!). Curiosamente este fín de semana hemos descubierto que aparecemos en YouTube, nos lo dijo un cliente. Flipante...

Un video de un cliente, donde grabó a otros clientes discutiendo en la barra. Es una pena que no se oiga bien, lo bueno sería tener lo subtítulos, pero se puden pillar algunas frases.

Indagando, me he podido enterar de que tras una considerable ingesta de almuerzo, y seguramente no despreciable cantidad de alcohol en diferentes formatos (vino, cerveza, whisky-ses y demás), los protagonistas acabaron discutiendo sobre quién era capaz de correr más y más rápido con sus bicicletas, evocando (me imagino) tiempos mejores.



El vídeo es una muestra representativa, de los discusiones metafísicas en las que muchas veces vemos inmersos a nuestros maravillosos clientes.

Ajuste de cuentas


Aprovecho este post número 70 del año, para repasar cuántos de los propósitos que me plantee a principios de año, he alcanzado.

  1. Todavía no he cambiado la plantilla de este blog, aunque al menos he avanzado algo: Tengo un logo, y tengo más o menos, el estilo, colores, lo que quiero y lo que no quiero, y como lo quiero, pero no tengo el tiempo de hacerlo, o de escribirlo para subcontratarlo. Se podría decir que esto está a medio.
  2. El blog aún está en 30000 visitas. He administrado servidores Apache que recibían esta carga en unas pocas horas. Me da vergüenza hasta de pensarlo. Quizás debería comprarle un ordenador a mi madre, y pedirle que visite el blog :P. El ratio de visitas mensuales tiene como valor medio 1500, mientras que el año pasado este valor no llegaba a 800. Una ruina. No conseguido.
  3. He conseguido llegar a los 70 post anuales, aunque un poco in extremis, y levantando dudas: Hubo quien la tarde de nochebuena me recordó que no lo conseguiría. Como le dije, tenía las entradas preparadas y me había reservado estos días de Navidad para publicarlos. No estoy muy satifescho con esto porque el objetivo real, era obligarme y acostumbrarme a publicar regularmente a lo largo del mes, y al final las cosas del día a día, me han podido.
  4. Un poco parecido ocurre con las series en inglés. Es cierto que he visto Heroes, Cómo conocí a vuestra madre, V, varias películas y varias conferencias, pero ... no he conseguido obligarme a sacar tiempo de forma regular para esto, ni toda la cantidad que debería haber visto. Yo diría que esto no está ni a la mitad.
  5. La migración a 64bits creo que ha sido un éxito, no sólo en casa con la informática de consumo sino también en servidores. Cada vez más. Es cierto que he sufrido ciertos problemas de incompatibilidad, con Flash y algún otro. Conseguido.
  6. El uso de Fedora, Ubuntu y MacOSX a final de año, ha quedado de la siguiente forma:
    • A principios de año lo intenté con MacOSX, y fracasé... no me acostumbro. Lo sigo teniendo instalado, pero no puedo, es como usar un Linux mal instalado y a medio configurar, me siento muy raro con él y muy torpe, pero reconozco que es una maravilla, cuando se le compara con un escritorio Windows, que parece prehistórico.
    • No me deshice del viejo portátil, y al final le instalé Ubuntu (ni siquiera Windows). Lo uso para la parte más lúdica de mi vida en Internet, cuando estoy por casa, o lo que yo llamo "haciendo el vago". Ubuntu 9.X es un maravilla.
    • En el portatil nuevo, terminé usando Fedora en exclusividad, y es el que uso para trabajar. Como plataforma de trabajo, me viene fenomenal, ya que casi todos los servidores con los que trabajo, son RedHat en el fondo, aunque reconozco que en los últimos meses del año, han aumentado los servidores Debian / Ubuntu.Cuando estoy en casa, procuro no encender Fedora (el portátil del trabajo), sólo Ubuntu (ocio).
  7. Aún no he conseguido terminar el postgrado, aunque sí me he quitado todas las asignaturas que me quedaban colgando. Todavía me falta la tesis que irá en torno a la gestión de identidad digital federada. Ya me vale, cuando vaya a terminar esto, está todo obsoleto. Se podría decir que este propósito está a medio conseguir.
  8. Finalmente migré la zona DNS de casa cuando monté el nuevo servidor Code. Objetivo conseguido.
  9. Y de ITIL sólo me he leído unos cuantos PowerPoints más y unos cuantos extensos documentos. Objetivo sin conseguir.

De 9 objetivos, he conseguido 5 y medio... y creo que esto es un poco desastroso :(. A pesar de ello, gracias a todos los que habeis perdido un minuto leyendo algo de lo que he colgao aquí.

La foto la he sacado de espejo-ludico.blogspot.com vía google images.

Premoniciones sobre OpenSource


Estos días de descanso entre la familia, he aprovechado para ver unas cuantas conferencias TEDTalks. Estas mini-charlas son bastante instructivas: llevan a una persona que controla un montón sobre una determinada cosa, y la ponen a explicarse durante 15 a 25 minutos, y hablar de esto que sabe. Yo empecé con Ken Robinson says schools kill creativity, la cual os recomiendo encarecidamente que veais, y si el idioma del audio es un problema, usar los subtítulos. Si la experiencia os parece interesante, podeis revisar todas las charlas que hay publicadas en este Excell-Doc, y en el documento os cuenta un poco sobre lo que habla, la duración y os deja el enlace rápido.

Después de haberlas visto, hay una cosa que me ha llamado muchísimo la atención y es que casi sin proponérmelo, he visto varias charlas sobre OpenSource pero aplicadas a otras disciplinas como arquitectura o biología, y todo ello me ha animado a escribir este pequeño rollo que os voy a contar.

Cuando tenía que explicar el concepto de OpenSource a los chavales, siempre me gustó usar aquello que dice: Si yo tengo una manzana y tu tíenes otra manzana, y yo te doy mi manzana y tú me dás la tuya, cada uno seguimos teniendo una manzana; pero si tú tienes una idea, y yo tengo otra idea, y yo te cuento la mía y tú la tuya, al final tenemos dos ideas cada uno, y esto lo podemos sintetizar en que el conocimiento siempre suma, nunca resta: Esto es OpenSource, hacer que el conocimiento siempre sume .

Esta definición pura e ideal aplicada al software, nos conduce inexorablemente al software libre, que no tiene nada que ver con software gratis. En la facultad de informática nos cuentan una película didáctica de que escribir un programa es como hacer una receta de cocina, que luego se pueda seguir a pies juntillas, y hacer un plato de comida. Cuando alguien quiere ganar dinero con recetas de cocina monta un restaurante, y justo ahí deberíamos leer el post que escribí en Mayo: Conversaciones con Jenny.

De nuevo, esta definición la podemos aplicar en la arquitectura, por ejemplo. En síntesis, OpenSource aplicado a la arquitectura permitiría aprovechar las técnicas y diseños de construcción usadas en china, y en otros lugares del planeta y mejorar así la resistencia de las construcciones ante huracanes; o estudiar algunas de las construcciones de Africa, para mejorar la resistencia a temperaturas extremas.

Esto mismo, podríamos aplicarlo a otras disciplinas de conocimiento y estudio. Y eso es lo que me ha llamado la atención de las charlas TED, que eso ya se está haciendo. ¿Qué está pasando entonces? ¿Que vá a pasar con el OpenSource?
Creo que lo que está pasando, sencillamente es que estamos sufriendo un cambio de fase en la evolución del OpenSource. Pasamos de la fase de las herramientas, a la fase de los contenidos.

  • La fase de las herramientas, se ha caracterizado porque en ella se han establecido los modelos (de negocio, de desarrollo, de trabajo) para poder desarrollar las herramientas (software libre, wikipedia, opendocument, etc) que hicieran posible la segunda fase.
  • La fase de los contenidos, se caracterizará por la compartición del conocimiento y de las técnicas: Arquitectura OpenSource, Enseñanza OpenSource, etc. Pensar por un momento, en la cantidad de material educativo y contenidos que hay publicados en papel. Pensar el gasto que ello supone, no solo económico, sino forestal: En cualquier caso no es sostenible. Pensar en que podemos digitalizar todo esto y servirlo con estas herramientas OpenSource: ¿no estaríamos abartando los costes? ¿no sería más sostenible para el planeta?, ¿no podríamos llegar a mayor cantidad de alumnos?...

Y ... ¿cuando será este cambio de fase un hecho tangible?. Pienso que este salto lo daremos cuando la industria de los derechos de propiedad intelectual, se resigne a la extinción: Nos venden que compartir es un delito, que es malo, que es lo peor, y nos criminalizan por ello. Están perdiendo el tiempo, y en vez de buscar modelos de negocio viables, esperan que los gobiernos elaboren un gran plan de regulación que les permita seguir explotando (y exprimiendo) los mismos modelos de negocio que han usado hasta ahora. Ya hay modelos que empiezan a funcionar, véase si no, los ejemplos de iTunes y Spotify.
Ale, ahí queda eso.

La foto la he sacado del album de cl a ra en flickr

Monitorizar servidores OpenLDAP desde Cacti

Dentro de la serie de entradas dedicadas a cacti, no podíamos dejar de ver la monitorización de nuestros servidores OpenLDAP desde Cacti, lo cual puede reportarnos estadísticas y gráficas de los tiempos de respuesta, y número de consultas que estamos atendiendo, y hacernos una idea de la calidad de servicio LDAP que estamos ofreciendo.

El problema con el que me he encontrado es que los scripts para Cacti que había en Internet para monitorizar servidores OpenLDAP, ya no están tan accesibles como siempre, y la mayoría de los links aparecen rotos. El enlace que parece funcionar la mayoría del tiempo es https://ltb-project.org/svn/cacti-plugins/trunk/.
Para poder monitorizar OpenLDAP desde cacti tendremos que:

  1. Descargar los scripts ldap_response_time.pl y openldap_operations.pl, y copiar en el directorio /var/www/cacti/scripts/ de nuestro servidor Cacti. Luego ejecutar como root los siguientes comandos:
    yum install perl-LDAP
    chmod 755 /var/www/cacti/scripts/openldap*pl
  2. Ahora, ir al servidor OpenLDAP que queremos monitorizar. Editar el fichero de configuración /etc/openldap/slapd.conf, y en la zona en la que se declaran la base de datos de Ldap, añadir
    database monitor 
    Luego reiniciaremos el servicio:
    /etc/init.d/ldap restart
    Desde el servidor de Cacti, lanzar una prueba de conexión:
    /var/www/cacti/scripts/openldap_operations.pl \
    -h SERVIDOR_LDAP \
    -D "cn=CUENTA_DE_ACCESO_A_LDAP" \
    -W CONTRASEÑA_DE_ACCESO
  3. De nuevo en la consola de Cacti como usuario Administrador, importaremos las plantillas cacti_graph_template_openldap_initiated_operations.xml y cacti_graph_template_openldap_response_time.xml, que nos deberíamos haber descargado de internet.
  4. Ahora sólo nos queda añadir las gráficas OpenLDAP - intiated operation y OpenLDAP - response time a nuestro servidor LDAP o a nuestras plantillas, y esperar unos minutos.

La foto la he sacado del album de eschipul en flickr

NDOUtils: Addon para Nagios

Nagios Data Out (NDO) es un addon oficial de Nagios que permite exportar todos los sucesos y la configuración de una o más instancias de Nagios a una base de datos MySQL, y por supuesto, sin que dejen de escribirse en los ficheros status.dat y retention.dat, y tampoco sin obligarnos a renunciar a tener toda la configuración de Nagios en nuestros ficheros de texto plano, como lo hemos hecho toda la vida.

¿Y para qué necesitaríamos esto entonces?, ¿qué utilidad tiene esto? ... la gran ventaja de configurar NDOUtils en nuestro servidor Nagios, es que nos permitirá integrarlo con otras herramientas como NagVis (usar diagramas de red y vincular alertas), php4nagios (estadísticas para Nagios), o nagiosbp (Nagios Business Process AddOns), que ampliarán las funcionalidades de nuestro Nagios.

Para instalarlo y configurarlo, lo primero que hago es hacer una copia de seguridad de toda las instalación de Nagios, y luego realizo los siguientes pasos:

  1. Preparar el sistema para poder compilar y ejecutar este programa
    yum install mysql-devel perl-DBD-MySQ
  2. Descargar el software de NDOUtils y descomprimirlo...
    cd /opt/software

    export URL="http://downloads.sourceforge.net/project/nagios"
    export URL="$URL/ndoutils-1.x/ndoutils-1-4b8/ndoutils-1.4b8.tar.gz"

    cd /opt
    tar -xzvf software/ndoutils-1.4b8.tar.gz
  3. Compilar el programa
    cd /opt/ndoutils-1.4b8

    export LD_LIBRARY_PATH="/usr/lib:/usr/local/lib:$LD_LIBRARY_PATH"
    export LD_LIBRARY_PATH="/usr/lib/mysql:/lib:$LD_LIBRARY_PATH"

    ./configure --prefix=/usr/local/nagios \
    --enable-mysql \
    --with-mysql-lib=/usr/lib/mysql
    make
  4. Instalar los ejecutables y la configuración de ejemplo de NDO mediante...
    cp -f src/file2sock \
    src/log2ndo \
    src/ndo2db-* \
    src/ndomod-* \
    src/sockdebug \
    /usr/local/nagios/bin/

    /bin/cp -p config/ndo2db.cfg /usr/local/nagios/etc/ndo2db.cfg
    /bin/cp -p config/ndomod.cfg /usr/local/nagios/etc/ndomod.cfg
    ...y dependiendo de la versión de Nagios que tengamos instalado copiaremos un ejecutable u otro. En mi caso uso la versión 3.
    /bin/cp -f src/ndomod-3x.o /usr/local/nagios/bin/ndomod.o
    /bin/cp -f src/ndo2db-3x /usr/local/nagios/bin/ndo2db
  5. Ahora en el servidor MySQL tendremos que crear el usuario y la base de datos donde NDO escribirá las tablas y todos estos datos que provienen de Nagios. En mi caso crearé la base de datos nagios_ndo, el usuario nagios con contraseña nagios.pwd:
    create database nagios_ndo;

    CREATE USER nagios@IP_SERVIDOR_NAGIOS
    IDENTIFIED BY 'nagios.pwd';

    GRANT USAGE ON *.* TO nagios@IP_SERVIDOR_NAGIOS
    IDENTIFIED BY 'nagios.pwd'
    WITH MAX_QUERIES_PER_HOUR 0
    MAX_CONNECTIONS_PER_HOUR 0
    MAX_UPDATES_PER_HOUR 0
    MAX_USER_CONNECTIONS 0;

    GRANT ALL PRIVILEGES
    ON nagios_ndo.*
    TO nagios@IP_SERVIDOR_NAGIOS
    WITH GRANT OPTION ;

    flush privileges;
  6. Crear las tablas y el modelo de datos, en la base de datos:
    cd /opt/ndoutils-1.4b8/db
    ./installdb -u nagios \
    -p 'nagios.pwd' \
    -h IP_SERVIDOR_MYSQL \
    -d nagios_ndo
  7. Ahora cambiar la configuracion de NDO en /usr/local/nagios/etc/ndo2db.cfg, para aplicar los siguientes cambios:
    # Evitar problemas con otros plugins NRPE y NSCA
    tcp_port=5663

    # Indicar la IP de nuestro servidor de MySQL
    db_host=IP_SERVIDOR_MYSQL

    # Credenciales de BBDD
    db_name=nagios_ndo
    db_user=nagios
    db_pass=nagios.pwd

    # Mantener los eventos durante 2 semanas
    max_timedevents_age=20160
  8. Ahora cambiar la configuracion de Nagios (/usr/local/nagios/etc/nagios.cfg) para decirle que debe usar el Broker de eventos:
    broker_module=/usr/local/nagios/bin/ndomod.o config_file=/usr/local/nagios/etc/ndomod.cfg
  9. Editar el fichero de configuracion del broker NDO para configurar el puerto que debe escuchar. Esto es editar el fichero /usr/local/nagios/etc/ndomod.cfg y configurar:
    tcp_port=5663
  10. Crear el script de arranque del servicio, a partir del que nos propone la distribución:
    /bin/cp -f /opt/ndoutils-1.4b8/daemon-init /etc/init.d/ndo2db
    chmod a+x /etc/init.d/ndo2db
    chkconfig ndo2db on

Para terminar, reiniciar todos los servicios y comprobar que las tablas empiezan a rellenarse de datos.
/etc/init.d/ndo2db stop
/etc/init.d/ndo2db start
/etc/init.d/nagios restart


Recuperar un bakup de Oracle hecho con RMAN

Esto también lo tengo que buscar a menudo :( ... ¿qué sentido tendría si sabemos hacer un backup y luego no sabemos recuperarlo. En esta entrada anotaré el procedimiento que sigo para recuperar bases de datos Oracle con RMAN.
Se supone que tenemos un backup físico realizado con RMAN en el directorio /opt/backups_oracle/backupset, y que el catálogo local lo tenemos inicializado y configurado. También supondremos que tenemos una copia del pfile de la base de datos a recuperar en /opt/backups_oracle/backupset/bbdd_init.ora y que sabemos el DBID de la bbdd de la que hemos hecho la copia.

  1. Conectarnos al servidor donde queremos recuperar el backup como usuario Oracle, y desde RMAN detener la BBDD y establecer el nuevo DBID
    su - oracle
    $ORACLE_HOME/bin/rman target / nocatalog

    RMAN> shutdown abort;
    RMAN> set dbid 815531541;
  2. Montar la BBDD usando el pfile del backup...
    RMAN> startup nomount \     
    pfile='/opt/backups_oracle/backupset/bbdd_init.ora' ;
  3. Recuperar los controlfiles desde el Backup que tenemos, y volver a parar la instancia
    RMAN> restore controlfile from \
    '/opt/backups_oracle/backupset/controlfiles/BD_c-XXXXXXXXXx.ctl.bck';

    RMAN> shutdown immediate;
  4. Ahora montar desde los controlfiles recuperados...
    RMAN> startup nomount  \
    pfile='/opt/backups_oracle/backupset/bbdd_init.ora' ;

    RMAN> alter database mount;
  5. Mirar si tenemos backups para recuperar... es muy importante que nos fijemos en el SCN que tienen todos los tablespaces...
    RMAN> list backup; 
  6. Recuperar la BBDD y abrirla reseteando logs..
    RMAN> run {
    set until scn XXXXX--SCN--XXXXX ;
    restore database;
    recover database; }

    RMAN> alter database open resetlogs;
    RMAN> exit;