amazon web services - valores - ¿Cómo configurar el almacenamiento persistente compartido para múltiples instancias de AWS EC2?
us east virginia aws (7)
Tengo un servicio alojado en Amazon Web Services. Allí tengo varias instancias de EC2 que se ejecutan con la misma configuración e información, administradas por Elastic Load Balancer y grupos de escala.
Esas instancias son servidores web que ejecutan aplicaciones web basadas en PHP. Entonces actualmente hay los mismos archivos, etc. colocados en cada instancia. Pero cuando el grupo ELB / escala lanza una nueva instancia basada en las reglas de carga, etc., es posible que los archivos no estén actualizados. Además, me gustaría utilizar un sistema de archivos compartido para sesiones PHP, etc. que las sesiones adhesivas.
Entonces, mi pregunta es, por esas razones y tal vez más por venir en el futuro, me gustaría tener una entidad de sistema de archivos compartida que pueda adjuntar a mis instancias de EC2. ¿De qué manera sugerirías resolver esto? ¿Hay soluciones ofrecidas por AWS directamente para que pueda confiar en sus servicios en lugar de hacerlo con mi DRBD y demás? ¿Cuál es el enfoque más fácil? DRBD, NFS, ...? ¿S3 también es factible para esos propósitos?
Gracias por adelantado.
Estamos usando ObjectiveFS y nos está funcionando bien. Utiliza S3 para el almacenamiento y es sencillo de configurar.
También han escrito un documento sobre cómo compartir archivos entre instancias de EC2. http://objectivefs.com/howto/how-to-share-files-between-ec2-instances
Como se menciona en un comentario, AWS ha anunciado EFS ( http://aws.amazon.com/efs/ ) un sistema de archivos de red compartido. Actualmente se encuentra en una vista previa muy limitada, pero en base a los servicios anteriores de AWS, espero verlo generalmente disponible en los próximos meses.
Mientras tanto, hay un par de soluciones de sistemas de archivos compartidos de terceros para AWS, como SoftNAS https://aws.amazon.com/marketplace/pp/B00PJ9FGVU/ref=srh_res_product_title?ie=UTF8&sr=0-3&qid=1432203627313
S3 es posible pero no siempre es ideal, ya que el bloqueador principal no admite de forma nativa ningún protocolo del sistema de archivos, sino que todas las interacciones deben realizarse a través de una API de AWS o a través de llamadas http. Además, cuando se trata de usarlo para tiendas de sesión, el modelo ''eventualmente consistente'' probablemente cause problemas.
Dicho eso, si todo lo que necesita son recursos actualizados, podría crear un script simple para ejecutar como un cron o en el inicio que descarga los archivos de s3.
Finalmente, en el caso de los recursos estáticos como css / images, no los almacene en su servidor web: hay muchos artículos que cubren los beneficios de almacenar y acceder a recursos web estáticos directamente desde s3 mientras se mantienen los recursos dinámicos en su servidor .
Hasta que Amazon EFS llegue a producción, el mejor enfoque, en mi opinión, es construir un back-end de almacenamiento que exporte NFS desde instancias EC2, tal vez usando Pacemaker / Corosync para lograr HA.
Puede crear un volumen de EBS que almacene los archivos e indicarle a Pacemaker que desmonte / desactive y luego conecte / monte el volumen de EBS al nodo sano del clúster NFS.
Para mantener sincronizadas las sesiones de su servidor web, puede cambiar fácilmente a Redis o Memcached como su manejador de sesión. Esta es una configuración simple en PHP.ini y todos pueden acceder al mismo servidor Redis o Memcached para hacer sesiones. Puede usar Elasticache de Amazon, que administrará la instancia de Redis o Memcache por usted.
http://phpave.com/redis-as-a-php-session-handler/ <- explica cómo configurar Redis con PHP con bastante facilidad
Para mantener tus archivos sincronizados es un poco más complicado.
¿Cómo presiono los nuevos cambios de código en todos mis servidores web?
Podrías usar Git. Cuando implemente, puede configurar varios servidores y enviará su sucursal (principal) a los servidores múltiples. Por lo tanto, cada compilación nueva se envía a todos los servidores web.
¿Qué hay de las nuevas máquinas que se lanzan?
Configuraría nuevas máquinas para ejecutar un script rsync desde una fuente confiable, su servidor web maestro. De esa forma sincronizarán sus carpetas web con el maestro cuando arranquen y serían idénticas incluso si el AMI tenía archivos web viejos en él.
¿Qué pasa con los archivos que cambian y necesitan ser actualizados en vivo?
Almacene cualquier archivo subido por el usuario en S3. Por lo tanto, si el usuario carga un documento en el Servidor 1, el archivo se almacena en s3 y la ubicación se almacena en una base de datos. Luego, si hay un usuario diferente en el servidor 2, puede ver el mismo archivo y acceder a él como si estuviera en el servidor 2. El archivo se recuperaría de s3 y se entregaría al cliente.
Hola, actualmente usamos un producto llamado SoftNAS en nuestro entorno AWS. Nos permite elegir entre almacenamiento con respaldo EBS y S3. Ha incorporado replicación y una opción de alta disponibilidad. Puede ser algo que puedas verificar. Creo que ofrecen una versión de prueba gratuita que puedes probar en AWS
Según lo que podemos decir en este momento, se espera que EFS proporcione el uso compartido de archivos NFS básico en el almacenamiento respaldado por SSD. Una vez disponible, será un sistema de archivos propietario v1.0. No hay encriptación y solo AWS. Los datos están completamente bajo el control de AWS.
SoftNAS es un archivador NAS maduro y probado basado en ZFS con funciones completas, que incluye almacenamiento cifrado EBS y S3, instantáneas de almacenamiento para protección de datos, clones editables para DevOps y pruebas de control de calidad, memoria caché RAM y SSD para un rendimiento máximo de IOPS y deduplicación y compresión, HA de zona cruzada y un SLA al 100% de tiempo de actividad. Admite NFS con autenticación LDAP y Active Directory, CIFS / SMB con usuarios / grupos AD, multirruta iSCSI, FTP y (pronto) AFP. Las instancias de SoftNAS y todo el almacenamiento están completamente bajo su control y usted tiene el control completo de las claves y el cifrado EBS y S3 (puede usar el cifrado EBS o cualquier encriptación y administración de claves compatible con Linux que prefiera o necesite).
El sistema de archivos ZFS es un sistema de archivos comprobado que cuenta con la confianza de miles de empresas en todo el mundo. Los clientes están ejecutando más de 600 millones de archivos en producción en SoftNAS hoy en día: ZFS es capaz de escalar a miles de millones.
SoftNAS es multiplataforma y se ejecuta en plataformas en la nube distintas de AWS, incluidas Azure, CenturyLink Cloud, Faction cloud, VMware vSPhere / ESXi, VMware vCloud Air y Hyper-V, por lo que sus datos no están limitados o bloqueados en AWS. Se planean más plataformas. Proporciona replicación multiplataforma, lo que facilita la migración de datos entre cualquier nube pública compatible, nube privada o centro de datos basado en el sitio.
SoftNAS está respaldado por el soporte técnico líder de la industria de los especialistas en almacenamiento en la nube (es todo lo que hacemos), algo que puede necesitar o querer.
Esas son algunas de las diferencias más notables entre EFS y SoftNAS. Para un cuadro de comparación más detallado:
https://www.softnas.com/wp/nas-storage/softnas-cloud-aws-nfs-cifs/how-does-it-compare/
Si está dispuesto a rodar su propio clúster HA NFS, y es responsable de su cuidado, alimentación y soporte, puede usar Linux y DRBD / corosync o cualquier cantidad de otros enfoques de clustering de Linux. Deberá soportarlo usted mismo y ser responsable de todo lo que suceda.
También hay GlusterFS. Puede procesar hasta 250,000 archivos (en nuestras pruebas) y se ha observado que sufre un apagón de IOPS cuando se acerca a 1 millón de archivos, y apagones de IOPS por encima de 1 millón de archivos (de acuerdo con los clientes que lo han usado). Para implementaciones más pequeñas, según los informes, funciona razonablemente bien.
Espero que ayude.
CTO - SoftNAS
GlusterFS es también un sistema de archivos distribuidos de código abierto utilizado por muchos para crear un almacenamiento compartido en las instancias de EC2.