Estoy pensando en cómo configurar mejor un par de entornos en AWS. Me gustaría configurar dos servidores:
- Servidor de aplicaciones (ejecuta aplicaciones web y servicios REST)
- Servidor de herramientas (ejecuta varios trabajos ETL)
El resultado final debe ser dos servidores de aplicaciones y dos servidores de herramientas (es decir, un servidor de aplicaciones / servidor de herramientas en cada zona de disponibilidad)
- Todos los entornos estarán hablando con la misma base de datos.
- Cada entorno tendrá su propio almacenamiento EBS
- Un único almacenamiento compartido externo (EFS) al que se podrá acceder desde cualquiera de los 4 entornos.
Estoy un poco confundido en términos de cómo configurar el almacenamiento. El objetivo es garantizar que si se pierde una instancia de EC2, no pierdo ningún dato. Para lograr esto, me gustaría configurarlo para que el código se implemente en el almacenamiento local (EBS) y el contenido dinámico se almacene en el almacenamiento externo compartido (EFS).
Todas las aplicaciones estarán en una carpeta con la siguiente estructura
├─ application
├─ bin
├─ lib
├─ config
├─ logs
├─ data
├─ processed
├─ failed
En una instancia EC2 muere, me gustaría conservar la configuración, los registros y la carpeta de datos. Las otras carpetas (bin y lib) contendrán solo código binario que se puede reconstruir desde GIT. Para lograr esto, estoy pensando en el siguiente almacenamiento
EBS en el servidor de aplicaciones 1 y el servidor de aplicaciones 2
├─ applications
├─ finance
├─ appname1
├─ bin
├─ lib
├─ config --> /storage/finance/config
├─ logs --> /storage/finance/logs
├─ data --> /storage/finance/date
Los últimos tres serán enlaces simbólicos a carpetas en el almacenamiento externo.
EFS (almacenamiento compartido)
├─ storage
├─ finance
├─ appname1
├─ config
├─ logs
├─ data
La estructura anterior puede ser una pesadilla de mantenimiento, pero no puedo pensar en otras alternativas. Con el enfoque anterior, el código se implementa en cada servidor de aplicaciones pero los datos se comparten entre dos servidores de aplicaciones. Si un servidor de aplicaciones en una zona AV muere, el otro seguirá siendo funcional.
Otras opciones que he considerado incluyen tener todo en almacenamiento EBS y confiar en copias de seguridad / imágenes. Esto no funcionará porque los archivos de configuración son dinámicos y es posible que la imagen no siempre tenga los datos más recientes.
Al leer sobre el almacenamiento EFS, parece que escribir en él podría ser lento, lo cual es algo que me preocupa un poco. Preguntas:
- ¿Hay alternativas a lo anterior?
- ¿Hay alguna otra desventaja en el enfoque anterior?
- ¿Hay alguna manera de que pueda tener todo (código + datos) en el almacenamiento local de EBS y aún así poder recuperar (al segundo) en caso de un desastre?
Gracias por adelantado
fuente
Respuestas:
Al mirar las páginas de AWS para EFS, menciona que "cada objeto del sistema de archivos de Amazon EFS (es decir, directorio, archivo y enlace) se almacena de forma redundante en múltiples zonas de disponibilidad". Redacción similar en la página de EBS. Entonces hay algo de redundancia allí. Aquí hay un PDF de Amazon sobre alta disponibilidad.
Para EC2, el uso de múltiples zonas de disponibilidad reducirá su exposición al riesgo. Pondría cada instancia en una zona de disponibilidad separada. Y el PDF recomienda usar instantáneas de EBS con una instancia de EC2 en espera para HA. Las instantáneas están disponibles dentro de las regiones, por lo que se puede acceder fácilmente para la recuperación ante desastres. Hacerlo de esa manera respondería a su pregunta sobre poner todo en AWS EBS. Y es bastante simple copiar volúmenes EBS entre regiones para agregar redundancia y mantener todo sincronizado. Con eso, podría tener un entorno de producción, un entorno de espera y un entorno de reemplazo que podría activarse rápidamente en caso de falla, dejándolo con 2 entornos disponibles en casi todo momento.
Consulte el PDF y el enlace, además de los documentos de Amazon sobre alta disponibilidad y vea qué funciona mejor para las necesidades de su empresa y los niveles de personal.
fuente