-
Notifications
You must be signed in to change notification settings - Fork 2
OpenSearch
Jaewon Lee edited this page Sep 6, 2024
·
20 revisions
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를 포함하며, 다양한 환경 변수와 플러그인 설정이 포함되어 있습니다. 또한 초기화 스크립트를 통해 데이터 인덱싱을 자동화합니다.
-
비용 절감
: 실제 OpenSearch 클라우드 서비스는 높은 비용이 발생합니다. 테스트 및 개발 과정에서는 로컬에서 구현하면 비용을 절감할수 있습니다. -
환경 일관성
: OpenSearch image를 활용하면 다른 개발자와 동일한 환경을 공유하기 좋습니다. -
단일 노드 클러스트 활용
: 간편하게 테스트 환경을 구축할 수 있습니다. -
빠른 피드백, 네트워크 지연 x
: 변경 사항을 즉시 확인할 수 있고, 네트워크 지연 없이 빠르게 작업이 가능합니다.
현재 프로젝트는 다음과 같은 구조로 설계되어 있습니다.
project-root/
├── docker-compose.dev.yml
├── docker/
│ └── Dockerfile-opensearch
└── opensearch-init/
├── init-opensearch.sh
├── setup-opensearch.sh
└── webtoon-mapping.json
%%{init: {'theme': 'base', 'themeVariables': { 'fontSize': '30px', 'fontFamily': 'Arial' }}}%%
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>"
-
docker-compose.dev.yml
: -opensearch-node1
서비스는OpenSearch
인스턴스를 설정합니다. 다양한 환경 변수를 통해 메모리 설정, 노드 이름, 클러스터 이름 등을 지정할 수 있습니다.-
opensearch-dashboards
서비스는OpenSearch Dashboards
를 설정합니다. 이는OpenSearch
데이터를 시각화하고 관리하는 데 사용됩니다. -
volumes
와networks
를 사용하여 데이터 지속성과 네트워크 연결을 관리합니다.
-
-
Dockerfile-opensearch
:- OpenSearch 2.15.0 이미지를 기본으로 사용하며, Nori 한국어 형태소 분석기 플러그인을 설치합니다.
- 초기화 스크립트를 컨테이너에 복사하고 실행 권한을 설정합니다.
-
init-opensearch.sh
:-
OpenSearch
가 준비될 때까지 대기한 후, 인덱스가 없으면 새로운 인덱스를 생성하고 매핑 설정을 적용합니다. -
setup-opensearch.sh
스크립트를 실행하여 데이터를 인덱싱합니다.
-
-
setup-opensearch.sh
:- 외부 API에서 웹툰 데이터를 가져와
OpenSearch
에인덱싱
합니다.
- 외부 API에서 웹툰 데이터를 가져와
-
webtoon-mapping.json
:- 인덱스 설정 및 매핑을 정의하여
OpenSearch
가 데이터를 올바르게 분석하고 저장할 수 있도록 합니다.
- 인덱스 설정 및 매핑을 정의하여
docker-compose -f docker-compose.dev.yml up --build
(or)
docker-compose -f docker-compose.dev.yml up -d
- bash 스크립트 실행이 시작되면 다음과 같은 로그를 확인할 수 있다.
- 적절한 JVM 힙 메모리를 조정하여 최적화합니다.
- OPENSEARCH_JAVA_OPTS=-Xms4g -Xmx4g # JVM 힙 메모리를 최대 4GB로 설정
기존 8GB 설정 시
4GB 설정 시
프로젝트의 전체 디렉토리 구조는 다음 링크에서 확인할 수 있습니다: 프로젝트 디렉토리 구조
- 🤝 Collaboration
- 💬 Git Commit Convention
- 🌿 Branching Strategy
- 🔀 Pull Request (PR) Guidelines
- 🐋 Docker
- 🎡 Kubernetes
- 🔎 Metrics
- 💊 USE/RED
- 📝 Metrics Design
- 🔥 Prometheus
- 🦖 Grafana
- ⚒️ 실제 구현