es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Ejecuta Airflow HA Scheduler como servicios de systemd.

Quiero ejecutar 2 planificadores de tareas de Airflow, para lo cual creé un archivo de servicio systemd que termina con @.service.
Ahora, si intento ejecutar el servicio de la siguiente manera:

sudo systemctl start airflow-scheduler@{1..2}

Solo uno de los planificadores logra ejecutarse, mientras que el otro falla y muestra el siguiente error:

sqlalchemy.exc.DatabaseError: (mysql.connector.errors.DatabaseError) 3572 (HY000): Statement aborted because lock(s) could not be acquired immediately and NOWAIT is set.

Mi archivo de servicio se ve así:

[Unit]
Description=Airflow scheduler daemon
After=network.target postgresql.service mysql.service redis.service rabbitmq-server.service
Wants=postgresql.service mysql.service redis.service rabbitmq-server.service

[Service]
EnvironmentFile=/etc/sysconfig/airflow
User=myuser
Group=myuser
Type=simple
ExecStart=/usr/local/bin/airflow scheduler
Restart=always
RestartSec=5s

[Install]
WantedBy=multi-user.target
Tags:  , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error sugiere que hay un problema de adquisición de bloqueo con la base de datos MySQL a la que acceden ambos programadores de tareas de Airflow. Esto puede ocurrir cuando hay solicitudes conflictivas para el mismo recurso al mismo tiempo desde múltiples fuentes.

    Una solución a este problema es configurar los programadores de tareas para que utilicen bases de datos separadas o esquemas de bases de datos (dependiendo del tipo de base de datos) para evitar problemas de acceso concurrente. Puede hacer esto modificando los archivos de configuración de ambos programadores de tareas de Airflow para que utilicen bases de datos o esquemas de bases de datos separados.

    Otra opción es asegurarse de que los programadores de tareas se ejecuten en máquinas o nodos separados, utilizando técnicas de equilibrio de carga o de agrupación, para evitar problemas de acceso concurrente.

    Además, puede modificar el archivo de servicio agregando un valor LimitNOFILE para aumentar el número máximo de archivos abiertos para el proceso y permitir más conexiones simultáneas a la base de datos. Puede agregarlo en la sección [Service] de la siguiente manera:

    LimitNOFILE=65536
    

    Esta opción garantizará que haya suficientes recursos disponibles para que ambos programadores de tareas se ejecuten simultáneamente, lo que puede ayudar a evitar errores de adquisición de bloqueo al iniciar ambos programadores de tareas.

    Después de modificar el archivo de servicio, recargue systemd:

    sudo systemctl daemon-reload
    

    Luego intente iniciar los servicios nuevamente:

    sudo systemctl start airflow-scheduler@{1..2}
    

    Si el error persiste, es posible que deba considerar otras opciones, como aumentar los recursos en la máquina o configurar una base de datos separada para cada programador de tareas.

Comments are closed.