전체 글 1341

Ch13. 클러스터 성능 측정 - 키바나를 이용한 성능 모니터링

엘라스틱서치 6.0 이상을 설치하고 같은 버전의 키바나를 설치하면, 모니터링 기능을 활성화할 수 있다.(키바나의 Monitoring 탭)키바나에서 모니터링 기능으로 제공하는 지표는 매우 다양하며, 색인속도나, 검색 속도, GC가 일어나는 패턴, CPU, 메모리 매우 다양하다.Search Rate클러스터에서 얼마큼의 검색 요청이 있는지 실시간 차트를 볼 수 있다. 클러스터에 존재하는 프라이머리 샤드와 레플리카 샤드에서 처리 중인 검색 요청 수를 모아 초당 평균 몇 건이 처리되는지 숫자로 계산해서 보여준다.(전체 샤드에서 실행되는 초당 검색 요청 수)x축: 현재 시간을 나타낸다.y축: 초당 처리 건수를 나타낸다.Search Latency클러스터에서 다수의 검색 요청이 들어오면 순서대로 큐에 쌓이고 처리량에 ..

Elastic Search 2025.11.05

Ch13. 클러스터 성능 측정 - Rally를 이용한 클러스터 부하 테스트

Rally 설치Rally는 파이썬으로 만들어진 애플리케이션으로 정상적으로 동작하기 위해서는 파이썬 3.4 이상이 설치돼 있어야 한다.python: 3.4 이상pip: 파이썬 패키지를 설치하고 관리하는 툴git: 1.9이상JDK: 8 이상pip3 install esrallyRally를 설치한다.esrally configureRally 환경설정최초 한 번은 환경설정 필요Rally Tracks 옵션esrally list tracks트랙은 부하 테스트를 진행할 때 사용하는 데이터이다.벤치마크 사이트에서 제공하는 분석 데이터를 그대로 사용할 수도 있다.Rally는 실행할 때 부하테스트에 사용할 트랙(색인 데이터)을 선택해야 한다.트랙 조회랠리를 실행할 때 --track 옵션을 이용해 원하는 트랙 이름을 지정하면 ..

Elastic Search 2025.11.05

Ch13. 클러스터 성능 측정 - 엘라스틱서치를 위한 벤치마크 툴

루씬 벤치마킹 유틸리티루씬에는 성능 측정을 위해 Luceneutil이라는 벤치마크 유틸리티가 제공된다.(깃허브에 소스코드 공개)https://github.com/mikemccand/luceneutil GitHub - mikemccand/luceneutil: Various utility scripts for running Lucene performance testsVarious utility scripts for running Lucene performance tests - mikemccand/luceneutilgithub.com이 유틸리티를 이용해 특정 데이터를 반복 테스트해서 벤치마킹 결과를 실시간으로 확인할 수 있게 사이트를 공개하고 있다.https://benchmarks.mikemccandless...

Elastic Search 2025.11.03

Ch05. 안정 해시 설계

해시 키 재배치 문제N개의 캐시 서버가 있다고 가정하면, 이 서버에 부하를 균등하게 나누는 보편적인 방법은 해시 함수를 이용하는 것이다.serverIndex = hash(key) % N(N=서버 갯수)특정한 키가 보관된 서버를 알아내기 위해서는 나머지 연산을 적용해야 한다.서버 풀의 크기가 고정되어 있을 때와 데이터 분포가 균등할 때는 잘 동작하나, 서버가 추가되거나 삭제되면 문제가 된다.AS-IS서버 인덱스0123서버server0server1server2server3키key 0, key 4key 1, key 5 key 2, key 6key 3, key 7To-BE(Server 1 장애)서버 인덱스012서버server0server2server3키key 0, key 1, key 5, key 7key 2, ..

Ch12. 안정적인 클러스터 운영 노하우 - 안정적인 클러스터 운영을 위한 주요 체크포인트

클러스터 상태 측정GET _cluster/healthcluster health API를 이용하면, 클러스터의 상태를 실시간으로 확인할 수 있다.green: 정상yellow: 하나 이상의 레플리카 샤드가 할당되지 않았거나 누락됐을 경우대부분 시간이 지나면 green으로 변하지만 일정 기간이 지나도 변하지 않는다면 원인 분석이 필요하다.red: 하나 이상의 프라이머리 샤드에 손상이 발생했을 경우데이터가 정상적이지 않은 상태로 검색 시 누락된 데이터가 결과로 제공되기에 신속히 복구가 필요하다.red가 지속될 경우 색인도 정상적으로 이뤄지지 않을 가능성이 높다.모니터링 해야할 지표들cluster.health.status:클러스터 상태(green/yellow/red)cluster.health.number_of_n..

Elastic Search 2025.10.21

Ch12. 안정적인 클러스터 운영 노하우 - 클러스터 관리 API

런타임에 환경 설정 변경elasticsearch.yml 파일을 편집하는 것이 가장 편한 방법이지만, 엘라스틱서치 인스턴스를 재설치 해야하는 문제가 있다._cluster API를 이용하면 런타임에 클러스터 환경설정이 가능하다.PUT /_cluster/settings{ "persistent": { "indices.recovery.max_bytes_per_sec": "50mb" }}// 일시적인 설정/*PUT /_cluster/settings?flat_settings=true{ "transient": { "indices.recovery.max_bytes_per_sec": "50mb" }}*/persistent 속성을 사용하면, 영구적으로 엘라스틱서치 설정값을 수정할 수 있다.transient..

Elastic Search 2025.10.21

Ch12. 안정적인 클러스터 운영 노하우 - 마스터 노드와 데이터 노드 분리

엘라스틱서치 노드의 종류클러스터를 구성하는 노드들은 다양한 역할을 하며, 하나의 노드가 모든 기능을 수행하면 처리속도나, 메모리 관리 측면에서 큰 손해를 본다.클러스터 규모가 클수록 클러스터를 관리하거나 데이터를 저장하는 역할로 노드를 분리하는 것이 좋다.엘라스틱서치는 클러스터를 구성하는 노드들이 해당 역할로만 동작할 수 있게 모드를 지원한다.elasticsearch.yml 파일에 노드 관련 속성이 제공되며, 이 속성을 조합해서 특정 모드로 설정하는 것이 가능하다.master: 마스터 기능 활성화 여부data: 데이터 기능 활성화 여부ingest: ingest 기능 활성화 여부remote.connect: 외부 클러스터 접속 가능 여부Single Node 모드elasticsearch.ymlnode. mas..

Elastic Search 2025.10.21

Ch12. 안정적인 클러스터 운영 노하우 - 노드 부트스트랩 과정의 이해

엘라스틱서치는 부트스트랩 과정이 있어, 노드를 최초 실행 시 부트스트랩 체크 과정을 거친다.부트스트랩 과정이 필요한 이유엘라스틱서치를 처음 운영할 때는 데이터가 적어 최적화 여부 차이가 크지 않지만, 데이터가 누적되고 클러스터가 커질수록 다양한 문제를 경험하게 된다.과거에는 로그를 출력하는 방식으로 잘못된 설정 정보나, 리소스 할당 문제를 알려주었으나, 현재는 부트스트랩 체크 과정을 통해 이를 확인할 수 있다.해당 설정이 잘못될 경우 엘라스틱서치를 강제 종료해 필수 설정이 완료되어야만 엘라스틱서치가 실행되도록 강제한다.간단한 테스트를 위해 재설치시에도 해당 과정을 실행해야 하는 문제를 해결하기 위해 DEV/운영 모드를 지원한다.개발 모드 vi ./elasticsearch.ymlnetwork.host: l..

Elastic Search 2025.10.21

eager, cooperative 프로토콜과 파티션 할당 전략

Rebalance가 발생하는 상황Consumer Group내에 새로운 Consumer가 추가되거나 기존 Consumer가 종료될 때, 또는 Topic에 새로운 Partition이 추가될 때session.timeout.ms 이내에 Heartbeat이 응답이 없거나, max.poll.interval.ms 이내에 poll( ) 메소드가 호출되지 않을 경우Eager 모드Rebalance 수행 시, 기존 Consumer들의 모든 파티션 할당을 취소하고 잠시 메시지를 읽지 않는다.이후 새롭게 Consumer에 파티션을 다시 할당받고 메시지를 읽는다.모든 Consumer가 잠시 메시지를 읽지 않는 시간으로 인해 Lag가 상대적으로 크게 발생할 가능성이 있다.파티션 할당 전략 (partition.assignment.s..

Ch04. 처리율 제한 장치의 설계 - 상세 설계

1) 처리율 제한 규칙은 어떻게 만들어지고, 어디에 저장되는지?2) 처리가 제한된 요청들은 어떻게 처리되는지?? 처리율 제한 규칙Lyft( 미국과 캐나다에서 주로 서비스를 제공하는 승차 공유 기업) 같은 경우 오픈 소스를 사용하고 있으며 아래와 같은 규칙을 사용한다.domain: {domain-name}descriptors: - key: {message-key} value: {message-value} rate-limit: unit: day requests_per_unit: {count}Config 설정 파일 형태로 디스크에 저장된다.처리율 한도 초과 트래픽의 처리어떤 요청이 한도 제한에 걸릴 경우 API는 Http 429 응답을 클라이언트에게 보내거나, Queue에 ..