Echo system/Airflow

Airflow standalone -> webserver, scheduler 전환

박쿠리 2025. 4. 20. 21:19

주의사항

airflow info 결과로 현재 사용하는 경로 (AIRFLOW_HOME, sql_alchemy_conn, logs_folder) 확인
which airflow 로 실행 파일 경로 확인 → .service의 ExecStart와 동일하게 맞출 것
/opt/airflow 외에 .db, logs, dags가 다른 경로에 흩어져 있는지 확인
executor 확인. LocalExecutor 가 운영에 적합. airflow info | grep executor (서버 1대라 dag 및 동시실행 개수 제한 필수)
sequentialExecutor -> SQLite 만 사용 가능 (?)
환경변수 경로 정리

 

Step 0: 운영 중인 Dag 값 변경 - 운영 중단됐을 때 대비

airflow.cfg
[core]
parallelism = 8 # 전체 시스템에서 동시에 실행 가능한 태스크 수

dag

with DAG(
    dag_id='my_dag',
    schedule_interval='@hourly',
    start_date=datetime(2025, 2, 1),
    catchup=True, 
    max_active_runs=1,        # 논리 시간 단위로 하나씩만 실행
    concurrency=1,            # 동시에 태스크 하나만 실행 (optional)
    ...
) as dag:
    ...




Step 1: 환경 설정파일 만들기 (공통 설정)

/etc/sysconfig/airflow (or /etc/default/airflow)

AIRFLOW_HOME=/opt/airflow AIRFLOW__CORE__DAGS_FOLDER=/opt/airflow/dags 
AIRFLOW__LOGGING__BASE_LOG_FOLDER=/opt/airflow/logs 
AIRFLOW__DATABASE__SQL_ALCHEMY_CONN=postgresql+psycopg2://airflow:비번@localhost:5432/airflow

 

 

Step 2: systemd 서비스 유닛 파일 만들기

systemctl list-units | grep postgres 확인 후 after 에 작성

Environment=가 EnvironmentFile보다 우선 적용됨

/etc/systemd/system/airflow-webserver.service

[Unit]
Description=Airflow Webserver
After=syslog.target postgresql-16.service #해당 서비스가 기동 전에 반드시 떠 있어야할 서비스 지정 (DB, syslog 등)

[Service]
User=gpadmin
Group=gpadmin
EnvironmentFile=/etc/sysconfig/airflow #환경변수 읽어올 파일 경로
Environment=AIRFLOW_HOME=/opt/airflow
Environment=AIRFLOW__DATABASE__SQL_ALCHEMY_CONN=postgresql+psycopg2://airflow:pw@localhost:5432/airflow
Environment=AIRFLOW__LOGGING__BASE_LOG_FOLDER=/home/gpadmin/airflow/logs
WorkingDirectory=/opt/airflow #명령어 실행 시 기본 경로
ExecStart=/usr/local/bin/airflow webserver #실제로 실행할 명령어(프로세스) #which airflow
Restart=on-failure

[Install]
WantedBy=multi-user.target #서비스 활성화 대상 runlevel(타깃)

 


/etc/systemd/system/airflow-scheduler.service

[Unit]
Description=Airflow Scheduler
After=syslog.target postgresql-16.service

[Service]
User=gpadmin
Group=gpadmin
EnvironmentFile=/etc/sysconfig/airflow
Environment=AIRFLOW_HOME=/opt/airflow
Environment=AIRFLOW__DATABASE__SQL_ALCHEMY_CONN=postgresql+psycopg2://airflow:pw@localhost:5432/airflow
Environment=AIRFLOW__LOGGING__BASE_LOG_FOLDER=/home/gpadmin/airflow/logs
WorkingDirectory=/opt/airflow
ExecStart=/usr/local/bin/airflow scheduler
Restart=on-failure

[Install]
WantedBy=multi-user.target

Step 3: 서비스 등록 & 실행

sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl enable airflow-webserver
sudo systemctl enable airflow-scheduler
sudo systemctl start airflow-webserver
sudo systemctl start airflow-scheduler

Step 4: 확인

sudo systemctl status airflow-webserver
sudo systemctl status airflow-scheduler
# 접속 확인 curl http://localhost:8080

기타 중요 포인트

항목내용
config 기준 경로 /opt/airflow/airflow.cfg ← AIRFLOW_HOME 기준으로 자동 적용
DAG 위치 /opt/airflow/dags (env에서 지정)
로그 위치 /opt/airflow/logs (env에서 지정)
DB 기존 PostgreSQL 연결 유지됨 (env로 명확히 설정하면 standalone과 동일하게 작동)

이전 standalone 중단

pkill -f airflow # 또는 systemctl disable airflow.service

반응형

'Echo system > Airflow' 카테고리의 다른 글

airflow 설정  (0) 2025.04.20
Airflow configuration  (0) 2025.04.20
dag parsing & write_dag  (0) 2025.04.18
Airflow received sigterm. terminating subprocesses  (1) 2025.01.18
Airflow - Custom provider 생성  (1) 2024.10.09