Skip to content

OpenSearch

Jaewon Lee edited this page Sep 4, 2024 · 20 revisions

OpenSearch 공식 링크

OpenSearch JAVA USER_GUIDE 공식 링크

OpenSearch Docker Image 공식 링크, OpenSearch Docker Image Version 링크

OpenSearch docker-compose 공식 링크

Note

AWS OpenSearch Service를 Docker Image로 통해 local 환경에서 구현

보안 플러그가 비활성화 되어 있습니다. Product 환경에 적용 x

OpenSearch 2.15 이미지를 기본으로 사용하며, Nori 한국어 형태소 분석기 플러그인을 자동으로 설치합니다.

개요

이 가이드는 Docker와 Docker Compose를 사용하여 OpenSearch 로컬 개발 환경을 설정하는 방법을 설명합니다. 이 설정은 OpenSearch와 OpenSearch Dashboards를 포함하며, 다양한 환경 변수와 플러그인 설정이 포함되어 있습니다. 또한 초기화 스크립트를 통해 데이터 인덱싱을 자동화합니다.

Local 구현?

  • 비용 절감: 실제 OpenSearch 클라우드 서비스는 높은 비용이 발생합니다. 테스트 및 개발 과정에서는 로컬에서 구현하면 비용을 절감할수 있습니다.
  • 환경 일관성: OpenSearch image를 활용하면 다른 개발자와 동일한 환경을 공유하기 좋습니다.
  • 단일 노드 클러스트 활용: 간편하게 테스트 환경을 구축할 수 있습니다.
  • 빠른 피드백, 네트워크 지연 x: 변경 사항을 즉시 확인할 수 있고, 네트워크 지연 없이 빠르게 작업이 가능합니다.

디렉토리 구조

현재 프로젝트는 다음과 같은 구조로 설계되어 있습니다.

project-root/
├── docker-compose.dev.yml
├── docker/
│   └── Dockerfile-opensearch
└── opensearch-init/
    ├── init-opensearch.sh
    ├── setup-opensearch.sh
    └── webtoon-mapping.json

주요 설정 설명

flowchart LR
    A("fa:fa-play 시작")
    B("fab:fa-docker Docker<br>Compose")
    C("fa:fa-database<br>OpenSearch DB")
    D("fa:fa-chart-line<br>OpenSearch<br>Dashboards")
    E{"fa:fa-question<br>인덱스<br>존재?"}
    F["fa:fa-plus-square 인덱스 생성"]
    G["fa:fa-cloud-download-alt 데이터 가져오기"]
    H["fa:fa-file-import 인덱싱"]
    I["fa:fa-fast-forward 초기화 건너뛰기"]
    K("fa:fa-flag-checkered 완료")

    A --> B
    B --> C & D
    C --> E
    E -->|No| F
    F --> G
    G --> H
    E -->|Yes| I
    H & I --> K

    subgraph 데이터처리 [" "]
    F
    G
    H
    end

    %% 노드 스타일링
    classDef default fill:#f9f9f9,stroke:#333,stroke-width:2px
    classDef highlight fill:#e1f5fe,stroke:#0288d1,stroke-width:3px
    classDef process fill:#e8f5e9,stroke:#4caf50,stroke-width:2px
    classDef decision fill:#fff3e0,stroke:#ff9800,stroke-width:2px

    class A,K highlight
    class B,C,D process
    class E decision
    class F,G,H,I process

    %% 노드별 스타일
    style A font-weight:bold
    style B font-weight:bold,fill:#dce9f1
    style C font-weight:bold,fill:#fff0f5
    style D font-weight:bold,fill:#f0f8ff
    style E font-weight:bold
    style F fill:#e6fffa
    style G fill:#e6f3ff
    style H fill:#fff5e6
    style I fill:#f5e6ff
    style K font-weight:bold
    style 데이터처리 fill:none,stroke:none

    %% 링크 스타일
    linkStyle default stroke:#666,stroke-width:2px,fill:none

    %% 노드에 링크 추가 (예시용 가상 링크)
    click B "<a target='_blank' href='https://docs.docker.com/compose/'>Docker Compose Docs</a>"
    click C "<a target='_blank' href='https://opensearch.org/docs/latest/'>OpenSearch Docs</a>"
    click D "<a target='_blank' href='https://opensearch.org/docs/latest/dashboards/index/'>OpenSearch Dashboards Docs</a>"
Loading
  • docker-compose.dev.yml: - opensearch-node1 서비스는 OpenSearch 인스턴스를 설정합니다. 다양한 환경 변수를 통해 메모리 설정, 노드 이름, 클러스터 이름 등을 지정할 수 있습니다.
    • opensearch-dashboards 서비스는 OpenSearch Dashboards를 설정합니다. 이는 OpenSearch 데이터를 시각화하고 관리하는 데 사용됩니다.
    • volumesnetworks를 사용하여 데이터 지속성과 네트워크 연결을 관리합니다.

  • Dockerfile-opensearch:
    • OpenSearch 2.15.0 이미지를 기본으로 사용하며, Nori 한국어 형태소 분석기 플러그인을 설치합니다.
    • 초기화 스크립트를 컨테이너에 복사하고 실행 권한을 설정합니다.

  • init-opensearch.sh:
    • OpenSearch가 준비될 때까지 대기한 후, 인덱스가 없으면 새로운 인덱스를 생성하고 매핑 설정을 적용합니다.
    • setup-opensearch.sh 스크립트를 실행하여 데이터를 인덱싱합니다.

  • setup-opensearch.sh:
    • 외부 API에서 웹툰 데이터를 가져와 OpenSearch인덱싱합니다.

  • webtoon-mapping.json:
    • 인덱스 설정 및 매핑을 정의하여 OpenSearch가 데이터를 올바르게 분석하고 저장할 수 있도록 합니다.

적용 방법

docker-compose -f docker-compose.dev.yml up --build 

(or)

docker-compose -f docker-compose.dev.yml up -d

  • bash 스크립트 실행이 시작되면 다음과 같은 로그를 확인할 수 있다. image

메모리 최적화

  • 적절한 JVM 힙 메모리를 조정하여 최적화합니다.
  • OPENSEARCH_JAVA_OPTS=-Xms4g -Xmx4g # JVM 힙 메모리를 최대 4GB로 설정

기존 8GB 설정 시 image

4GB 설정 시 image

프로젝트 디렉토리 구조 및 파일 링크

프로젝트의 전체 디렉토리 구조는 다음 링크에서 확인할 수 있습니다: 프로젝트 디렉토리 구조

주요 파일 링크