Amazon MWAA에서 ‘psycopg2.OperationalError: SSL connection has been closed unexpectedly’ 오류를 해결하려면 어떻게 해야 합니까?
Amazon Managed Workflows for Apache Airflow(Amazon MWAA)에서 ‘psycopg2.OperationalError: SSL connection has been closed unexpectedly’ 오류를 해결하고 싶습니다.
간략한 설명
Directed Acyclic Graph(DAG)를 실행할 때 작업이 실패하면 작업 로그에 다음과 같은 오류 메시지가 표시될 수 있습니다.
- "psycopg2.OperationalError: SSL connection has been closed unexpectedly".
- "sqlalchemy.exc.OperationalError: (psycopg2.errors.ConnectionException) Timed-out waiting to acquire database connection".
위 오류 메시지는 워커에 과부하가 걸리거나 워커와 메타데이터 데이터베이스의 연결이 끊기거나 작업에서 닫힌 데이터베이스 연결을 재사용하려고 할 때 발생합니다.
이 문제를 해결하려면 다음 작업을 수행하십시오.
- CPU 및 메모리 사용률 축소
- 워커 구성 확인
- 지연 가능한 연산자 사용
- 최상위 코드 제거
- Apache Airflow 변수 사용 안 함
- DAG 단순화
- .airflowignore 파일을 만들어 Amazon Simple Storage Service(Amazon S3)의 기본 DAG 폴더에 추가
해결 방법
CPU 및 메모리 사용률 축소
과부하가 걸린 스케줄러, 워커 또는 웹 서버는 활성 데이터베이스 연결을 유지하지 못할 수 있습니다. Apache Airflow 메타데이터용 Amazon Relational Database Service(Amazon RDS)의 기본 유휴 연결 제한 시간은 30분입니다. 작업이나 프로세스가 이 기간보다 오랫동안 유휴 상태이거나 응답하지 않는 경우 데이터베이스에서 연결을 닫을 수 있습니다. 자세한 내용은 IdleClientTimeout을 참조하십시오.
CPU 및 메모리 사용률 지표를 확인하려면 다음 단계를 완료하십시오.
- Amazon CloudWatch 콘솔을 엽니다.
- AWS/MWAA 네임스페이스를 선택합니다.
- 모든 지표 탭에서 클러스터를 선택합니다.
- CPUUtilization을 선택한 다음, 모든 검색 결과를 그래프로 표시를 선택합니다.
- 성능 지표를 보려면 그래프로 표시된 지표 탭을 선택합니다.
- 1~3번 단계를 반복한 다음, MemoryUtilization을 선택합니다.
- 모든 검색 결과를 그래프로 표시를 선택한 다음, 그래프로 표시된 지표 탭을 선택하여 성능 지표를 확인합니다.
참고: 통계에는 최대값을 선택하고 기간에는 1분을 선택해야 합니다.
자세한 내용은 Amazon MWAA의 컨테이너, 대기열 및 데이터베이스 지표를 참조하십시오.
워커의 CPU 및 메모리 사용률이 지속적으로 90%를 초과하면 워커에 과부하가 걸린 것이거나 작업이 너무 많은 것입니다. CPU 및 메모리를 많이 사용하면 작업 상태 보고서, 메타데이터 데이터베이스 통신 및 새 작업에 문제가 발생할 수 있습니다.
워커의 CPU 및 메모리 사용률을 줄이려면 다음 작업을 수행하십시오.
- 워커에는 작업 만들기 초기 단계에서 더 많은 리소스가 필요하므로 작업 일정을 분산시키십시오.
- 필요한 작업만 가져오도록 가져오기 범위를 좁히고 필요하지 않은 전역 가져오기는 제거하십시오.
- Apache Airflow와 Amazon MWAA를 기본 도구로 사용하십시오. Amazon Elastic Kubernetes Service(Amazon EKS), Amazon Elastic Container Service(Amazon ECS) 또는 AWS Glue와 같은 서비스에서 나머지 작업을 스케줄링하십시오.
참고: 워커의 리소스는 제한되어 있으므로 워커에서 대량 데이터를 처리하지 마십시오. 대용량의 데이터를 처리하도록 설계된 서비스를 사용하십시오. - 작업 간에 전달되는 데이터를 줄이십시오. 가능하면 Amazon MWAA 워크로드의 과부하로 인해 다운스트림 데이터가 변경되지 않도록 데이터를 청크하십시오.
참고: 작업 간에 대용량의 데이터를 전달해야 하는 경우 데이터를 외부에 저장하고 필요에 따라 가져오십시오. 일부 연산자는 XComs를 사용합니다. 자세한 내용은 Apache Airflow 웹 사이트의 XComs를 참조하십시오. - 메타데이터 데이터베이스를 정기적으로 정리하십시오.
참고: CPU 사용률이 높거나 사용 가능한 메모리가 부족하면 쿼리가 실패하거나 지연 시간이 늘어나 SSL 예외 오류가 발생할 수 있습니다.
참고: CPU를 줄일 수 없다면 워커용 리소스가 더 많은 대규모 환경 클래스를 사용하거나 워커를 추가로 조정하십시오.
워커 구성 확인
참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.
각 Apache Airflow 버전에는 워커 구성의 기본값이 있습니다. 그러나 요구 사항에 따라 구성을 사용자 지정해야 할 수도 있습니다.
Apache Airflow 구성 설정
Amazon MWAA 콘솔, AWS CLI update-environment 명령 또는 UpdateEnvironment API 호출을 사용하여 다음 구성을 사용자 지정합니다.
- celery.worker_autoscale 구성은 워커에서 동시에 실행할 수 있는 최대 및 최소 작업 수를 제어합니다. 워커의 최대 데이터베이스 연결을 줄이십시오. 그런 다음, 동일한 워커 리소스를 사용하는 작업이 소량 있는 경우 각 작업에 더 많은 리소스를 할당하십시오.
- core.execute_tasks_new_python_interpreter를 True로 설정하여 각 작업의 새 Python 인터프리터를 만들고 데이터베이스 연결을 분리합니다.
참고: ‘psycopg2.OperationalError’ 오류가 다시 발생하는 경우에만 구성을 True로 설정합니다. - Amazon MWAA의 오토 스케일링 기능을 사용하여 최대 워커 수를 늘리십시오.
참고: max-workers 및 celery.worker_autoscale 값을 모두 워크로드에 맞게 설정합니다.
자세한 내용은 Amazon MWAA에서 Apache Airflow 구성 옵션 사용을 참조하십시오.
워커, 스케줄러 및 웹 서버 로그 확인
프로덕션 환경에서 상세 로깅은 불필요한 리소스를 사용하고 CPU 사용률을 높입니다. 워커, 스케줄러 및 웹 서버 로그를 WARNING 이상으로 설정하는 것이 좋습니다. 대부분의 경우 INFO 로그는 필요하지 않습니다.
지연 가능한 연산자 사용
작업이 외부 시스템이나 서비스에 작업을 제출하고 EMR 클러스터 만들기와 같은 이벤트가 발생할 때까지 기다릴 때는 지연 가능한 연산자를 사용하십시오. 지연 가능한 연산자는 워커 슬롯을 해제하고 워크로드 용량을 늘립니다. 자세한 내용은 Apache Airflow 웹 사이트에서 지연 가능한 연산자 및 트리거를 참조하십시오.
최상위 코드 제거
불필요한 리소스를 사용하는 최상위 코드를 스케줄러에서 제거합니다. 또한 사용 사례에 맞게 dag_processor.min_file_process_interval 구성을 조정하십시오. 자세한 내용은 Apache Airflow 웹 사이트의 min_file_process_interval 및 모범 사례를 참조하십시오.
Apache Airflow 변수 사용 안 함
최상위 Python 코드에는 Apache Airflow 변수를 사용하지 마십시오. 변수를 검색할 때는 데이터베이스를 쿼리해야 하며 쿼리는 각 구문 분석 루프에서 발생합니다.
참고: 변수를 사용해야 하는 경우 변수 캐싱을 사용하십시오. 자세한 내용은 Apache Airflow 웹 사이트의 use_cache를 참조하십시오.
DAG 단순화
DAG를 단순화하고, Amazon MWAA 환경의 특정 Python 버전에 맞게 DAG 코드를 테스트하십시오.
필요한 경우 동적 작업 매핑을 사용합니다. 자세한 내용은 Apache Airflow 웹 사이트의 동적 작업 매핑을 참조하십시오.
.airflowignore 파일을 만들어 Amazon S3의 기본 DAG 폴더에 추가
Apache Airflow 스케줄러는 Amazon S3의 DAG 폴더 콘텐츠를 각 워커에 동기화합니다. 또한 스케줄러는 Amazon S3의 파일을 주기적으로 구문 분석하여 UI를 업데이트합니다. 스케줄러는 구문 분석 시 파일을 실행하고 DAG를 생성합니다.
.airflowignore 파일을 사용하여 Amazon S3의 DAG 폴더에 있는 폴더와 파일을 지정하십시오. 정규식과 glob 패턴을 사용해야 합니다. 구문 분석 프로세스 중에는 DAG가 아닌 파일을 무시하여 스케줄러의 로드를 줄이고 DAG 효율성을 개선하십시오. 자세한 내용은 Apache Airflow 웹 사이트의 .airflowignore를 참조하십시오.
- 언어
- 한국어

관련 콘텐츠
질문됨 2년 전