ONTAP as a DR para servidor web en docker
Uno de los varios casos de uso de Cloud Volumes ONTAP es la posibilidad de disponer en una nube pública del mismo sistema de almacenamiento ONTAP que se tiene on-premises. Utilizando para recuperación ante desastres permite reducir costes al poder tenerse el sistema de almacenamiento en la nube pública encendido unicamente durante el tiempo que se ejecuta diariamente la replicación.
La arquitectura compuesta por contenedores y ONTAP permite desacoplar la capa de la aplicación y la de los datos permitiendo separar el ciclo de vida de ambos.
Ejecutándo un servidor web con almacenamiento persistente sobre un volumen de ONTAP
En este ejemplo sencillo se dispone en una cabina ONTAP on-premises de un volumen donde se almacenará, a través de NFS, el contenido de un servicio web.
clusterlab::> volume show -volume vol_website
Vserver Volume Aggregate State Type Size Available Used%
--------- ------------ ------------ ---------- ---- ---------- ---------- -----
capacity_server vol_website aggr_n4_DL_Data online RW 1GB 972.6MB 5%
Desde el servidor Linux se monta el punto de montaje y se crea contenido simple html.
[root@docker]# mkdir -p /mnt/mi_website
[root@docker]# mount -t nfs 10.67.216.20:/vol_website /mnt/mi_website/
[root@vm-docker2 mi_website]# vi /mnt/mi_website/index.html
<html>
<body>
Hola !!! Esta es mi website
</body>
</html>
Se levanta el servicio web a través de un contenedor apache redirigiendo la carpeta de contenido web al volumen persistente que reside sonre ONTAP.
[root@docker]# docker run -dit --name mi_website -p 8080:80 -v /mnt/mi_website/:/usr/local/apache2/htdocs/ httpd
Unable to find image 'httpd:latest' locally
latest: Pulling from library/httpd
6ae821421a7d: Pull complete
0ceda4df88c8: Pull complete
24f08eb4db68: Pull complete
c3c78f43bd0f: Pull complete
bd71aacd8d1e: Pull complete
Digest: sha256:d12c036427f436978f2d4397ad2bd6b5b8f7b03003b7a1da084eb228ef25b7d2
Status: Downloaded newer image for httpd:latest
a4d54577c05abfd9d8c5e3bfb2a1339598f3079295b264e901293f679eb7578d
[root@docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a4d54577c05a httpd "httpd-foreground" 10 seconds ago Up 9 seconds 0.0.0.0:8080->80/tcp mi_website
Puede comprobarse como se puede acceder al contenido web desde el puerto apropiado.
Replicando los datos del servicio web
Al haber desacoplado el aplicativo de los datos con el uso de docker, simplemente se ha de replicar los datos hacia otro sistema. Tras haber Desplegado AWS Cloud Volumes ONTAP, se utilizará este sistema aprovechando la replicación eficiente de ONTAP llamada SnapMirror.
Accediendo a OnCommand Cloud Manager se ha de añadir el sistema ONTAP on-premises. Para ello habrá sido necesario previamente establecer la conexión via VPN o Direct Connect entre la red física y el VPC de AWS.
Se selecciona un sistema ONTAP físico
Se define la dirección IP de gestión del clúster y las credenciales de acceso.
OnCommand Cloud Manager descubre y cataloga el sistema de almacenamiento ONTAP físico.
Para replicar contenido de una nube privada a una nube pública, simplemente se tiene que arrastrar una nube sobre otra.
A partir de aquí completa la información necesaria en forma de asistente. A continuación se establecen las direcciones IPs, LIFs, de réplica a utilizar.
Se selecciona el volumen o volumenes que se quiere replicar.
El tipo de disco donde se va a almacenar el volumen replicado.
El límite de transferencia de la réplica.
La política de replicación.
La programación de la replicación.
Se revisa la configuración y se acepta.
Una vez que termina la replica se tendrán los datos de la nube privada y la nube pública sincronizados.
Se podrán ver los detalles de los datos replicados.
Replicando el aplicativo del servicio web
Para poder prestar el servicio en AWS hay que juntar el aplicativo y los datos. Una vez que los datos están replicados, con la tecnología de docker es muy sencillo replicar el aplicativo. Para ello se despliega una instancia Linux desde una AMI de AWS.
Una vez está disponible se verifica el Security Group
Y se permite acceso a los puertos necesarios del aplicativo, en este ejemplo el servicio web y ssh para la gestión.
Ejecutándo el servicio replicado en AWS
Tras comprobar los NFS export policy de Cloud Volumes ONTAP, conectándose a la instancia Linux de AWS se monta el volumen replicado y se lista el contenido de la aplicación.
[root@ip-172-30-14-247 ~]# mkdir -p /mnt/mi_website
# Hay que crear/modificar los export policy
[root@ip-172-30-14-247 ~]# mount -t nfs 172.30.14.246:/vol_website /mnt/mi_website/
[root@ip-172-30-14-247 ~]# cat /mnt/mi_website/index.html
<html>
<body>
Hola !!! Esta es mi mi_website
</body>
</html>
De igual forma, con el mismo comando, que se instancian los contenedores web on-premises, se instancian el contenedor web en AWS
[root@ip-172-30-14-247 ~]# docker run -dit --name mi_website -p 8080:80 -v /mnt/mi_website/:/usr/local/apache2/htdocs/ httpd
Unable to find image 'httpd:latest' locally
latest: Pulling from library/httpd
6ae821421a7d: Pull complete
0ceda4df88c8: Pull complete
24f08eb4db68: Pull complete
c3c78f43bd0f: Pull complete
bd71aacd8d1e: Pull complete
Digest: sha256:d12c036427f436978f2d4397ad2bd6b5b8f7b03003b7a1da084eb228ef25b7d2
Status: Downloaded newer image for httpd:latest
5bcda071f7773f68865fb6a703af5490e3b8504ec6ba4a045aa4f60f57b25417
[root@ip-172-30-14-247 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5bcda071f777 httpd "httpd-foreground" 15 seconds ago Up 14 seconds 0.0.0.0:8080->80/tcp mi_website
Esto permite visualizar el mismo servicio con los mismos datos de forma eficiente.