OpenMetadata 컨테이너 배포 최적화: 리소스 할당 및 성능 튜닝 가이드

시스템 요구사항 및 사전 점검

OpenMetadata를 안정적으로 운영하기 위해서는 배포 전 하드웨어 및 소프트웨어 환경이 적절히 구성되었는지 확인해야 합니다. 최소 권장 사양과 필수 도구는 다음과 같습니다.

  • 엔진 버전: Docker Engine 20.10 이상, Docker Compose 2.0 이상
  • 최소 리소스: 2 vCPU, 4GB RAM (개발 환경 기준)
  • 권장 리소스: 4 vCPU, 8GB RAM 이상 (운영 환경 기준)
  • 네트워크 포트: 8585(UI), 8080(API), 9200(검색 엔진)

환경 설정의 적합성을 판단하기 위해 다음 검증 스크립트를 실행할 수 있습니다.

# 환경 구성 유효성 검사
sh scripts/check_prerequisites.sh

Docker Compose 기반 배포 전략

OpenMetadata는 데이터 저장소 선택에 따라 다양한 배포 구성을 지원합니다. 주요 설정 파일은 프로젝트의 docker 디렉토리 내에 위치합니다.

  • 표준 스택: docker/development/docker-compose.yml (기본 MySQL 사용)
  • PostgreSQL 스택: docker/development/docker-compose-postgres.yml

운영 환경의 특성에 따라 실행 스크립트의 옵션을 조정하여 배포할 수 있습니다.

# PostgreSQL 환경에서 백엔드만 실행 (UI 제외)
bash docker/run_local_docker.sh -d postgresql -m no-ui

# 도움말 확인을 통한 옵션 탐색
bash docker/run_local_docker.sh -h

리소스 제한 및 환경 설정 최적화

컨테이너의 안정성을 확보하기 위해 CPU와 메모리 제한(Limits)을 명확히 설정하는 것이 중요합니다. 다음은 개발 환경을 위한 서비스 정의 예시입니다.

# openmetadata-server 설정 예시
services:
  om-app-server:
    image: openmetadata/server:latest
    environment:
      - SERVER_THREAD_MAX=200
      - SERVER_THREAD_MIN=120
    deploy:
      resources:
        limits:
          cpus: '2.0'
          memory: 4096M
        reservations:
          cpus: '1.0'
          memory: 2048M

운영 환경으로 확장할 경우, 각 컴포넌트별 권장 설정 값은 다음과 같습니다.

컴포넌트 CPU 제한 메모리 제한 주요 튜닝 파라미터
API Server 4 Core 8GB SERVER_MAX_THREADS=400
Search Engine 2 Core 4GB ES_JAVA_OPTS="-Xms2g -Xmx2g"
Database 2 Core 4GB max_connections=150

성능 극대화를 위한 세부 튜닝

1. 데이터베이스 커넥션 풀링

API 서버와 데이터베이스 간의 통신 효율을 높이기 위해 커넥션 풀 설정을 openmetadata.yaml 파일에서 조정합니다.

database:
  driverClass: org.postgresql.Driver
  maxSize: 64              # 최대 연결 개수 확장
  minSize: 16              # 유휴 상태 유지 연결
  checkConnectionOnBorrow: true
  idleWaitTime: 10 minutes # 유휴 연결 유지 시간

2. 검색 엔진(Elasticsearch) 최적화

메타데이터 검색 성능은 검색 엔진의 힙 메모리와 버퍼 설정에 의존합니다. Docker 구성 파일에서 다음 환경 변수를 적용합니다.

# Elasticsearch 성능 튜닝
elasticsearch:
  environment:
    - "indices.memory.index_buffer_size=25%"
    - "thread_pool.search.queue_size=2000"
    - "ES_JAVA_OPTS=-Xms2g -Xmx2g"

3. Java 가상 스레드 활용 (JDK 19 이상)

최신 OpenMetadata 버전은 가상 스레드를 지원하여 동시 요청 처리량을 획기적으로 개선할 수 있습니다.

# openmetadata.yaml 설정
server:
  enableVirtualThreads: true
  maxThreads: 1000
  applicationContextPath: /api

장애 조치 및 모니터링

메모리 부족(OOM) 문제 해결

컨테이너가 예기치 않게 종료되는 경우 로그를 통해 메모리 할당 상태를 확인해야 합니다.

# 컨테이너 로그에서 OOM 확인
docker logs openmetadata_server | grep -i "Memory"

메모리 부족 시 docker-compose.ymlmemory 제한 수치를 상향 조정하고 컨테이너를 재시작합니다.

데이터 동기화 지연 처리

메타데이터 수집 속도가 느린 경우 Airflow 워커의 병렬 처리 능력을 높여야 합니다.

# airflow-worker 환경 변수 수정
environment:
  - AIRFLOW__CORE__PARALLELISM=12
  - AIRFLOW__CORE__MAX_ACTIVE_RUNS_PER_DAG=6

성공적인 배포를 위해서는 정기적으로 로그 로테이션 설정을 확인하고, Prometheus와 같은 모니터링 도구를 연동하여 시스템 자원 사용률을 추적하는 것을 권장합니다.

태그: OpenMetadata docker-compose Container-Optimization Database-Tuning elasticsearch

7월 31일 18:53에 게시됨