SafeChildren Banner

Havoc Oracle Solaris Experts

jueves, 23 de julio de 2009

Gestión básica de Zonas en Solaris 10 aplicado a Hadoop

Introducción

Vamos a introducir algunos comandos básicos de administración de zonas que nos ayudarán a mantener nuestra instalación de Hadoop en óptimas condiciones. Este post lo escribo no para ser un referente en la administración de las zonas de Solaris, más bien, debido a que un amigo me ha pedido algunas nociones básicas para la gestión, así que ahí va.

Para la gestión de las zonas en Solaris contamos con los siguientes comandos:
  • zonecfg nos permite configurar los parámetros de la zona (Nombre, IP, Packages, Resources, ...)
  • zoneadm nos permite administrar la zona (Iniciar, Detener, Reiniciar)
  • zlogin nos permite conectarnos a la sesión de una zona
  • zonename nos permite saber el nombre de la zona en la que nos encontramos
Una zona es una instancia nueva de Solaris ejecutándose de forma aislada del kernel principal. Esto expresado de una forma más simple, significa que si una zona produce un kernel panic las demás no se verán afectadas además, se pueden establecer niveles de uso de recursos por lo tanto, una zona no podrá nunca sobrepasar los límites asignados.

Si ha esto le sumamos que las partes constantes del O.S. se encuentran compartidas (/dev, /lib) podemos ver cómo la utilización de Solaris Zones puede darnos una gran ventaja en las arquitecturas Web.

Puedes ver una imagen de la arquitectura obtenida desde http://www.solarisinternals.com/wiki/index.php/Zones_Best_Practices donde explican con detalle el funcionamiento y estructura de Solaris Zones

Solaris siempre tendrá una zona especial llamada Global correspondiente a la instalación del sistema operativo, es decir, la principal y sobre la cual deberemos realizar las tareas de administración de las Zonas Hijas (non-global zone).

Cada zona necesita una ubicación local donde almacenar aquellas partes que no se encuentren compartidas (Shared) y este path debe pertenecer a root y sólo él debe poder escribir. Esto que parece algo tonto es de vital importancia, como hemos comentado al principio, las zonas son aisladas unas de otras, a excepción de la zona Global que gestiona todas las demás, por lo tanto, si "alguien" tomase el control de la zona global, tendrá control sobre las non-global zones.

Por lo tanto, podremos ver el estado de todas las non-global desde la zona global para ello Solaris ha incorporado una opción -Z que hace referencia a todas las zonas en los comandos ps y prstat

Este tema, aunque la gente parece no tener en cuenta es de vital importancia y creo que si merece un post sobre cómo Gestionar la Seguridad en Zonas de Solaris 10 para Hadoop (os lo prometo)

Creación de una Zona
Vamos a crear una zona que nos servirá como template para la creación de datanodes de forma automatizada, para ello desde la zona global haremos lo siguiente
# mkdir -p /opt/zones
# chmod 700 /opt/zones
# zonecfg -z node-template
node-template: No se ha configurado esa zona
Use 'create' para comenzar a configurar una zona nueva.
zonecfg:node-template> create
zonecfg:node-template> set zonepath=/opt/zones/node-template
zonecfg:node-template> set autoboot=false
zonecfg:node-template> add net
zonecfg:node-template:net> set physical=e1000g0
zonecfg:node-template:net> set address=10.1.1.7/24
zonecfg:node-template:net> set defrouter=10.1.1.254
zonecfg:node-template:net> end
zonecfg:node-template> verify
zonecfg:node-template> commit
zonecfg:node-template> exit
Fácil no? Yo he establecido el valor de la propiedad autoboot a false ya que mi intención es mantener esta zona apagada como un template para desplegar datanodes, sin embargo, si quieres que Solaris inicie la zona automáticamente sólo tienes que poner el valor a true


Configuración de una Zona Existente

# zonecfg -z node-template
zonecfg:node-template> info
zonename: node-template
zonepath: /opt/zones/node-template
brand: native
autoboot: false
bootargs:
pool:
limitpriv:
scheduling-class:
ip-type: shared
inherit-pkg-dir:
dir: /lib
inherit-pkg-dir:
dir: /platform
inherit-pkg-dir:
dir: /sbin
inherit-pkg-dir:
dir: /usr
net:
address: 10.1.1.7/24
physical: e1000g0
defrouter: 10.1.1.254
zonecfg:node-template> exit
Y si queremos borrar una propiedad?
zonecfg:node-template> remove net
zonecfg:node-template> info
zonename: node-template
zonepath: /opt/zones/node-template
brand: native
autoboot: false
bootargs:
pool:
limitpriv:
scheduling-class:
ip-type: shared
inherit-pkg-dir:
dir: /lib
inherit-pkg-dir:
dir: /platform
inherit-pkg-dir:
dir: /sbin
inherit-pkg-dir:
dir: /usr

Instalación de una Zona
Una vez ya hemos configurado la zona, podemos comenzar la instalación con el siguiente comando
# zoneadm -z node-template install
Preparing to install zone .
Creating list of files to copy from the global zone.
Copying <8137> files to the zone.
Initializing zone product registry.
Determining zone package initialization order.
Preparing to initialize <1194> packages on the zone.
Initialized <1194> packages on zone.
Zone is initialized.
Ya hemos instalado la zona, podemos comprobar su estado utilizando el comando zoneadm list
# zoneadm list -cv
ID NAME STATUS PATH BRAND IP
0 global running / native shared
1 node2 running /opt/zones/node2 native shared
2 node3 running /opt/zones/node3 native shared
3 node1 running /opt/zones/node1 native shared
- node-template installed /opt/zones/node-template native shared
Todavía nos queda un último paso que es configurar el sistema, para ello, deberemos conectarnos a la consola de la zona utilizando la opción -C

Nota: zlogin -C utiliza como secuencia de escape ~. sin embargo, es posible cambiarla por la que queramos utilizando -e

Nos conectamos a la consola y finalizamos la instalación de Solaris como siempre (he puesto como caracter de escape #. en vez de
~.)
# zoneadm -z node-template boot
# zlogin -C -e\# node-template
[Conectado a la consola de la zona 'node-template']
Una vez concluida la identificación del sistema nuestra zona ya está preparada

boot/reboot/halt de una Zona
Para las tareas de administración de la zona utilizaremos el comando zoneadm, a continuación podemos ver la opciones que tiene
# zoneadm
sintaxis: zoneadm help
zoneadm [-z ] [-u ] list
zoneadm {-z |-u }

Subórdenes:

help
boot [-- boot_arguments]
halt
ready
reboot [-- boot_arguments]
list [-cipv]
verify
install [-x nodataset] [brand-specific args]
uninstall [-F]
clone [-m method] [-s ] zonename
move zonepath
detach [-n]
attach [-F] [-n ] [-b patchid]* [-u]
mark incomplete
Para ver las zonas disponibles y sus estados utilizaremos
# zoneadm list -cv
Si queremos bootar una zona ejecutaremos el siguiente comando
# zoneadm -z _nombre_zona_ boot
Si queremos parar una zona ejecutaremos el siguiente comando
# zoneadm -z _nombre_zona halt
Si queremos rebootar una zona ejecutaremos el siguiente comando
# zoneadm -z _nombre_zona reboot
Si queremos que una zona deje de estar disponible para su gestión, pero no borrarla
# zoneadm -z _nombre_zona detach
Si queremos que una zona vuelva a estar disponible para su gestión
# zoneadm -z _nombre_zona attach
Clonación de una Zona
Para poder clonar una zona, ésta debe estar halted y attached para ello, procederemos a clonar nuestra node-template a una nueva zona node4. Cuando clonamos una zona ésta (la clonada) se clona en estado unconfigured y por lo tanto es necesario conectarse a la consola para concluir la instalación. En cierta medida, la única diferencia entre crear una zona desde cero y una clonación es el origen de los paquetes (básicamente)

Obtenemos la configuración de la zona node-template (source)
# zonecfg -z node-template > node-template.cfg
A continuación editamos el archivo de configuración y cambiamos los parámetros
zonename, zonepath y net, p
or ejemplo, con los siguientes valores
zonename: node4
zonepath: /opt/zones/node4
brand: native
autoboot: false
bootargs:
pool:
limitpriv:
scheduling-class:
ip-type: shared
inherit-pkg-dir:
dir: /lib
inherit-pkg-dir:
dir: /platform
inherit-pkg-dir:
dir: /sbin
inherit-pkg-dir:
dir: /usr
net:
address: 10.1.1.8/24
physical: e1000g0
defrouter: 10.1.1.254
Crearemos la nueva zona con la configuración que hemos modificado
# zonecfg -z node4 -f node-template.cfg
Detenemos la zona de la cual vamos a clonar
# zoneadm -z node-template halt
Iniciaremos el proceso de Clonación

# zoneadm -z node4 clone node-template
Una vez concluido el proceso de clonación, podemos conectarnos a la consola de la nueva zona node4 y finalizar el proceso de identificación del sistema como hemos visto en el paso de Instalación

Espero que aunque sé que es muy breve, os sirva para recordar y perder el miedo a las zonas.

Más información sobre Administración de Solaris Zones

6 comentarios:

  1. Que tal. me gustaría saber si en la instalación de zonas, existe posibilidad de que la instalación de la zona no se haga desde Internet sino que desde un repositorio de forma local, para lograr una mejor velocidad o en lugares donde existan restricciones de internet como datacenters

    Un Saludo

    ResponderEliminar
  2. Hola, Si es totalmente factible, para solaris 11, te bajas la imagen del repositorio de aca:
    http://www.oracle.com/technetwork/server-storage/solaris11/downloads/index.html
    El proceso es un poco largo, pero es factible!!!

    ResponderEliminar
  3. Excelente artículo!

    He configurado mis zonas con todos sus recursos, sin embargo, al hacer un reinicio de mi servidor, pierdo el acceso a las zonas locales. Tienen el atributo autoboot en true, me hace falta algo más?

    Salu2

    ResponderEliminar
  4. Yo hice una nueva zona, sin embargo al tratar de realizar un respaldo, me indicó que no existían los dispositivos (no agregó los dispositivos de la zona global), revisando la siguiente dirección no los encontré /dev/rmt (vacío) como puedo hacer para agregar los dispositivos (cinta de respaldo /dev/rmt/0n)

    ResponderEliminar
  5. En respuesta a Anónimo, creo deberías activar también el inicio del servicio de zonas "svcadm enable zones" en la zona global.

    ResponderEliminar
  6. Hola, excelente articulo, en la universidad me pidieron crear una zona lo cual es un proceso relativamente fácil, ahora me piden la creación de una zona personalizada, es decir, elaborar un template a partir del cual pueda crear zonas que por ejemplo tengan algún software adicional en el momento de instalación. He buscado información al respecto pero no he podido realizar esto. Tienes alguna sugerencia?

    ResponderEliminar