Configuración del módulo TOA
Escenarios
ELB proporciona estrategias personalizadas para gestionar el acceso al servicio. Antes de que estas estrategias se puedan personalizar, se requieren las direcciones IP de los clientes contenidas en las solicitudes. Para obtener las direcciones IP, puede instalar el módulo del núcleo TCP Option Address (TOA) en servidores backend.
Esta sección proporciona operaciones detalladas para compilar el módulo en el SO si utiliza TCP para distribuir el tráfico entrante.
Las operaciones para los SO de Linux con la versión del kernel de 2.6.32 son diferentes de aquellas para los SO de Linux con la versión del kernel de 3.0 o posterior.
- TOA no admite oyentes usando el protocolo UDP.
- El módulo puede funcionar correctamente en los siguientes SO y los métodos para instalar otras versiones del kernel son similares:
- CentOS 6.8 (kernel version 2.6.32)
- SUSE 11 SP3 (kernel version 3.0.76)
- CentOS 7 and CentOS 7.2 (kernel version 3.10.0)
- Ubuntu 16.04.3 (kernel version 4.4.0)
- Ubuntu 18.04 (kernel version 4.15.0)
- Ubuntu 20.04 (Kernel version 5.4.0)
- OpenSUSE 42.2 (kernel version 4.4.36)
- Debian 8.2.0 (kernel version 3.16.0)
Requisitos previos
- El entorno de desarrollo para compilar el módulo debe ser el mismo que el del núcleo actual.
- Los servidores pueden acceder a los repositorios SO.
- Los usuarios que no sean root deben tener permisos sudo.
Procedimiento
- En las siguientes operaciones, la versión del kernel de Linux es 3.0 o posterior.
- Preparar el entorno de compilación.
Durante la instalación, descargue el paquete de desarrollo del módulo requerido desde Internet si no se puede encontrar en el origen.
Las siguientes son operaciones para compilar el módulo en diferentes SO de Linux. Realizar las operaciones adecuadas.
- CentOS
- Ejecute el siguiente comando para instalar GCC:
- Ejecute el siguiente comando para instalar la herramienta make:
- Ejecute el siguiente comando para instalar el paquete de desarrollo de módulos (el encabezado del paquete y la biblioteca de módulos deben tener la misma versión que el núcleo):
sudo yum install kernel-devel-`uname -r`
Durante la instalación, descargue el paquete de desarrollo del módulo requerido desde la siguiente dirección si no se encuentra en el origen:
https://mirror.netcologne.de/oracle-linux-repos/ol7_latest/getPackage/
Por ejemplo, para instalar 3.10.0-693.11.1.el7.x86_64, ejecute el siguiente comando:
rpm -ivh kernel-devel-3.10.0-693.11.1.el7.x86_64.rpm
- Ubuntu y Debian
- Ejecute el siguiente comando para instalar GCC:
- Ejecute el siguiente comando para instalar la herramienta make:
- Ejecute el siguiente comando para instalar el paquete de desarrollo de módulos (el encabezado del paquete y la biblioteca de módulos deben tener la misma versión que el núcleo):
- SUSE
- Ejecute el siguiente comando para instalar GCC:
- Ejecute el siguiente comando para instalar la herramienta make:
- Ejecute el siguiente comando para instalar el paquete de desarrollo de módulos (el encabezado del paquete y la biblioteca de módulos deben tener la misma versión que el núcleo):
- CentOS
- Compilar el módulo.
- Utilice la herramienta git y ejecute el siguiente comando para descargar el código fuente del módulo:
git clone https://github.com/Huawei/TCP_option_address.git
Si la herramienta git no está instalada, descargue el código fuente del módulo desde el siguiente enlace:
- Ejecute los siguientes comandos para ingresar al directorio de código fuente y compilar el módulo:
make
Si no se solicita ningún aviso o código de error, la compilación se ha realizado correctamente. Verifique que el archivo toa.ko se haya generado en el directorio actual.
Si el mensaje de error, "config_retpoline=y but not supported by the compiler, Compiler update recommended" se muestra, la versión de GCC es demasiado antigua. Actualice el GCC a una versión posterior.
- Utilice la herramienta git y ejecute el siguiente comando para descargar el código fuente del módulo:
- Cargue el módulo.
- Ejecute el siguiente comando para cargar el módulo:
- Ejecute el siguiente comando para comprobar la carga del módulo y ver la información de salida del kernel:
Si TOA: toa loaded se muestra en la salida del comando, el módulo se ha cargado.
Después de compilar el módulo CoreOS en el contenedor, cópielo en el sistema host y cárguelo. El contenedor para compilar el módulo comparte el directorio /lib/modules con el sistema host, por lo que puede copiar el módulo en el contenedor a este directorio, permitiendo que el sistema host lo use.
- Establezca el script para habilitarlo para cargar automáticamente el módulo.
Para que el módulo entre en vigor cuando se inicie el sistema, agregue el comando para cargar el módulo a su script de inicio.
Puede utilizar cualquiera de los siguientes métodos para cargar automáticamente el módulo:
- Agregue el comando para cargar el módulo en un script de inicio personalizado según sea necesario.
- Realice las siguientes operaciones para configurar un script de inicio:
- Cree el archivo toa.modules en el directorio /etc/sysconfig/modules/. Este archivo contiene el script de carga del módulo.
A continuación se muestra un ejemplo del contenido del archivo toa.modules.
#!/bin/sh
/sbin/modinfo -F filename /root/toa/toa.ko > /dev/null 2>&1
if [ $? -eq 0 ]; then
/sbin/insmod /root/toa/toa.ko
fi
/root/toa/toa.ko es la ruta del archivo del módulo. Necesita reemplazarlo con su camino real.
- Ejecute el siguiente comando para agregar permisos de ejecución para el script de inicio toa.modules:
sudo chmod +x /etc/sysconfig/modules/toa.modules
Si se actualiza el kernel, el módulo actual ya no coincidirá. Compilar el módulo de nuevo.
- Cree el archivo toa.modules en el directorio /etc/sysconfig/modules/. Este archivo contiene el script de carga del módulo.
- Instale el módulo en varios servidores.
Para cargar el módulo en el mismo SO, copie el archivo toa.ko en los servidores donde se va a cargar el módulo y luego realice las operaciones en 3.
Una vez que el módulo se ha cargado correctamente, las aplicaciones pueden obtener la dirección IP real contenida en la solicitud.
El SO del servidor debe tener la misma versión que el kernel.
- Verifique el módulo.
Después de que el módulo se haya instalado correctamente, la dirección de origen se puede obtener directamente. A continuación se proporciona un ejemplo de verificación.
Ejecute el siguiente comando para iniciar un servicio HTTP simple en el servidor backend donde está instalado Python:
python -m SimpleHTTPServer port
El valor del port debe ser el mismo que el puerto configurado para el servidor backend, y el valor predeterminado es 80.
Acceda a la dirección IP del balanceador de carga desde un cliente. Los registros de acceso en el servidor son los siguientes:
192.168.0.90 - - [06/Aug/2020 14:24:21] "GET / HTTP/1.1" 200 –
192.168.0.90 indica la dirección IP de origen del cliente que obtiene el servidor backend.
- En las siguientes operaciones, la versión del kernel de Linux es 2.6.32.
El complemento TOA soporta los sistemas operativos (imagen CentOS 6.8) con un núcleo de 2.6.32-xx. Realice los siguientes pasos para configurar el módulo:
- Obtenga el paquete de código fuente del núcleo Linux-2.6.32-220.23.1.el6.x86_64.rs.src.tar.gz que contiene el módulo en el siguiente enlace:
http://kb.linuxvirtualserver.org/images/3/34/Linux-2.6.32-220.23.1.el6.x86_64.rs.src.tar.gz
- Descomprima el paquete de código fuente del núcleo.
- Modifique parámetros de compilación.
- Abra la carpeta linux-2.6.32-220.23.1.el6.x86_64.rs.
- Edite el archivo net/toa/toa.h.
Cambie el valor de #define TCPOPT_TOA200 a #define TCPOPT_TOA254.
- En la página del shell, ejecute los siguientes comandos:
sed -i 's/CONFIG_IPV6=m/CONFIG_IPV6=y/g' .config
echo -e '\n# toa\nCONFIG_TOA=m' >> .config
Después de la configuración, el módulo IPv6 se compila en el núcleo. TOA se compila en un módulo separado y se puede iniciar y detener independientemente.
- Edita Makefile.
Puede añadir una descripción al final de EXTRAVERSION =. Esta descripción se mostrará en uname -r, por ejemplo, -toa.
- Ejecute el siguiente comando para compilar el paquete de software:
n indica el número de vCPUs. Por ejemplo, si hay cuatro vCPU, n debe establecerse en 4.
- Ejecute el siguiente comando para instalar el módulo:
La siguiente información aparecerá en la pantalla.
Figura 1 Instalación del módulo
- Ejecute el siguiente comando para instalar el kernel:
La siguiente información aparecerá en la pantalla.
Figura 2 Instalación del kernel
- Abra el archivo /boot/grub/grub.conf y configure el núcleo para que se inicie cuando se inicie el sistema.
- Cambie el kernel de inicio predeterminado del primer kernel al kernel cero cambiando default=1 a default=0.
- Agregue el parámetro nohz=off al final de la línea que contiene el kernel vmlinuz-2.6.32-toa. Si nohz no está deshabilitado, la utilización de CPU0 puede ser alta y sobrecargar el núcleo.
Figura 3 Archivo de configuración
- Guarde la modificación y salga. Reinicie el sistema operativo.
Durante el reinicio, el sistema cargará el kernel vmlinuz-2.6.32-toa.
- Después del reinicio, ejecute el siguiente comando para cargar el módulo:
Agregue el comando modprobe toa tanto al script de inicio como al script de monitoreo programado del sistema.
Figura 4 Agrega el comando modprobe toa
Después de cargar el módulo, consulte la información del núcleo.
Figura 5 Consulta del kernel
- Verifique el módulo.
Después de que el módulo se haya instalado correctamente, la dirección de origen se puede obtener directamente. A continuación se proporciona un ejemplo de verificación.
Ejecute el siguiente comando para iniciar un servicio HTTP simple en el servidor backend donde está instalado Python:
python -m SimpleHTTPServer port
El valor del port debe ser el mismo que el puerto configurado para el servidor backend, y el valor predeterminado es 80.
Acceda a la dirección IP del balanceador de carga desde un cliente. Los registros de acceso en el servidor son los siguientes:
192.168.0.90 - - [06/Aug/2020 14:24:21] "GET / HTTP/1.1" 200 –
192.168.0.90 indica la dirección IP de origen del cliente que obtiene el servidor backend.