Si trabajamos con Amazon Web Services, uno de los servicios que usaremos sin duda es EC2. Con EC2 podremos crear instancias (máquinas virtuales) con gran facilidad, y estas, están directamente ligadas al uso de volúmenes EBS (discos virtuales).
Una de las dudas con las que me encuentro a menudo usando instancias EC2 con volúmenes EBS, es elegir bien la capacidad que asignar al disco basándome en el uso que le voy a dar a esa instancia. Si que es verdad que podemos mas a o menos calcularlo, pero a veces nos podemos quedar cortos, ya que nunca sabes si en un futuro vas a implementar algo que pueda requerir mucho espacio… como una base de datos que puede ir creciendo.
Para evitar esto, y no tener que asignar muchísimo espacio que no vamos a usar a corto plazo (ya que el coste esta directamente relacionado con la capacidad asignada a un disco EBS) la mejor solución es usar LVM (Logical Volume Manager).
A continuación voy a explicar los pasos a seguir, mas comunes, para gestionar volúmenes EBS sobre una instancia EC2 ya creada.
CREAR UN VOLUMEN EBS
1. Accedemos a la consola de AWS y vamos al apartado “ELASTIC BLOCK STORE” > “Volumes”
2. Pulsamos en “Create Volume”
3. Asignamos la capacidad del disco EBS, la zona de disponibilidad, no seleccionamos ninguna snapshot y dejamos el tipo de volumen en “Standard”
4. En pocos segundos ya tendremos nuestro disco creado y disponible para usarlo donde queramos
ADJUNTAR UN VOLUMEN EBS
1. Accedemos a la consola de AWS y vamos al apartado “ELASTIC BLOCK STORE” > “Volumes”
2. Seleccionamos el disco que queremos adjuntar, pulsamos en “More…” y seleccionamos “Attach Volume”
3. En la siguiente ventana, seleccionamos la instancia a la que queremos adjuntar el disco y pulsamos “Yes, Attach”
MONTAR UN VOLUMEN EBS QUE HEMOS ADJUNTADO (EBS CREADO DE CERO, SIN DATOS)
1. Accedemos mediante SSH a la instancia.
2. Buscamos el nombre del disco para el sistema (si es el primera, seguramente serà “xvdj”):
fidsk -l
3. Usamos la herramienta FDISK con el disco:
fdisk /dev/xvdj
4. Creamos una nueva partición usando toda la capacidad, para ello seguimos esos pasos en la aplicación:
[n --> p --> 1 --> ENTER --> ENTER --> w]
5. Formateamos el disco con el sistema de ficheros que queremos (en este caso, EXT4):
mkfs -t ext4 /dev/xvdj1
6. Creamos el directorio donde montaremos el disco (en este caso uno para backups):
mkdir /mnt/backups
7. Montamos el disco en el directorio (en este caso lo hacemos con la partición 1 que hemos creado en este disco, que es la unica que tiene):
mount /dev/xvdj1 /mnt/backups
8. Verificamos que se ha comentado correctamente:
mount -l
9. Añadimos el montaje del disco en el fichero FSTAB para que se monte al inicio del sistema:
echo "/dev/xvdj1 /mnt/backups auto defaults,nobootwait 0 0" >> /etc/fstab
MONTAR UN VOLUMEN EBS QUE HEMOS ADJUNTADO (EBS EXTRAIDO DE OTRA INSTANCIA, CON DATOS)
1. Accedemos mediante SSH a la instancia.
2. Buscamos el nombre del disco para el sistema (en este veremos que es “xvdj”):
fdisk -l
4. Creamos el directorio donde montaremos el disco (en este caso uno que ya contiene backups):
mkdir /mnt/backups
5. Montamos el disco en el directorio (en este caso lo hacemos con la partición 1, que es la unica que tiene):
mount /dev/xvdj1 /mnt/backups
6. Verificamos que se ha comentado correctamente:
mount -l
7. Añadimos el montaje del disco en el fichero FSTAB para que se monte al inicio del sistema:
echo "/dev/xvdj1 /mnt/backups auto defaults,nobootwait 0 0" >> /etc/fstab
QUITAR UN VOLUMEN EBS DE UNA INSTANCIA EC2
1. Buscamos donde esta montado el disco:
df -h Filesystem Size Used Avail Use% Mounted on /dev/xvde1 985G 552G 383G 60% / tmpfs 17G 0 17G 0% /dev/shm /dev/xvdj 1008G 437G 521G 46% /mnt/backups
2. Desmontamos el disco del directorio (nos aseguramos previamente que no se esta usando ni nos encontramos dentro del directorio):
umount /mnt/backups
3. Accedemos a la consola de AWS y vamos al apartado “ELASTIC BLOCK STORE” > “Volumes”
4. Seleccionamos el disco que queremos quitar, pulsamos en “More…” y seleccionamos “Dettach Volume”
EXPANDIR EL DISCO BASE DE UNA INSTANCIA
Si tenemos una instancia con x GB de disco, y queremos ampliar el disco base, simplemente creamos una AMI de la instancia, y creamos una nueva instancia con esa AMI. En el proceso de creación aumentaremos la capacidad del disco, pero una vez creada, si accedemos a la instancia veremos que seguimos teniendo la misma capacidad en el disco montado en la raíz, para poder acceder al resto de capacidad deberemos crear una sola partición y redimensionarla, siguiendo los pasos que dejo a continuación
1. Accedemos mediante SSH a la instancia.
2. Usamos la herramienta FDISK con el disco:
fdisk /dev/xvde
3. Eliminamos todas las particiones (si existen):
[d --> 1]
4. Creamos una nueva partición usando toda la capacidad, para ello seguimos esos pasos en la aplicación:
[n --> p --> 1 --> ENTER --> ENTER --> a --> 1 --> w]
5. Reiniciamos la instancia:
reboot
6. Accedemos mediante SSH a la instancia de nuevo, ya que se habrá cortado la conexión reiniciando.
7. Nos aseguramos de que la partición 1 del disco está montada en la raíz del sistema :
cat /etc/fstab /dev/xvde1 / ext4 defaults 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 tmpfs /dev/shm tmpfs defaults 0 0 proc /proc proc defaults 0 0 sysfs /sys sysfs defaults 0 0
8. Finalmente redimensionamos la partición:
resize2fs /dev/xvde
AÑADIR UN DISCO NUEVO CON LVM
1. Seguimos los pasos de la guía “CREAR UN VOLUMEN EBS” y “ADJUNTAR UN VOLUMEN EBS”
2. Accedemos mediante SSH a la instancia.
3. Buscamos el nombre del disco para el sistema (en este veremos que es “xvdj”):
fdisk -l
4. Instalamos LVM (si no lo tenemos instalado):
yum -y install lvm2
5. Cremos una partición usando todo el disco:
fdisk /dev/xvdj [n --> p --> 1 --> ENT --> ENT --> w]
6. Inicializamos el volúmen físico para usar LVM:
pvcreate /dev/xvdj1
7. Vemos las características del volúmen físico que hemos inicializado:
pvdisplay
8. Creamos un grupo de volúmen para el disco y le llamamos “vgdatabase”:
vgcreate vgdatabase /dev/xvdj1
9. Vemos las características del grupo de volúmen que hemos creado:
vgdisplay
10. Creamos un volumen lógico con el 100% del espacio del grupo de volúmen y le llamamos “lvdatabase”:
lvcreate -l 100%FREE -n lvdatabase vgdatabase
11. Formatemos el disco con el sistema de ficheros EXT4:
mkfs.ext4 /dev/mapper/vgdatabase-lvdatabase
12. Creamos el directorio donde montaremos el disco:
mkdir /mnt/mysql
13. Montamos el disco:
mount /dev/mapper/vgdatabase-lvdatabase /mnt/mysql
14. Añadimos el montaje del disco en el fichero FSTAB para que se monte al inicio del sistema:
echo "/dev/mapper/vgdatabase-lvdatabase /mnt/mysql ext4 defaults,noatime,nodiratime 0 0" >> /etc/fstab
EXPANDIR UN DISCO CON LVM CON OTRO DISCO
1. Seguimos los pasos de la guía “CREAR UN VOLUMEN EBS” y “ADJUNTAR UN VOLUMEN EBS”
2. Accedemos mediante SSH a la instancia.
3. Buscamos el nombre del disco para el sistema (en este veremos que es “xvdk”):
fidsk -l
4. Cremos una partición usando todo el disco:
fdisk /dev/xvdk [n --> p --> 1 --> ENT --> ENT --> w]
5. Inicializamos el volúmen físico para usar LVM:
pvcreate /dev/xvdk1
6. Extendemos el grupo de volumen “vgdatabase” (que hemos creado en el primer disco) con la partición 1 del disco que acabamos de añadir:
vgextend vgdatabase /dev/sdk1
7. Extendemos el volúmen lógico:
lvextend -l +100%FREE /dev/vgdatabase/lvdatabase
8. Finalmente redimensionamos la partición:
resize2fs /dev/vgdatabase/lvdatabase