Wordpress en replicación IIS con robocopy

10

Configuramos un entorno de wordpress en 4 servidores IIS. Estamos considerando usar una tarea programada que active una secuencia de comandos robocopy para replicar el directorio de wordpress cada 5 minutos.

¿Cuáles son las opiniones sobre este enfoque? ¿Alguien ha usado esto o algo similar?

joebegborg07
fuente
¿Cuáles son los 4 servidores IIS físicos o VM? ¿Qué estás replicando los datos o las bases de datos y configuraciones? No estoy seguro de por qué tendría 4 servidores 1 como maestro (supongo) y los otros como pasivos si está tratando de lograr HA que no funcionará.
Anthony Fornito
1
segunda pregunta (y probablemente la más importante) ¿por qué estás ejecutando wordpress en windows?
Anthony Fornito
Gracias @AnthonyFornito por tu respuesta. Ejecutar wordpress en windows por razones internas. Solo estoy tratando de trabajar con eso. Estoy después de la replicación de los archivos del sitio web (la replicación de la base de datos ya se maneja a través de MYSQL). Los front-end son máquinas virtuales en Azure. Principalmente busco una solución donde todos los front-end compartan los mismos archivos del sitio web. ¿Hay algo que sugerirías?
joebegborg07

Respuestas:

12

Tener 4 servidores front-end que comparten los mismos archivos al mismo tiempo y cada uno puede escribir sin usar algún tipo de DFS o un programa de terceros dedicado a la sincronización de directorios sería una yegua nocturna.

Con azul puedes mirar en 3 cosas.

  1. Almacenamiento compartido, puede haber algún costo asociado con la obtención de su propio almacenamiento dedicado, y no estoy seguro de la configuración, sin embargo, Azure ofrece esto. Esto garantizaría que todos sus archivos estén disponibles para cada servidor tan pronto como se escriban.

  2. Azure DFS, DFS es una herramienta de sincronización de directorios basada en Windows que funciona bastante bien, no está seguro sobre el costo, pero la configuración podría ser un poco más fácil. DFS funciona de forma asíncrona, por lo que hay un pequeño retraso, pero no mucho.

  3. (Voy a explicar cómo se haría esto y luego nunca volveré a hablar de ello, porque es una idea horrible y fallará). Cree un script que primero compare los datos en los cuatro servidores y luego copie los datos diferenciales. Debería compartir cada directorio con el servidor que ejecuta la secuencia de comandos, permiso de configuración para que el servidor pueda leer y escribir y luego solucionar problemas, solucionar problemas.

Cualquiera de las opciones anteriores hará el trabajo, si su trabajo depende de este trabajo, le recomendaría que se mantenga alejado de la opción 3.

Dicho esto, y no estás tratando de gastar dinero, sigue los pasos a continuación.

  1. mira un programa llamado "sincronización de archivos gratis". Hay algunas características realmente buenas para la versión gratuita. Creo que hay una versión paga pero no estoy seguro de las mejoras que obtienes. Lo he usado en muchos de mis entornos de desarrollo al tratar de lograr algo similar a lo que está buscando hacer y fue flojo para configurar DFS.

  2. Haga que solo se pueda escribir un servidor, esto se puede hacer fácilmente configurando un URI en cada servidor que diga si crear un artículo vaya a ServerA, o una reescritura de URL en su web.config, o si WordPress es php use:

    encabezado ('Ubicación: http://myhost.com/mypage.php ');

Cada uno requerirá un poco de codificación y PHP, conocimiento de IIS.

  1. La parte realmente divertida, con ServerA siendo el servidor de autor (solo servidor de escritura), ¿cómo dirigimos el tráfico a ServerB, ServerC y ServerD para leer sin un equilibrador de carga?

Respuesta corta que no puede, bueno, eso no es exactamente cierto, una vez tuve un cliente que se mostró inflexible acerca de no usar un equilibrador de carga que pudo a través de una serie de scripts de PowerShell para mover una conexión de un servidor a otro en función de la cantidad de procesos de trabajo en cada caja o algo así. De cualquier manera, es muy difícil de hacer y no vale la pena el tiempo y la energía.

Vea si no puede configurar el Equilibrio de carga de red en los servidores. Se requerirá una IP adicional pero es solo un cambio de DNS y el tráfico se puede distribuir para leer en los 3 servidores.

¡Buena suerte!

Anthony Fornito
fuente
Muchas gracias por sus sugerencias. El almacenamiento central único fue un cuello de botella para nosotros, ya que teníamos esa configuración antes, pero no estaba lidiando con el alto tráfico. Necesitábamos una solución rápida debido a una fecha límite. Finalmente utilizamos resilio, que es una solución de sincronización en tiempo real de igual a igual, que detecta cambios en cualquiera de los servidores y se replica en el otro servidor. Espero que cualquier persona que tenga los mismos problemas o similares pueda hacer que esto resuelva los problemas de la misma manera que lo hizo para nosotros. Estoy probando su sugerencia de reescritura de URL para el backend de WP y enviando cambios a otras máquinas. Gracias de nuevo.
joebegborg07
NLB no funciona en Azure (no hay capa 2, si quieres pesadillas realmente horribles, solo intenta mirar la tabla ARP en una máquina virtual de Azure).
Massimo
12

Gracias por todas las sugerencias personas.

Nuestra solución fue utilizar un enfoque de sincronización de igual a igual utilizando una herramienta llamada resilio.

Resilio nos permitió configurar una cantidad de computadoras (en este caso, front-end IIS) en un clúster de sincronización punto a punto. Se selecciona una carpeta de cada computadora en el clúster para utilizarla en el proceso de sincronización.

El servicio de resilio (servicio de Windows que se ejecuta en segundo plano), monitorea estas carpetas en busca de cambios y si se realiza un cambio en cualquiera de las carpetas especificadas en los front-end en cuestión, resilio empujará ese cambio a los otros servidores.

Espero que esto pueda ayudar a otros que enfrentan un problema similar en el futuro.

joebegborg07
fuente
11

No creo que las tareas programadas y Robocopy sea un gran enfoque. Debido a la ventana de 5 minutos, habrá momentos en los que se solicite un recurso, pero el servidor seleccionado por el equilibrador de carga no lo tendrá disponible. Para sitios en gran parte estáticos, esto sucederá con mucha menos frecuencia que con sitios ocupados que cambian con frecuencia. Una frecuencia más alta o el uso de una tecnología de sincronización diferente como Bittorrent Sync (ahora llamada Resilio Sync ) mejoraría esto bastante, pero no eliminaría el problema.

Poner su contenido wp o tal vez solo la carpeta wp-content / uploads en una unidad compartida sería una mejor solución. Otra forma de ver esto sería hacer que uno de los servidores aloje esa carpeta y que los demás la compartan. Con el almacenamiento en caché de disco, la carga en el servidor no debería ser mucho más alta que la de los otros servidores.

Actualizar

Eche un vistazo a este artículo para obtener ideas sobre el almacenamiento en caché de páginas, y este para CDN. Se trata de Nginx, por lo que deberá resolverlo para IIS, pero la teoría subyacente es válida para cualquier servidor web.

Tim
fuente
Gracias por su sugerencia @Tim. Como dijiste, el sitio web es dinámico, con actualizaciones de archivos menores regulares debido a los complementos de WordPress; Eso significa que cada front end puede tener diferentes archivos a veces. ¿Alguna vez ha probado dicho entorno de producción (aprox. 500 - 1000 usuarios concurrentes); es decir, almacenar los archivos del sitio web en un repositorio central y asignarlos a través de un disco compartido? Si es así, ¿cómo fue la experiencia?
joebegborg07
No, no he probado ese escenario, no lo necesito porque guardo en caché y uso un CDN. Debería realizar una prueba de carga de los servidores front-end, incluido el servidor de archivos back-end. Sin embargo, si sus páginas no están personalizadas para cada usuario, el almacenamiento en caché de la página podría reducir enormemente su carga, como lo haría con una distribución de contenido: CloudFlare tiene un nivel gratuito. Esto es cierto incluso si actualiza cada 5 minutos. Google "Nginx Microcaching" para la teoría detrás de él, pero obviamente tendrá que implementarlo de manera diferente en IIS. Los encabezados de almacenamiento en caché son bastante críticos si sigues esta ruta. Ver actualización anterior también.
Tim