Análisis del código fuente de Lvsdr
LVS es la abreviatura de servidor virtual Linux, también conocido como servidor virtual Linux. Es un proyecto de software libre iniciado por el Dr. Zhang y su sitio web oficial lo es. LVS ahora es parte del kernel estándar de Linux. Antes del kernel de Linux 2.4, el kernel debía recompilarse para admitir el módulo de función LVS. Sin embargo, desde el kernel de Linux 2.4, todos los módulos funcionales de LVS están completamente integrados y varias funciones proporcionadas por LVS se pueden usar directamente sin parchear el kernel. El objetivo de utilizar la tecnología LVS es lograr un clúster de servidores de alto rendimiento y alta disponibilidad con buena confiabilidad, escalabilidad y operatividad a través de la tecnología de equilibrio de carga proporcionada por LVS y el sistema operativo Linux. Esto da como resultado un rendimiento óptimo del servicio a un costo menor.
Dos y tres modos de trabajo
1. Equilibrio de carga en modo LVS basado en NAT
Es decir, la tecnología de traducción de direcciones de red implementa servidores virtuales. Cuando la solicitud del usuario llega al programador, el programador reescribe la dirección de destino (es decir, la dirección IP virtual) del mensaje de solicitud en la dirección del servidor real seleccionada y, al mismo tiempo, el puerto de destino del mensaje también se cambia al puerto correspondiente. del servidor real seleccionado,* * *Enviar la solicitud de mensaje al servidor real seleccionado. Después de obtener los datos del servidor, cuando el servidor real devuelve los datos al usuario, necesita cambiar la dirección de origen y el puerto del mensaje a la dirección IP virtual y el puerto correspondiente a través del programador de carga nuevamente, y luego enviar los datos. al usuario para completar todo el proceso de programación de carga. Como puede ver, en el modo NAT, tanto los mensajes de solicitud como de respuesta del usuario deben reescribirse mediante la dirección del servidor Director. Cuando hay cada vez más solicitudes de usuarios, se dice que la potencia de procesamiento del programador es un cuello de botella.
2. Equilibrio de carga LVS basado en TUN
Es decir, la tecnología de túnel IP implementa servidores virtuales. Su programación y gestión de conexiones son las mismas que VS/NAT, pero su método de reenvío de mensajes es diferente. En VS/TUN, el programador utiliza tecnología de túnel IP para reenviar la solicitud del usuario a un servidor real, que responderá directamente a la solicitud del usuario sin pasar por el programador de front-end. Además, no existe ningún requisito en cuanto a la ubicación geográfica del servidor real. Puede estar ubicado en el mismo segmento de red que el servidor Director o puede ser una red independiente. Por lo tanto, en el modo TUN, el programador solo procesará las solicitudes de mensajes del usuario y el rendimiento del sistema del clúster mejora enormemente.
Se utiliza poco y se omite la imagen.
3. Equilibrio de carga LVS basado en recuperación ante desastres
En otras palabras, los servidores virtuales se implementan mediante tecnología de enrutamiento directo. Su programación y gestión de conexiones son las mismas que en VS/NAT y VS/TUN, pero su método de reenvío de mensajes es diferente. VS/DR envía la solicitud al Real Server reescribiendo la dirección MAC del mensaje de solicitud, y Real Server devuelve directamente la respuesta al cliente, evitando así la sobrecarga del túnel IP en VS/TUN. Este método es el mejor de los tres mecanismos de programación de carga, pero debe requerir que tanto Director Server como Real Server tengan una tarjeta de red conectada al mismo segmento de red física.
3. Algoritmo de programación de equilibrio de carga LVS
Como mencionamos anteriormente, el programador de carga selecciona dinámicamente un servidor real para responder a la solicitud del usuario en función de la carga de cada servidor. Entonces, cómo implementar la selección dinámica es en realidad el algoritmo de programación de carga del que hablaremos aquí. Según los diferentes requisitos del servicio de red y configuraciones del servidor, IPVS implementa los siguientes ocho algoritmos de programación de carga. Aquí describimos en detalle los cuatro algoritmos de programación más utilizados. Consulte otros materiales para conocer los cuatro algoritmos de programación restantes.
3.1 Round Robin
La programación "Round Robin" también se denomina programación 1:1. El programador distribuye las solicitudes de los usuarios externos a cada servidor real en el clúster en un orden 1:1 a través de un algoritmo de programación "por turnos". Este algoritmo trata a todos los servidores reales por igual, independientemente del estado de carga real y del estado de la conexión en el servidor.
3.2? Programación por turnos ponderada
El algoritmo de programación "por turnos ponderado" programa las solicitudes de acceso en función de las diferentes capacidades de procesamiento del servidor real.
Se pueden establecer diferentes pesos de programación para cada servidor real. Se puede establecer un peso más alto para un servidor real con un rendimiento relativamente bueno y un peso más bajo para un servidor real con capacidades de procesamiento débiles, para garantizar que los servidores reales con capacidades de procesamiento relativamente fuertes pueden El servidor puede manejar más tráfico de acceso. Los recursos del servidor se utilizan total y razonablemente. Al mismo tiempo, el programador también puede consultar automáticamente la carga del servidor real y ajustar dinámicamente su peso.
3.3? Programación de enlaces mínimos (número mínimo de conexiones)
El algoritmo de programación de "conexiones mínimas" programa dinámicamente las solicitudes de red al servidor con el número mínimo de enlaces establecidos. Si los servidores reales en un sistema en clúster tienen un rendimiento del sistema similar, entonces el algoritmo de programación de "conexiones mínimas" puede equilibrar bien la carga.
3.4? Programación de enlaces mínimos ponderados (número mínimo de conexiones ponderadas)
La "programación de enlaces mínimos ponderados" es un superconjunto de "programación de conexiones mínimas". Cada nodo de servicio puede utilizar un peso correspondiente para representar sus capacidades de procesamiento, y el administrador del sistema puede establecer dinámicamente el peso correspondiente. El peso predeterminado es 1. Al asignar nuevas solicitudes de conexión, la programación de conexiones mínimas ponderadas hace que el número de conexiones establecidas de un nodo de servicio sea lo más proporcional posible a su peso.
Los otros cuatro algoritmos de programación son el número mínimo de conexiones basado en la ubicación, el número mínimo de conexiones y replicación basado en la ubicación, el hash de destino y el hash de origen. La importancia de estos cuatro algoritmos de programación no se describe en este documento. artículo. Si desea obtener más información sobre las otras cuatro estrategias de programación, puede visitar el sitio web chino LVS zh.linuxvirtualserver.org para obtener más detalles.