23 dic

Resizing an Online Multipath Device

Vamos a ampliar una disco conectado por FC a una cabina, de tal manera que deberemos rehacer la particion o disco del servidor para disfrutar del nuevo tamaño, lo haremos sin reiniciar el servidor.

Situación inicial

Lun presentada desde una cabina NetAPP por FC.

Montada en un RedHat con multipath, 4 paths

MySQL_Slave1 (360a980006470484f576f737278463034)
dm-0 NETAPP,LUN [size=120G][features=1 queue_if_no_path][hwhandler=0][rw]
_ round-robin 0 [prio=50][active] _ 5:0:1:0 sdc 8:32  [active][ready]
_ round-robin 0 [prio=50][enabled] _ 6:0:1:0 sde 8:64  [active][ready]
_ round-robin 0 [prio=10][enabled] _ 5:0:0:0 sdb 8:16  [active][ready]
_ round-robin 0 [prio=10][enabled] _ 6:0:0:0 sdd 8:48  [active][ready]

Tamaño inicial

/dev/mapper/MySQL_Slave1 119G   92G   21G  82% /mnt/mysql55-slave1

Resizing an Online Multipath Device without partition

Una vez que hemos aumentado la LUN desde el servidor

Vamos a comprobar que el servidor detecta el nuevo tamaño, para ello hacemos un rescan de los discos.

echo '- - -' > /sys/class/scsi_host/host5/rescan
multipathd -ll  MySQL_Slave1 (360a980006470484f576f737278463034)
dm-0 NETAPP,LUN [size=201G][features=1 queue_if_no_path][hwhandler=0][rw] _ round-robin 0 [prio=50][active]
_ 5:0:1:0 sdc 8:32  [active][ready] _ round-robin 0 [prio=50][enabled] _ 6:0:1:0 sde 8:64  [active][ready]
_ round-robin 0 [prio=10][enabled] _ 5:0:0:0 sdb 8:16  [active][ready] _ round-robin 0 [prio=10][enabled]
_ 6:0:0:0 sdd 8:48  [active][ready]

Desmontamos la unidad en el caso que la tengamos montada, en el caso de que no este montada o sea desmontada ya no hace falta que la desmontemos :)

Haremos el primer resize a través del multipath tal que así:

multipathd -k'resize map MySQL_Slave1' ok

Y ahora rápidamente un resize molón del disco, como esta lun no tiene particiones lo haremos directamente, contando que si es ext2 o ext3 utilizaremos resize2fs y si es ext4 como en nuestro caso, utilizaremos resize4fs

e4fsck /dev/mapper/MySQL_Slave1 resize4fs /dev/mapper/MySQL_Slave1

Comprobamos

/dev/mapper/MySQL_Slave1  198G 92G 96G 49% /mnt/mysql55-slave1

Resizing an Online Multipath Device with partition

La situación ahora es que tenemos un disco conectado a una cabina por FC, pero esta vez el disco que ve el sistema tiene un partición, en este caso el método es un poco distinto.

La primera parte igual, ampliamos la LUN en la cabina y hacemos el rescan en el sistema.

echo '- - -' > /sys/class/scsi_host/host5/rescan
multipath -ll MySQL_Master (360a980006470484f576f74346e446e56)<strong> dm-0
NETAPP,LUN [size=200G][features=1 queue_if_no_path][hwhandler=0][rw]
_ round-robin 0 [prio=50][active]  _ 5:0:1:0 sde 8:64  [active][ready]
_ round-robin 0 [prio=50][enabled]  _ 6:0:1:0 sdk 8:160 [active][ready]
_ round-robin 0 [prio=10][enabled]  _ 5:0:0:0 sdb 8:16  [active][ready]
_ round-robin 0 [prio=10][enabled]  _ 6:0:0:0 sdh 8:112 [active][ready]

El disco que vemos es el dm-0, vemos con un fdisk -l que tiene una partición que es la que queremos ampliar.

Disk /dev/dm-0: 200 GB,
214749413376 bytes 255 heads, 63 sectors/track, 26108 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot      Start         End      Blocks   Id
System /dev/dm-0p1               1       xxxxx   xxxxxx+

Pues ahora que lo tenemos todo localizado vamos a ampliar la partición, desmontamos primero. y lo que haremos es eliminar la partición actual y volverla a crear, pero esta vez veremos que el end de la partición es superior, ya que el tamaño es superior, la practica es tal que así.

umount /dev/dm-0p1
fdisk -u /dev/sdc < d [Enter] n [Enter] p [Enter] 1 [Enter] w [Enter]
d = delete
n = new
p = primary
1 = la primera
fsck -f /dev/dm-0p1
resize2fs /dev/dm-0p1

Cuando termine ya tendremos la nueva partición con el tamaño deseado, por ultimo le diremos al sistema que vuelva a escanear la tabla de particiones.

partprobe -s /dev/dm-0

Y con esto ya tenemos el disco ampliado sin necesidad de reiniciar.

Fuentes

https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/DM_Multipath/MPIO_admin-troubleshoot.html

http://www.redhat.com/advice/tips/rhce/partprobe.html

16 dic

Instalación de Proxmox y creación de container

Vamos a explicar cómo se instala proxmox y crearemos nuestro primer container!

¿Qué es proxmox?

Proxmox es una distribución de virtualización que ofrece la posibilidad de gestionar servidores virtuales (VPS) con tecnologías OpenVZ y Linux KVM al mismo tiempo. La gestión se realiza fácilmente en unos clics a través del interfaz web, accesible directamente tras la instalación del servidor.

¿Qué es un OpenVZ?

OpenVZ permite que un servidor físico ejecute múltiples instancias de sistemas operativos aislados, conocidos como Servidores Privados Virtuales (SPV o VPS en inglés) o Entornos Virtuales (EV).

Creación de USB instalación.

Nos bajamos la iso desde http://www.proxmox.com/downloads/item/proxmox-ve-3-1-iso-installer-bittorrent , y muy sencillo una vez descargado lo único que debemos hacer es volcarlo en un usb a nivel de bloque, con dd por ejemplo.

dd if=/isoproxmox.iso of=/dev/sdx

Tenemos que tener el usb desmontado y debemos lanzar el dd al dispositivo no a la partición(en el caso que tenga)

Ahora conectamos el usb y vamos a por la instalación, que es muy sencilla.

Instalación

Seleccionaremos el disco donde queremos instalarlo, después si tenemos más de un datastore, podremos asignar datastores a roles, por ejemplo, isos, VM, containers…

3

Nos leemos la EULA, por si son unos pájaros y seleccionamos la zona horaria

2 4

Ponemos el password del usuario que utilizaremos para entrar tanto al servidor por ssh como por la página web

5

La ip y el nombre FQDN

6

E instalando

7 8

Creación de un container

Ahora entraremos por la ip que hemos puesto por el puerto 8006 https. https://ip:8006, usuario root.

El tipo de container que vamos a montar es sobre OpenVZ que es un poco diferente a los LXC, mas información aquí https://es.wikipedia.org/wiki/OpenVZ

Bien, debemos subir OS template, como sabemos existen unas plantillas ya montadas, no podemos hacer containers con el el SO que queramos, la lista la tenemos aquí http://download.openvz.org/template/precreated/

Vamos a seleccionar por ejemplo un debian-7.0-x86_64.tar.gz, pues primero de todo nos conectamos por ssh al servidor de proxmox y nos vamos al directorio /vz/template/cache y ahí descargamos el fichero.

cd  /vz/template/cache

wget http://download.openvz.org/template/precreated/debian-7.0-x86_64.tar.gz

También lo podemos hacer por la interfaz, nos vamos al disco dentro de la sección del servidor y seleccionamos contenido. Tenemos dos opciones o plantillas o subir, en la sección de plantillas tenemos un montos de plantillas divididas por secciones, por ejemplo tenemos sistemas operativos, pero también turnekeylinux especificas a servicios.

Nosotros empezaremos por el sistema operativo, de momento…

templatesSeleccionamos el que queramos y le damos a descargar.

Ahora le daremos a create CT y rellenamos los huecos, como un cuestionario…., VM ID, deberá ser único en el host/cluster

cont

Aquí seleccionaremos la plantilla que queramos, en nuestro caso la que bajamos…

plantillaY los recursos que le queramos dar al container.

resY por último la red, tenemos dos opciones.

red

Bridged : Si queremos que utilice la tarjeta del servidor o sea a nivel 2

Routed mode: Como si fuera un servidor mas de la red, link a nivel 3

creacion

Y esperamos que la cree, ahora vamos a conectarnos al nuevo containers.

Podemos verlo por consola o conectarnos por ssh directamente a la máquina.

final

Así de fácil y sencillo.

Fuentes

http://pve.proxmox.com/wiki/Downloads#Proxmox_Virtual_Environment_3.1_.28ISO_Image.29

http://pve.proxmox.com/wiki/Install_from_USB_Stick

http://es.wikipedia.org/wiki/LXC

http://www.proxmox.com/

09 dic

Instalar OpenZFS en LINUX

20131209-084324.jpgParece ser que tenemos una versión estable de openZFS, así que como es un tema que me gusta bastante, pues os voy a explicar como instalarlo en Linux y comprobar su funcionamiento, si queréis saber cosas mas a fondo de ZFS, pues pasaros por los artículos anteriores:

  1. Tipos de caches en ZFS
  2. Comandos zpool
  3. Optimización de ZFS

Situación

  1. Esta disponible para los kernels Linux 2.6.26 – 3.11.
  2. No se recomienda instalarlo en sistemas de 32bits
  3. Mínimo 2GB de RAM, si queréis utilizar deduplicacion o compresión, bueno entonces pensar en poner una cuanta más.. os podéis hacer a la idea en los post que comento mas arriba.

Por qué sale OpenZFS?

  1. Oracle registró el nombre ZFS como marca comercial complicando su uso (MAL)
  2. Sale OpenZFS como proyecto “protesta” open source del proyecto ZFS de SUN, por los problemas con Oracle. (BIEN)
  3. Uno de los lideres es Matt Ahrens, co-fundador del proyecto ZFS (BIEN)
  4. La idea es unificar el desarrollo en FreeBSD, Linux, Mac OS X, and illumos (BIEN)
  5. 3 BIEN – 1 MAL así que vamos a explicarlo.

Nosotros lo vamos a montar en un Ubuntu server 13.10.

Creación

Primero de todo añadiremos los el ppa para bajarnos los paquetes:

sudo add-apt-repository ppa:zfs-native/stable

Deberemos instalar lo siguiente

apt-get install zfs-dkms parted mountall spl-dkms spl ubuntu-zfs zfsutils

Una vez finalice hacemos un reboot y listos ya tenemos zfs en linux (sin fuse)

Ahora que lo tenemos vamos a probar algunas de las cosas que dicen que hace…. :)

Creación de RAID Z

Añadir un par de discos y montamos, por ejemplo un Raid Z mirror

Disco /dev/sdb: 8589 MB, 8589934592 bytes
Disco /dev/sdc: 8589 MB, 8589934592 bytes

 

[email protected]:~# zpool create -f storage raidz /dev/sdb /dev/sdc
[email protected]:~# df -h

S.ficheros Tamaño Usados Disp Uso% Montado en
storage 7,9G 0 7,9G 0% /storage

Como bien sabemos así  de sencillo se crea un RAID, si queréis algo mas complejo, pues lo dicho a los post anteriores.

Forzar un error de disco

Ahora lo que vamos a probar es quitar un disco mientras escribimos en el otro…  hice un gif para que se vea que no se pierde escritura.
En el gif podéis ver 4 pantallas que os explico en la siguiente imagen.

teste mirror 1
Y en el gif, el casque

mirror1_fail

En el recuadro de abajo a la izquierda vemos como se esta lanzando un dd, vemos la tasa de escritura en el de la derecha, y arriba como quitamos el disco del pool lo añadimos y empezamos a ver como se resincroniza, para cubrirnos un poco ante un fallo de disco, podemos añadir otro en spare

Añadir disco en SPARE

zpool add -f storage spare /dev/sdd

diskspare

Fallo de disco, con un disco spare

Por defecto, el spare entra en funcionamiento automáticamente en el caso que tener un fallo de uno de los dos del mirror, pero como no puedo quitar el disco a lo burro, pues vamos hacer la emulación, a más que así también aprendemos como se hace manualmente, que ha veces lo automático deja de ser lo.

  • Ponemos uno de los discos del mirror en offline.
zpool offline storage sdc

fail online disk

Ahora de forma manual le vamos a decir que remplace el disco “roto” por el spare.

  • Remplazo del disco por el spare.
 zpool replace storage sdc sd

Y veremos
remplazo

Si nos fijamos en el disco sdd a pasado a estar dentro del pool y estado ONLINE, esto que quiere decir, pues que aun que tengamos el sdc OFFLINE, el sdd ya esta recibiendo peticiones y forma parte del RAID

Aquí se ve claramente

spareonlineEn este punto tenemos dos caminos o volvemos a poner el disco sdc ONLINE o lo eliminamos, de tal manera que el sdd pasara a formar parte de el pool en la misma situación que el sdc cuando funcionaba, pues probamos los dos casos!

  • Ponemos el sdc en ONLINE
zpool online storage sdc

Ahora lo que pasará es que tendremos el sdc y el sdd como discos spare asociados a ese pool, pero estando los 3 activos, si nos fijamos hemos pasado de tener un disco spare disponible a activo, cuando este esta activo queda asociado al pool en el cual empezó a trabajar, cuando nosotros hicimos el replace lo asociamos al pool de storage, entonces cuando ponemos el sdc ONLINE, lo que tendremos es lo siguiente.

todoonlineFijaros como el sdc paso a estar en uso, en la imagen anterior cuando lo añadimos estaba en disponible.

todoonline

Ahora hacemos escrituras veremos como los 3 están escribiendo.

todosescribiendoPERO! Cuantos utilizaremos si leemos?

Pues dos, los dos que están activos realmente, para atender a todas las peticiones.
lectura

  • Dejar todo como estaba

Vale, bueno ahora lo que nos interesa es volver a dejar un disco en spare, disponible para todos los pools que tengamos, el sdd como nuevo disco dentro del raidz, o sea todo tal y como estaba, la verdad es que no se si es la mejor forma, pero no encontré otra mejor… tendremos que  ponerlo offline y hacer el detach

zpool offline storage sdc
zpool detach storage sdc

Y todo volverá a la normalidad, pero teniendo el RAID montado con el sdb y el sdd en vez de con el sdb y el sdc, que este ahora será spare disponible para todos los pools

normalidad

Si llegados a este punto estamos convencidos de que vamos a utilziar zfs, pues lo que nos gustará hacer es que cuando arranque nos monte el pool. para eso deberemos hacer dos cosas:

Editar

vim /etc/default/zfs

ZFS_MOUNT='yes'

ZFS_UNMOUNT='yes'

Y os preguntareis que linea hay que meter en el fstab?, pues ninguna ya que el demonio zfs se encarga de montar el pool que tenemos configurado al arrancar, esto lo hace partiendo de la información del fichero zpool.cache (fichero importante) y se crea cuando creamos el pool o podemos recrearlo con el siguiente comando.

zpool set cachefile=/etc/zfs/zpool cache pool

Si en algún momento queremos montar o desmontar el pool nosotros mismos, es tan sencillo como hacer

zfs mount pool
zfs umont pool