# rm-rf.es | Administración de sistemas

Bitácora personal de un SysAdmin Gnu/Linux, Windows, BSD...

Múltiples instancias MySQL en un servidor o Cluster

MySQLYa sea dentro de un Cluster o directamente en un servidor estándar, podemos necesitar tener más de una instancia diferenciada de un servicio, en este caso MySQL. Vamos a ver el proceso de instalación y configuración de dos instancias/servidores MySQL dentro de un único servidor.

Lo primero que hacemos es la instalación propiamente dicha de MySQL, ya sea por rpm, yum, apt o compilando. Nosotros bajamos el rpm de MySQL 5.5 y lo instalamos:

# wget http://mysql.mirrors.ovh.net/ftp.mysql.com/Downloads/MySQL-5.5/MySQL-5.5.20-1.linux2.6.x86_64.tar
# tar -xvf MySQL-5.5.20-1.linux2.6.x86_64.tar
# rpm -ivh MySQL-server-5.5.20-1.linux2.6.x86_64.rpm MySQL-client-5.5.20-1.linux2.6.x86_64.rpm

Una vez instalado vamos ver como estructurar el sistema:

  1. Todas las instancias compartirán los binarios y librerías, ubicados en /usr/bin/mysql /usr/lib64/mysql
  2. Cada instancia tendrá su filesystem o directorio en el que almacenar sus ficheros propios de configuración, bases de datos y logs. Si es un cluster se encontrará en una NAS y servido por iSCSI o FC.
    /mysql1
    /mysql1/etc
    /mysql1/data
    /mysql1/data/logs
    /mysql2
    /mysql2/etc
    /mysql2/data
    /mysql2/data/logs
    ...
    ...
  3. Cada instancia tendrá su propio script de arranque:
    /etc/init.d/mysql1
    /etc/init.d/mysql2
    ...
    ...

El punto 1 está hecho ya que tenemos MySQL instalado. Para el punto 2, creamos la estructura de directorios indicada y copiamos en /mysqlX/etc/ el fichero de configuración por defecto de MySQL my.cnf ubicado en /etc:

# cp -p /etc/my.cnf /mysql1/etc/

Para diferenciar cada instancia debemos hacer lo siguiente:

  1. Cada instancia escuchará por una IP distinta. Si comparten IP tendrán que escuchar por puertos distintos.
  2. Cada instancia usará un socket distinto.
  3. Cada instancia tendrá un PID file distinto.
  4. Cada instancia tendrá un datadir distinto.

Así pues, editamos dichos valores en cada my.cnf de cada instancia según requerimientos:

[mysqld]

# Ruta al datadir de cada instancia:
datadir=/mysql1/data

# Puerto de escucha, si las instancias comparten IP
# debe ser distinto en cada una
port=3306

# IP de escucha, si se quiere mantener el mismo puerto TCP
# para todas debe ser única en cada una:
bind-address=10.0.0.110

# Ruta al socket (único por instancia)
socket=/var/tmp/mysql1.sock

Una vez configurados los my.cnf de todas las instancias podemos inicializar e instalar las bases de datos por defecto:

# mysql_install_db --datadir=/mysql1/
# mysql_install_db --datadir=/mysql2/

Ya podríamos arrancar las dos instancias manualmente, únicamente debemos especificar el fichero de configuración:

# /usr/bin/mysqld_safe --defaults-file=/mysql1/etc/my.cnf &
# /usr/bin/mysqld_safe --defaults-file=/mysql2/etc/my.cnf &

Si queremos usar los scripts de arranque en init.d deberemos cambiar los siguientes parámetros:

# If you change base dir, you must also change datadir. These may get
# overwritten by settings in the MySQL configuration files.

# Únicamente si no se especifican en el my.cnf
basedir=
datadir=

Ruta al PID file de cada instancia:

mysqld_pid_file_path=/mysql1/data/mysql1.pid

En el case de arranque añadir el fichero de configuración:

case "$mode" in
  'start')
    # Start daemon

    # Safeguard (relative paths, core dumps..)
    cd $basedir

    echo $echo_n "Starting MySQL"
    if test -x $bindir/mysqld_safe
    then
      # Give extra arguments to mysqld with the my.cnf file. This script
      # may be overwritten at next upgrade.
      mysqld_safe --defaults-file=/mysql1/etc/my.cnf --pid-file="$mysqld_pid_file_path" >/dev/null 2>&1 &

Enrutar en Linux (route add/del)

Ayer expliqué cómo visualizar las tablas de rutas en Linux, pero no vimos cómo agregar nuevas rutas, modificarlas o borrarlas. Vamos a ver en una entrada rápida unos ejemplos básicos del comando route que nos enseñarán a modificar la tabla de rutas. Partimos de esta base:

$ route -n
Tabla de rutas IP del núcleo
Destino         Pasarela        Genmask         Indic Métric Ref    Uso Interfaz
192.168.1.0     0.0.0.0         255.255.255.0   U     1      0        0 eth0
0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 eth0

Vamos a añadir una nueva ruta cuyo destino tenga la red 169.255.0.0/16. Todo tráfico contra esa red será redirigido a la interfaz eth0 y usará la puerta de enlace (gateway) 192.168.1.1:

$ sudo route add -net 169.255.0.0/16 gw 192.168.1.1 dev eth0
$ route -n
Tabla de rutas IP del núcleo
Destino         Pasarela        Genmask         Indic Métric Ref    Uso Interfaz
192.168.1.0     0.0.0.0         255.255.255.0   U     1      0        0 eth0
169.255.0.0     192.168.1.1     255.255.0.0     UG    0      0        0 eth0
0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 eth0

Para eliminar esta ruta en lugar de route add usamos route del:

$ sudo route del -net 169.255.0.0/16 eth0

También podríamos enrutar tráfico de una LAN sin necesidad de pasar por una gateway:

$ sudo route add -net 169.255.0.0/16 dev eth0

O establecer la gateway (puerta de enlace) por defecto. Será utilizada en caso de no haber otra regla efectiva por delante:

$ sudo route add default gw 192.168.2.1

Como siempre, para más información:

$ man route

Recordad que estos cambios no son persistentes a reinicios, tendréis que añadir los comandos a /etc/rc.local.

Autofs y automount para servir nfs

Algunos de los pros de automount/autofs frente a montar sistemas de ficheros de forma estática es su dinamismo y simplicidad. Si utilizamos automount para servir nfs podemos conseguir que el export NFS únicamente esté montado cuando realmente es necesario, reduciendo la posibilidad de corrupción del sistema de ficheros. Si es un filesystem con pocos accesos también es útil no tenerlo montado de forma permanente y establecer un timeout.

En la parte práctica, nfs con automount es muy útil para servir las /home de usuarios, pudiendo el usuario tener un mismo directorio home centralizado para varias máquinas, también para repositorios de software compartido, etc. Vamos a ver el ejemplo más sencillo de servir un directorio por nfs y automount en unas máquinas CentOS:

Requisitos

Necesitaremos estos dos paquetes:

# yum install nfs-utils autofs

Disponer de una NAS o servidor NFS con un export configurado (IP 192.168.1.144), por ejemplo:

# more /etc/exports
/repo *(rw)

Configuración automount en los clientes

El fichero de configuración principal es /etc/auto.master, en el cual se especifican los mapeos, puntos de montaje y parámetros de configuración. Muchas veces, por limpieza y tener mejor estructuración, los parámetros y puntos de montaje se especifican en ficheros aparte (/etc/auto.misc o el que queramos).

Nosotros queremos por un lado, mapear el directorio local /export con el sistema de ficheros NFS. De momento establecemos esta configuración en auto.master (Tenéis ejemplos en el fichero así como comentarios de ayuda):

/export        /etc/auto_repo

Y en el fichero /etc/auto_repo especificamos punto de montaje, flags del filesystem y el export NFS:

repo	-fstype=nfs,rw,nosuid	192.168.1.144:/repo

Iniciamos servicios autofs y nfs:

/etc/init.d/nfs start && /etc/init.d/autofs start

Vemos los puntos de montaje actuales:

# df -h
S.ficheros            Size  Used Avail Use% Montado en
/dev/sda2             7,7G  970M  6,4G  13% /
tmpfs                 376M     0  376M   0% /dev/shm
/dev/sda1             485M   28M  432M   7% /boot
/dev/sda5            1008M   34M  924M   4% /home

Entramos en /export/repo y volvemos a revisar los puntos de montaje, aparece automáticamente el export NFS:

Nota: con automount tienes que saber el path directo, no puedes usar [TAB]

# cd /export/repo
[root@server1 repo]# df -h
S.ficheros            Size  Used Avail Use% Montado en
/dev/sda2             7,7G  970M  6,4G  13% /
tmpfs                 376M     0  376M   0% /dev/shm
/dev/sda1             485M   28M  432M   7% /boot
192.168.1.144:/repo   7,7G  963M  6,4G  13% /export/repo

Una vez pasado el timeout especificado el punto de montaje quedaría desmontado automáticamente. Este es el ejemplo más básico de automount y autofs, podríamos llegar a montar vía export todas las home de usuario, Autofs + LDAP y otras configuraciones más complejas. De momento esta es la idea básica sobre la que podéis comenzar a trabajar. Os dejo unos enlaces recomendados para aprender más sobre autofs:

  1. Automount y autofs en es.tldp.org
  2. Automounter examples en www.linux-consulting.com

Cómo instalar Oracle Solaris 11 Express

Hoy vamos a ver lo sencillo que resulta instalar Oracle Solaris 11 Express 2010.11 tanto en una máquina virtual como en un equipo físico. Lo primero que tenemos que hacer es descargar la imagen de instalación correspondiente desde este enlace del sitio web de Oracle (es necesario registro). En mi caso, como es habitual he utilizado la versión de instalación en modo texto para x86.

Vamos a ello, arrancamos el equipo con un CD con la imagen ISO grabada y empezamos la instalación. Seleccionamos el tipo de teclado, en nuestro caso ’39′ (español):

Ahora toca elegir el idioma, en mi caso selecciono inglés ya que prefiero instalar los sistemas en inglés que en español, sobre todo porque a la hora de buscar documentación y errores hay mucha más información:

Comienza la instalación de Oracle Solaris, elegimos ’1′ para empezar:

Tras la pantalla de bienvenida, empezamos con la configuración de discos y particiones. Primero toca elegir el disco sobre el que hacer la instalación y después la estructura de particiones. En este caso es un disco virtual sobre Virtualbox, así que elegimos el único disco disponible y usamos todo el disco para instalar el sistema.

Ahora introducimos el nombre de la máquina (hostname) y especificamos si deseamos que la configuración de red sea automática o si preferimos realizarla de forma manual posteriormente:

Establecemos la configuración regional del equipo, fecha, etc:

Llega el momento de asignar una clave al usuario root y la creación de una cuenta de usuario extra:

Antes de comenzar la instalación, podemos ver un resumen de las opciones configuradas y elegir cambiar alguna de ellas volviendo atrás (F3):

Cuando todo esté correcto, presionamos F2 y la instalación comenzará:

Una vez finalizada la instalación sólo nos queda presionar F8 para hacer un reboot y ya podemos comenzar a disfrutar de nuestro sistema Oracle Solaris:

alex@solaris:~$ uname -a
SunOS solaris 5.11 snv_151a i86pc i386 i86pc

En las próximas entradas empezaremos a ver cómo configurar las interfaces de red, la instalación de paquetes y una visión general del sistema.

Cómo crear un repositorio local de yum

YumHay circunstancias en las que puede ser recomendable disponer de repositorios de yum locales para la actualización e instalación de paquetes en sistemas CentOS, RHEL, Fedora, etc, sobre todo si manejamos una gran cantidad de servidores y queremos disponer de mayor velocidad, seguridad y centralización. Vamos a ver los pasos necesarios para crear un repositorio local.

Lo primero que tenemos que hacer es elegir la ruta del repositorio y crear la estructura de carpetas, vamos a crear la misma estructura que en los repositorios oficiales, en este caso para la versión 5.6 de CentOS i386:

mkdir -p /repo_local/centos/5.6/os/i386/CentOS/

Antes de crear el repositorio debemos instalar una utilidad de yum llamada createrepo:

# yum install createrepo

Una vez instalado podemos crear el repositorio con el siguiente comando:

# createrepo repo_local

Saving Primary metadata
Saving file lists metadata
Saving other metadata

Nota: Este comando hay que ejecutarlo cada vez que añadimos, eliminamos o hacemos algún cambio en los rpm del repositorio.

Una vez creado podemos sincronizar nuestro repositorio con uno de los mirror oficiales de CentOS por rsync o añadir nuestros propios RPM. De momento vamos a hacer la prueba añadiendo un único rpm al repositorio:

# cd /repo_local/centos/5.6/os/i386/CentOS
# wget ftp://ftp.udl.es/pub/centos/5.6/os/i386/CentOS/perl-5.8.8-32.el5_5.2.i386.rpm

Antes de empezar a trabajar con él tenemos que activar el repositorio, para ello creamos un nuevo fichero con la configuración del mismo en /etc/yum.repos.d/repo_local.repo (el fichero debe tener la extensión .repo):

[repo_local]
name=Repositorio_local_CentOS
baseurl=file:///repo_local/
enabled=1
gpgcheck=0

La estructura es sencilla, indicamos el nombre del repositorio, su ruta (podría ser SMB, NFS, HTTP…), si está activado y si usa algún tipo de llave gpg (en este caso no). Ahora ya podemos hacer consultas contra este repositorio, instalar rpm’s, etc. Vamos a consultar el único rpm que hemos metido (perl-5.8.8-32.el5_5.2.i386.rpm). En el comando que veis deshabilito el repositorio base para evitar problemas de prioridades, etc:

# yum --enablerepo=repo_local --disablerepo=base info perl
Loaded plugins: fastestmirror, priorities
Loading mirror speeds from cached hostfile
 * addons: centos.mirror.xtratelecom.es
 * extras: centos.mirror.xtratelecom.es
 * rpmforge: fr2.rpmfind.net
 * updates: centos.mirror.xtratelecom.es
addons                                                                                                                                                         |  951 B     00:00
extras                                                                                                                                                         | 2.1 kB     00:00
repo_local                                                                                                                                                     |  951 B     00:00
rpmforge                                                                                                                                                       | 1.1 kB     00:00
updates                                                                                                                                                        | 1.9 kB     00:00
Excluding Packages in global exclude list
Finished

Available Packages
Name       : perl
Arch       : i386
Epoch      : 4
Version    : 5.8.8
Release    : 32.el5_5.2
Size       : 12 M
Repo       : repo_local
Summary    : El lenguaje de programación Perl.
URL        : http://www.perl.org/
License    : Artistic or GPL
Description: Perl es un lenguaje de programación de alto nivel derivado
           : del lenguaje C, de sed, de awk y de los script de la shell. Es adecuado
           : para la gestión de procesos, de ficheros y en particular de
           : ficheros de texto. Perl es un lenguaje sencillo y eficaz. Se utiliza
           : normalmente para la creación de utilidades de administración del sistema
           : y para la programación de sitios Web. Gran parte de los scripts CGI de la
           : web están escritos en Perl. Es necesario que instale el paquete perl en su
           : sistema si desea gestionar los scripts de Perl.
           :
           : Instale este paquete si desea programar en Perl o habilitar  su sistema
           : para gestionar los scripts Perl.

Si el repositorio lo quisierais además de para vuestros RPM personalizados para los oficiales de CentOS, deberíais sincronizarlo periódicamente con un mirror oficial y ejecutar después el createrepo. Podéis hacerlo en un cron, siendo el comando algo así:

# rsync -avz centos.mirror.xtratelecom.es::CentOS/5.6 /repo_local/centos/ && createrepo repo_local

Nota: no todos los repositorios aceptan rsync, en la lista de mirrors de CentOS veréis los que sí que lo permiten. El que uso en el ejemplo sí.

Entrevista a Pau García-Milà, un joven emprendedor

Pau García-Milà es el cofundador del que podría ser considerado el primer sistema operativo web del mundo, eyeOS. Antes de que la moda del Cloud Computing invadiera las IT un joven adolescente ya estaba desarrollando este sistema operativo, actualmente utilizado en más de 60 paises en todo el mundo.

Pau fue entrevistado por Buenafuente aprovechando la publicación de su primer libro “Está todo por hacer (Cuando el mundo se derrumbe, hazte emprendedor)”. . Destaca ante todo su madurez, claridad de ideas y ganas por progresar y sacar a la luz todas sus ideas, independientemente de que fracase o triunfe con ellas. Actualmente es un joven de 23 años que tiene mucho camino por recorrer y que es un claro ejemplo de que querer es poder, un buen ejemplo a seguir para la juventud actual que está viviendo graves dificultades para incorporarse al mundo laboral.

A continuación podéis ver la entrevista completa:

Vídeo: seguridad y protección de datos en los Data Center de Google

Google publicó hace unos días este vídeo en el que se muestran las medidas de seguridad de sus centros de datos y el modo en el que se protegen los datos que alojan. El vídeo se divide en tres secciones:

  1. Seguridad física del centro de datos
  2. Protección de datos en el centro de datos
  3. Fiabilidad en las operaciones en el centro de datos

Un vídeo realmente interesante en el que podremos ver puntos curiosos como la forma de destruir los datos de discos averiados o cuyo ciclo de vida ha finalizado, el montaje de sus servidores personalizados, los distintos puntos de control de acceso físico como por ejemplo la seguridad biométrica a través de cámaras oculares, sistemas anti-incendios, eficiencia energética, etc.

Habilitar certificados de cliente para un website en IIS 6.0

Habilitar los certificados de cliente a nivel de website permite que aquel que conecte al sitio web necesite la utilización de un certificado seguro para poder acceder. De este modo podremos proteger los accesos al sitio web y sus recursos frente a accesos no deseados y permitir especificamente a un grupo concreto el acceso.

En este caso los vamos a activar a nivel de website, de modo que accederemos a la consola de gestión de IIS (Internet Information Services Manager) y desplegaremos el servidor local, después Web Sites y pincharemos con el botón derecho en el website a configurar seleccionando Properties. Una vez dentro accederemos a la pestaña “Directory Security” y pincharemos en “Edit” dentro de la sección de comunicaciones seguras (Secure Communications).

IIS certificados cliente

Una vez dentro encontraremos las siguientes opciones. Lo primero que debemos activar es el requerimiento de un canal seguro SSL (Require Secure Channel SSL). De este modo forzamos al usuario a conectar vía HTTPS. Posteriormente podemos configurar si habilitamos los certificados de cliente o si obligamos a usarlo. La última opción forzará al usuario a utilizarlo mientras que la segunda lo permitirá. Finalmente podemos habilitar una lista de certificados de confianza (Enable Certificate Trust List) a la cual podremos añadir los certificados a utilizar para la comunicación con el cliente, certificados CA intermedios, etc.

IIS certificados cliente

Finalmente reiniciamos el website y ya debería estar habilitada la funcionalidad de certificados de cliente.