Pregunta

Como hicimos esto en el pasado, me gustaría recopilar información útil para todos los que se mueven hacia el equilibrio de carga, ya que hay problemas que su código debe conocer.

Pasamos de un servidor apache a squid como proxy inverso / loadbalancer con tres servidores apache detrás.

Estamos utilizando PHP / MySQL, por lo que los problemas pueden diferir.

Cosas que tuvimos que resolver:

Sesiones

Pasamos de " predeterminado " Sesiones de php (archivos) a sesiones de memcached distribuidas. Solución simple, hay que hacerlo. De esta manera, tampoco necesita " sesiones adhesivas " en su loadbalancer.

Almacenamiento en caché

A nuestro cache-caché no distribuido por servidor web, agregamos anoter memcached-layer para el almacenamiento en caché de objetos distribuidos, y reemplazamos todos los sistemas de búsqueda de archivos antiguos / obsoletos con él.

Subidas

Las subidas van a una carpeta compartida (nfs).

Cosas que optimizamos para la velocidad:

Archivos estáticos

Nuestro NFS principal ejecuta un lighttpd, que sirve imágenes (también cargadas por el usuario). Squid es consciente de eso y nunca consulta nuestros nodos de apache en busca de imágenes, lo que dio un buen impulso de rendimiento. Squid también está configurado para almacenar esos archivos en memoria caché.

¿Qué hiciste para preparar tu código / proyecto para el equilibrio de la carga, cualquier otra inquietud para las personas que están pensando en este cambio y qué plataforma / idioma estás usando?

¿Fue útil?

Solución

Al hacer esto:

Para los nodos http, presiono con fuerza para obtener una sola imagen del sistema (ocfs2 es bueno para esto) y uso libra o cruce de caminos como un equilibrador de carga, según el escenario. Los nodos deben tener un pequeño disco local para intercambiar y evitar la mayoría (pero no todos) los dolores de cabeza de las CDSL.

Luego traigo a Xen a la mezcla. Si coloca una pequeña cantidad de información temporal en Xenbus (es decir, cuánta memoria virtual Linux ha prometido a los procesos por VM, también conocido como Committed_AS), puede detectar rápidamente un equilibrador de carga cerebral y ajustarlo. Oracle también se dio cuenta de esto ... y ahora está trabajando para mejorar el controlador de globo en Linux.

Después de eso miro el costo de dividir el uso de la base de datos para cualquier aplicación dada a través de sqlite3 y cualquier db que la aplicación quiera de forma nativa, al darme cuenta de que necesito dividir la db para que posix_fadvise () pueda hacer su trabajo y no contamine el kernel tampones innecesariamente. Dado que la mayoría de los servicios de DBMS quieren hacer su propio almacenamiento en búfer, también debe permitirles hacer su propio agrupamiento. Esto realmente determina el tipo de clúster de base de datos que uso y lo que hago con el controlador de globo.

Los servidores Memcache luego se inician desde un inicio delgado, nuevamente, mientras que el dominio privilegiado observa su memoria y el uso de la CPU para que sepa cuándo arrancar más.

La elección del latido / adquisición depende realmente de la red dada y del uso esperado del clúster. Es difícil generalizar eso.

El resultado final suele ser 5 o 6 nodos físicos con bastante memoria iniciando un monitor de máquina virtual + invitados mientras está conectado al almacenamiento duplicado.

El almacenamiento también es difícil de describir en términos generales ... a veces uso LVM de clúster, a veces no. El no cambiará cuando LVM2 finalmente se aleje de su API actual basada en cadenas.

Finalmente, toda esta coordinación da como resultado que Augeas actualice las configuraciones sobre la marcha, en función de los eventos comunicados a través de Xenbus. Eso incluye ocfs2, o cualquier otro servicio donde las configuraciones simplemente no puedan residir en una sola imagen del sistema.

Esta es realmente una pregunta específica de la aplicación ... ¿puedes dar un ejemplo? Me encanta memcache, pero no todos pueden beneficiarse de su uso, por ejemplo. ¿Estamos revisando su configuración o hablando de las mejores prácticas en general?

Editar:

Lo siento por estar tan centrado en Linux ... normalmente es lo que uso al diseñar un clúster.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top