기본 콘텐츠로 건너뛰기

주소로 고객 검색 서비스 구축하기(feat. Elastic Search v 8.6.2, MacOS) - 5탄

 

주소로 고객 검색 서비스 구축하기(feat. Elastic Search,  MacOS) - 5탄

안녕하세요. 클스 입니다.


* 목표

- Elastic Search & Kibana 설치 (1탄) - 보기

- Elastic Search Client for Python 설치 및 프로그램 (2탄) - 보기

- 주소 데이터 검색 구조 설계 및 bulk 생성/업로드 (3탄) - 보기

- 주소 데이터 검색 구조 설계 및 bulk 생성/업로드 (3.5탄)  - Polars vs Pandas

- 대량으로 검색 하기 (4탄) - 보기

- 데이터 백업 및 복구 <유지관리> (5탄)   - 현재글

지난 4탄까지 데이터 구조를 설계하고 벌크 업로드, 검색, 그리고 고객key와 매핑을 하였습니다. 

이번에는 데이터양에 따른 적절한 elastic search의 메모리 용량 설정, 유지보수를 위핸 백업/복구, 

데이터 관리 등을 다뤄볼 예정입니다.

1. elasticsearch 메모리 용량 산정



Elasticsearch의 용량 산정은 몇 가지 요인에 따라 달라집니다.

데이터의 양: Elasticsearch는 대용량 데이터를 처리하는 데 최적화되어 있으므로, 데이터의 양은 용량 산정에 가장 큰 영향을 미칩니다. 데이터의 양이 많을수록 더 많은 저장 공간이 필요합니다.


색인된 데이터의 구조: Elasticsearch는 각 필드의 값을 색인하여 검색할 수 있습니다. 필드의 수와 값의 길이에 따라 색인 크기가 달라질 수 있습니다.


검색 및 집계 요청의 복잡성: Elasticsearch는 검색 및 집계 요청을 처리할 때 추가적인 리소스를 필요로 합니다. 검색 요청이 복잡하고 집계 결과가 많을수록 더 많은 용량이 필요합니다.


클러스터 구성: Elasticsearch는 여러 노드로 구성된 클러스터로 동작할 수 있습니다. 클러스터에 사용할 노드의 수, 각 노드의 스펙 및 리플리카 설정에 따라 용량 산정이 달라질 수 있습니다.

따라서 Elasticsearch의 용량 산정은 해당 시스템에서 처리할 데이터의 양과 구조, 검색 및 집계 요청의 복잡성, 그리고 클러스터 구성 등 여러 가지 요인을 고려하여 평가해야 합니다. 일반적으로는 예상되는 데이터 양에 대한 30-50% 정도의 여유 공간을 확보하는 것이 좋습니다.

대략 물리메모리의 절반을 HEAP 메모리로 설정하는 것을 권장 합니다.

클러스터는 운영시 가용성을 확보하기 위한 것이라, 거의 필수 입니다. 

보유한 데이터를 저장하고 검색 하려면 노드별로 메모리, 디스크 용량을 산정해서 저장 해야 합니다.

https://www.elastic.co/kr/blog/how-many-shards-should-i-have-in-my-elasticsearch-cluster


샤드와 백업 / 복구에 대한 설명 : 

https://jaemunbro.medium.com/elastic-search-%EC%83%A4%EB%93%9C-%EC%B5%9C%EC%A0%81%ED%99%94-68062271fb64

그리고 얼마 간격으로 데이터가 들어오는지? 보존 기간을 얼마로 할지 결정해야 합니다.

시나리오

연속성을 위해, 각 에이전트가 메트릭당 100바이트를 수집하고 10초마다 100개의 메트릭을 수집하며 데이터 보존 기간이 30일인 1,000개의 호스트를 모니터링하는 클러스터를 위한 비용 절약 전략을 알아보겠습니다. 또한 고가용성을 위해 클러스터에 데이터 복제본을 저장하겠습니다. 이것은 노드 작동에 장애가 생길 경우 데이터 손실을 방지해줍니다. 얼마나 저장 공간이 필요하게 될지 계산해보겠습니다.

호스트 1,000개 * 100바이트 * 메트릭 100개 * 60/10 분당 빈도수 * 60*24*30(30일 동안) * 2(복제본당)

= 5184000000000바이트 또는 5.184TB

https://www.elastic.co/kr/blog/cost-saving-strategies-for-the-elasticsearch-service-data-storage-efficiency


     설명이 잘되어 있습니다.


2. elasticsearch 데이터 관리 (백업/복구)

  Docker나 Kubernetes 로 elastic search cluster를 구성하여 관리하면 제일 편하고 좋습니다.

  그러나 데이터 확장과 장애시 복구를 위한 스토리지 설정등이 필요합니다.

  Docker 로 구성할때는 docker-compose를 이용해서 합니다.

  elasticsearch data/log 폴더 설정


       docker 인스턴스가 올라갔다 내려갈 때마다 es data를 잃기 싫다면 설정해주어야 합니다.
       es의 데이터와 es의 로그가 저장될 곳입니다.

$ mkdir es_data es_log
본인 혼자 사용한다면 해당 폴더들을 777권한을 줘도 됩니다. 안해주면 permission 문제로 인스턴스가 뻗는다
$ chmod -R 777 es_data/ es_log/

(OR) 권한에 민감한 경우라면 docker elasticsearch 공식 인스턴스가 요구하는 uid, gid를 맞춰서 설정해야 합니다.

$ chown -R 1000:1000 es_data/ es_log/

일반적으로 uid:gid 가 1000 입니다.



이상 길고 길었던, 주소 기반으로 고객을 검색하기 위해 필요한 기본적인 내용들을 다뤄봤습니다.


감사합니다.

 

댓글

이 블로그의 인기 게시물

[quaser.dev][2014-09-14] 윈도우즈(10, 64bit)에 개발환경 설정하기

[quaser.dev][2014-09-14] 윈도우즈(10, 64bit)에 개발환경 설정하기

[2024-10-19] iPhone, iPad에서 ChatGPT로 PDF 생성시 한글 깨짐 해결 방법

iPhone, iPad에서 ChatGPT로 PDF 생성 시 한글 깨짐 해결 방법

[2025-04-16(수)] OpenAI gpt-4.1 시리즈 발표, Anthropic Claude에 대한 생각

OpenAI gpt-4.1 시리즈 발표, Anthropic Claude에 대한 생각 안녕하세요. 클스 입니다. 4/15일자로 openai가 gpt-4.1 시리즈를 발표 했습니다. 현재는 api로만 사용가능합니다. 점차 웹/앱 사용자에게 오픈 될거라 생각 됩니다. 비용상 문제로 4.1-mini, nano를 사용해서 chatbot을 만들어 보고 있습니다. 4o 시리즈 보다는 확실히 빠르고, 답변의 정확도는 올라간 것 같습니다. 앤트로픽 클로드와 비교를 많이 하는데, 업무 시스템 혹은 AI 솔루션을 개발하는 입장에서는 어떤 생태계를 제공하는가가 주요한 결정 입니다. AI관련 인력을 충분히 보유한 회사의 경우는 어떤걸 사용해도 좋을 결과를 가지겠지만 일반적인 챗봇 개발 절차를 보면 다음과 같이 볼 수 있습니다. 1. 문서를 준비한다. 대부분 pdf, text, markdown 2. 문서를 파싱해서 vectordb에 올린다.     - 별도 벡터디비 구성 필요. 어떤 db를 선택할지 고민 필요     - 어떤 Parser를 사용할지, 텍스트 오버래핑은 얼마가 적당한지 고민 필요        (회사의 문서가 워낙 많고, 다양하면 하나하나 테스트 해서 좋은걸 선택하는 것이 어렵다)     - 유사도 측정은 어떤 알고리즘을 써야할지 고민 필요     - llamaindex도 고민해야 함. 3. RAG flow를 만든다.     - langchain을 쓸지, 각 AI 벤더에서 제공하는 sdk를 쓸지 고민 필요       (대부분 락인이 되지 않으려면 langchain을 사용하면 좋지만, 벤더에 특화면 기능 적용이 늦음) 4. 챗봇 UI 앱을 만든다.     - 답변이 text 로 구성되다 보니. 그래프, 이미지등 복합적인 컨텐츠를 재배치 하여 표현하기 상당히 어렵네요. (이건 제가 실력이 모자라서 .. 패스) ...