Skip to content
SON BLOG
Go back

단일 서버에서 OpenSearch 최적 배포 — 노드 역할 분리와 자원 격리

Edit page

OpenSearch 클러스터 환경에서 ML(머신러닝) 기반 벡터 임베딩 기능을 안정적으로 제공하려면 노드 역할 분리자원 격리 설정이 필수다.

본 글에서는 Docker Compose 기반으로 이를 구현하는 최적화된 예시와 함께, 공식 문서 및 실무 팁을 상세히 정리한다.

1. 사전 준비

2. Docker Compose 예시

services:
  opensearch-data:
    image: opensearchproject/opensearch:latest
    container_name: opensearch-data
    environment:
      - cluster.name=opensearch-cluster
      - node.name=opensearch-data
      - node.roles=data,ingest,remote_cluster_client
      - bootstrap.memory_lock=true
      - OPENSEARCH_JAVA_OPTS=-Xms4g -Xmx4g
      - discovery.seed_hosts=opensearch-data,opensearch-ml
      - cluster.initial_cluster_manager_nodes=opensearch-data
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nofile:
        soft: 65536
        hard: 65536
    deploy:
      resources:
        limits:
          memory: 6g
          cpus: "2.0"
    ports:
      - 9200:9200
      - 9600:9600
    networks:
      - opensearch-net

  opensearch-ml:
    image: opensearchproject/opensearch:latest
    container_name: opensearch-ml
    environment:
      - cluster.name=opensearch-cluster
      - node.name=opensearch-ml
      - node.roles=ml,remote_cluster_client
      - bootstrap.memory_lock=true
      - OPENSEARCH_JAVA_OPTS=-Xms2g -Xmx2g
      - discovery.seed_hosts=opensearch-data,opensearch-ml
      - cluster.initial_cluster_manager_nodes=opensearch-data
      - plugins.ml_commons.only_run_on_ml_node=true
      - plugins.ml_commons.task_dispatch_policy=least_load
      - plugins.ml_commons.max_ml_task_per_node=2
      - plugins.ml_commons.native_memory_threshold=90
      - plugins.ml_commons.jvm_heap_memory_threshold=85
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nofile:
        soft: 65536
        hard: 65536
    deploy:
      resources:
        limits:
          memory: 4g
          cpus: "1.0"
    networks:
      - opensearch-net

  opensearch-dashboards:
    image: opensearchproject/opensearch-dashboards:latest
    container_name: opensearch-dashboards
    depends_on:
      - opensearch-data
    environment:
      - OPENSEARCH_HOSTS=["https://opensearch-data:9200"]
      - OPENSEARCH_INITIAL_ADMIN_PASSWORD=ChangeMeStrong
    ports:
      - 5601:5601
    networks:
      - opensearch-net

volumes:
  opensearch-data-vol:

networks:
  opensearch-net:
    driver: bridge

3. 주요 설정 분석

3.1 역할 분리 및 JVM 힙 설정

3.2 자원 격리 설정

3.3 ML Commons 설정

3.4 퍼포먼스 분석

4. 실행 및 확인

  1. 커널 설정 확인:

    sudo sysctl -w vm.max_map_count=262144
    sudo swapoff -a
  2. 클러스터 실행:

    docker compose up -d
  3. 노드 상태 검증:

    • curl localhost:9200/_cat/nodes?v 로 데이터·ML 노드 분리 확인

    • curl localhost:9200/_cluster/settings?include_defaults=true 로 ML 설정 확인

  4. ML 태스크 테스트:
    예: /_plugins/_ml/_predict 호출 시 ML 노드 실행 확인 가능


5. 운영 환경 권장 사항

구성 상황권장 방식
테스트/개발위 구성으로 단일 서버 멀티 노드 가능
소규모 프로덕션같은 서버라도 컨테이너 리소스 제한 필요
고성능/대규모 경우ML 노드는 물리 서버 또는 별 VM 분리

6. 요약


Edit page
Share this post:

Previous Post
OpenSearch 설치 및 빌드를 위한 서버 자원 확인 절차
Next Post
OpenSearch 성능 벤치마크와 TPS별 서버 구성 가이드