728x90
[Airflow] 멀티 클러스터 환경 구성
[구성]
1. airflow-ec2-1 (Master)
- metadata database(rds-mysql)
- airflow webserver
- airflow worker
2. airflow-ec2-2 (Worker)
- airflow worker
1. Master, Worker 인스턴스 생성 후 airflow 설치
: airflow 설치 참고하여 설치
2. CeleryExecutor
- 여러개의 Worker로 작업하기 위해 필요한 Executor
- Task를 메시지 브로커에 전달하고, Celery Worker가 Task를 가져가서 실행하는 방식
- Worker 수를 확장 할 수 있음
2. Master Node 환경 설정
- 사전 작업
1. docker 설치
: airflow 공식 document에서 제공하는 docker-compose.yaml 파일을 받아 master node 환경 설정
아래 링크에서 OS에 맞는 Docker 설치
[CentOS]
https://docs.docker.com/engine/install/centos/
[Ubuntu]
https://docs.docker.com/engine/install/ubuntu/
2. DB 변경
: 기본 DB인 SQLite는 병렬 처리가 불가능 함, 따라서 MySQL이나 PostgreSQL 등으로 DB 변경이 필요
- Docker-Compose 설치
Master Node에서 필요로하는 요소들이 많은데, Docker-compose를 통해 쉽게 설치가 가능함
https://airflow.apache.org/docs/apache-airflow/stable/howto/docker-compose/index.html
airflow home에서 docker-compose.yaml 파일 받아오기
cd airflow
curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.5.3/docker-compose.yaml'
- Docker-Compose.yaml 커스터마이징
AIRFLOW__CORE__EXECUTOR | 어떤 Executor를 사용할 지 |
AIRFLOW__DATABASE__SQL_ALCHEMY_CONN | Airflow에서 DB로 사용할 옵션 정보 |
AIRFLOW__CORE__SQL_ALCHEMY_CONN | Airflow가 해당 정보의 DB를 인지 |
AIRFLOW__CELERY__RESULT_BACKEND | Celery Worker가 Aiflow Metastore와 통신하기 위해 설정 |
AIRFLOW__CELERY__BROKER_URL | Broker에 대한 Airflow 설정 정보, 스케줄러가 큐에 메시지를 보낼 수 있음 |
vi docker-compose.yaml
아래와 같이 수정
[DB]
services:
mysql:
container_name: mysql
image: mysql:5.7
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_USER: airflow
MYSQL_PASSWORD: airflow
MYSQL_DATABASE: airflow
[Redis]
병렬 처리를 위한 Queue를 대신하기 위해 Redis를 활용
redis:
image: redis:latest
ports:
- 6379:6379
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 5s
timeout: 30s
retries: 50
restart: always
- docker-compose.yaml 파일이 있는 디렉토리에서 폴더 생성
mkdir dags
mkdir logs
mkdir plugins
- 명령어 실행
docker-compose up airflow-init
docker-compose up
4. Worker Node 환경 설정
- Master node의 아이피를 입력해줌
FROM ubuntu:latest
# install airflow
ENV AIRFLOW_HOME="/root/airflow"
ENV AIRFLOW__WORKER__NAME="worker_node"
ENV AIRFLOW__MASTER__IP="HOST_IP"
ENV AIRFLOW__POSTGRESQL__HOST=${AIRFLOW__MASTER__IP}:5432
ENV AIRFLOW__REDIS__HOST=${AIRFLOW__MASTER__IP}:6379
ENV AIRFLOW__CORE__EXECUTOR="CeleryExecutor"
ENV AIRFLOW__DATABASE__SQL_ALCHEMY_CONN="postgresql+psycopg2://airflow:airflow@${AIRFLOW__POSTGRESQL__HOST}/airflow"
ENV AIRFLOW__CORE__SQL_ALCHEMY_CONN="postgresql+psycopg2://airflow:airflow@${AIRFLOW__POSTGRESQL__HOST}/airflow"
ENV AIRFLOW__CELERY__RESULT_BACKEND="db+postgresql://airflow:airflow@${AIRFLOW__POSTGRESQL__HOST}/airflow"
ENV AIRFLOW__CELERY__BROKER_URL="redis://:@${AIRFLOW__REDIS__HOST}/0"
ENV AIRFLOW__LOGGING__BASE_LOG_FOLDER="${AIRFLOW_HOME}/log"
ENV AIRFLOW__SCHEDULER__CHILD_PROCESS_LOG_DIRECTORY="${AIRFLOW_HOME}/log/scheduler"
ENV AIRFLOW__LOGGING__DAG_PROCESSOR_MANAGER_LOG_LOCATION="${AIRFLOW_HOME}/log/dag_processor_manager/dag_processor_manager.log"
ENV AIRFLOW__CORE__HOSTNAME_CALLABLE="airflow.utils.net.get_host_ip_address"
ENV AIRFLOW__CORE__FERNET_KEY="FERNET_KEY_INPUT"
ENV AIRFLOW__WEBSERVER__SECRET_KEY="HOST_SECRET_KEY"
ENV AIRFLOW__CORE__DAGS_ARE_PAUSED_AT_CREATION="true"
ENV AIRFLOW__CORE__LOAD_EXAMPLES="false"
ENV AIRFLOW__API__AUTH_BACKENDS="airflow.api.auth.backend.basic_auth"
ENV _PIP_ADDITIONAL_REQUIREMENTS="${_PIP_ADDITIONAL_REQUIREMENTS:-apache-airflow-providers-google}"
RUN pip install apache-airflow[celery]==2.3.3
RUN pip install psycopg2-binary
RUN pip install Redis
RUN airflow db init
RUN mkdir ./airflow/dags
RUN mkdir ./airflow/plugins
RUN echo ${SDA_TOKEN} > /etc/moreh/token
5. 서버 확인
localhost:5555 (flower)로 접속하면 WorkerNode와 MasterNode가 연결 된 것을 확인 가능
참조
반응형
'💾 Data > Airflow' 카테고리의 다른 글
[Airflow] airflow decorators (0) | 2023.05.18 |
---|---|
[Airflow] Variables (0) | 2023.05.11 |
[Airflow] Params (0) | 2023.04.29 |
[Airflow] Xcom (0) | 2023.04.20 |
[Airflow] 조건에 따라 분기 (Branch) (0) | 2023.04.19 |