전체 글 1341

Ch11. 장애 방지를 위한 실시간 모니터링 - Cat API를 이용해 콘솔에서 모니터링 하기

Cat API와 Rest API 차이_cluster API로 클러스터를 관리하기 위한 대부분의 기능을 제공하지만, 결과를 JSON 형태로 제공하기 때문에 프로그램 환경에서 파싱 해서 사용하기 편리하다. 리눅스 쉘 환경에서는 콘솔 형태로 사용하는데, 이는 JSON 포맷과 친화적이지 못하다.엘라스틱서치는 콘솔 사용자를 위해 _cat API를 제공하며, 콘솔과 친화적인 응답을 출력할 수 있다.curl http://localhost:9200/_cat/master?v콘솔 친화적인 응답값을 받을 수 있다.Cat API 공통 파라미터1) v 파라미터curl http://localhost:9200/_cat/master?v_cat API는 기본적으로 반환되는 결과에는 헤더 라인이 빠져있다.v 파라미터를 추가하면, 헤더라..

Elastic Search 2025.10.15

Ch11. 장애 방지를 위한 실시간 모니터링 - 클러스터에 대한 실시간 모니터링

클러스터 레벨의 실시간 모니터링GET _cluster/stats_cluster/stars API를 이용하면, 클러스터 전체에서 통계를 검색 할 수 있다.클러스터를 구성하는 물리적인 노드의 정보(역할, 운영체제 정보, 메모리 사용량, CPU 사용량)를 알 수 있다.클러스터 인덱스 정보count: 클러스터에 존재하는 인덱스의 갯수를 나타낸다.shards: 클러스터에 존재하는 샤드의 정보를 나타낸다.docs: 클러스터에 색인된 문서의 개수를 나타낸다.store: 클러스터 내부에 가지고 있는 문서가 차지하는 디스크 크기를 나타낸다.fielddata: 클러스터가 fielddata를 위해 생성한 메모리 크기를 나타낸다.query_cache: 동일한 검색 요청 시 빠른 응답을 위해 검색 결과를 메모리에 올려 캐시한다..

Elastic Search 2025.10.15

Ch11. 장애 방지를 위한 실시간 모니터링 - 물리적인 클러스터 상태 정보 조회

엘라스틱서치는 실행 시, Config 디렉터리에 설정된 환경설정 정보를 바탕으로 노드를 인스턴스화한다. 이때 사용가능한 리소스를 적절히 분산해 각 모듈에서 나눠서 사용할 수 있도록 자동으로 리소스를 분배한다. 모든 노드가 인스턴스화되어 클러스터가 구성되면 물리적인 노드가 실제로 어떤 설정을 가지고 있으며, 사용 중인 리소스가 어떤지를 상태 정보 API를 통해 확인할 수 있다.(_cluster/state API) 클러스터 레벨의 물리 상태 조회GET _cluster/state클러스터 관점에서 제공되는 상태 정보 및 설정 내역을 상세하게 살펴볼 수 있다.metadata 정보, routing_table 정보, Restore/Snapshot 정보등을 한눈에 확인 가능노드 레벨의 물리 상태 조회GET _nodes..

Elastic Search 2025.10.15

Ch11. 장애 방지를 위한 실시간 모니터링 - 클러스터 Health 체크

_cluster/health API를 이용하여 클러스터의 현재 상태를 실시간으로 확인할 수 있다. 클러스터의 현재 상태를 간단한 형태로 가공해서 제공하기 때문에 이를 이용해 클러스터 Health 체크를 할 수 있다. 클러스터 레벨의 Health CheckGET /_cluster/health결과로 클러스터 레벨의 간단한 요약 정보를 제공하며, Health Check 시, 가장 많이 사용하는 방식이다.cluster_name클러스터 이름을 표시한다.status클러스터 상태를 표시한다.(Green, Yellow, Red)green: 클러스터 모든 샤드가 정상yellow: 프라이머리 샤드는 정상/ 리플리카 샤드가 비정상red: 일부 프라이머리 샤드가 비정상time_outhealth 체크 API 호출 시 타임아웃이..

Elastic Search 2025.10.15

Ch04. 조회와 정렬 - Select(조회)

데이터베이스는 데이터를 저장하는 창고다. 하지만 창고에 물건을 쌓아두기만 하면 아무 의미가 없다. 필요할 때 물건을 꺼내서 확인하고, 사용해야 가치가 있다. 바로 이 '데이터를 꺼내보는 행위'를 조회라고 한다. 그리고 이 조회를 할 때 사용하는 가장 기본적인 명령어가 바로SELECT다. 가장 간단한 데이터 조회데이터를 조회하는 가장 기본적이고 간단한 방법부터 알아보자. SELECT와 FROM 두 가지 키워드만 알면 된다.SELECT : 무엇을 가져올 것인가? (조회할 열, 즉 컬럼을 지정한다)FROM : 어디에서 가져올 것인가? (데이터가 들어있는 테이블을 지정한다)가장 단순하게 customers라는 테이블에 들어있는 모든 고객 정보를 전부 꺼내보고 싶다고 해보자. 이럴 때 모든 열(컬럼)을 의미하는 특..

Ch10. 대용량 처리를 위한 시스템 최적화 - 시스템 튜닝 포인트

애플리케이션에서 튜닝 가능한 리소스1) ulimitulimit 명령어는 애플리케이션이 실행될 때 얼마큼의 리소스를 할당받을 수 있는지 리소스 관리를 수행한다.애플리케이션이 생성될 때 받을 수 있는 리소스 최댓값이 관리된다.ulimit -a 명령어를 사용해 한 프로세스가 가질 수 있는 리소스의 정보를 확인할 수 있다.2) sysctl리눅스 내부에 존재하는 커널의 파라미터를 조절할 수 있도록 설정 값을 제공한다.커널 레벨의 다양한 파라미터 확인 가능애플리케이션이 실행될 때 생성되는 리소스 정보를 커널 레벨까지 자세히 제공한다.3) 실행 중인 애플리케이션 리소스 확인PID를 이용해 실행 중인 애플리케이션의 리소스 제한 값을 조회할 수 있다cat /proc/{$pid}/limits엘라스틱서치가 단독으로 사용되는..

Elastic Search 2025.10.10

Ch10. 대용량 처리를 위한 시스템 최적화 - 분산환경에서의 메모리 스와핑

메모리 스와핑대부분 운영체제에서는 효율적인 메모리 관리를 위해 스와핑이라는 기술을 사용하며, 이를 통해 사용되지 않는 애플리케이션의 물리 메모리를 디스크로 스왑 한다.스와핑이 일어나면 가상 메모리의 일부 내용을 디스크로 쓰기 위해 디스크의 일정 영역을 스왑 영역으로 만든다.이때 일어나는 동기화 작업에 의해 순식간에 시스템 성능이 떨어지고 장애가 발생할 수도 있다.시스템 리소스가 넉넉하면 스와핑이 일어나지 않도록 설정하는 것이 안전하다.(지속적인 스왑 인/아웃 과정을 통해 성능이 급격히 나빠질 수도 있다.)운영체제 관점에서는 스와핑은 많은 리소스를 사용하므로 모니터링을 철저히 해야 한다.free: 스왑 상태 체크freecat /proc/swaps: 스왑 영역이 디스크상 생성된 위치 확인cat proc/sw..

Elastic Search 2025.10.10

Ch10. 대용량 처리를 위한 시스템 최적화 - 엘라스틱서치와 가상 메모리

가상 메모리대부분의 현대 운영체제들은 가상 메모리 관리 기법을 사용하며, 애플리케이션에서 물리적인 메모리보다 많은 양의 메모리를 사용할 수 있도록 운영체제가 제공하는 대표적인 메모리 관리 기술이다.애플리케이션이 실행될 때, 메모리 번지를 직접 할당하는 것이 아닌, 가상의 메모리 번지를 생성해서 제공함으로써 애플리케이션 별로 전용 메모리 공간을 사용할 수 있다.이를 활용하면 애플리케이션이 운영체제에서 인식하고 있는 물리 메모리 크기보다 더 큰 메모리를 할당받아 사용할 수 있다.운영체제는 애플리케이션들이 CPU나 메모리 같은 시스템 리소스를 사용할 때 제한을 주고 있다.리눅스의 경우 ulimit 명령어로 애플리케이션별로 제한된 리소스의 한계를 볼 수 있다.JVM을 위한 가상 메모리Java 애플리케이션 같은 ..

Elastic Search 2025.10.10

Ch10. 대용량 처리를 위한 시스템 최적화 - 힙 크기를 32GB 이하로 유지해야 하는 이유

엘라스틱서치는 메모리를 많이 사용하는 애플리케이션이다. 시스템에서 제공되는 물리 메모리를 JVM 힙에 할당해서 엘라스틱서치가 사용하도록 설정할 수 있다. 일반적으로 힙 메모리가 많을수록 성능도 올라간다. 너무 작은 힙 크기는 OOM을 발생시킬 수 있으며, 너무 큰 힙 크기는 FullGC가 발생할 때 시스템이 마비되는 STW를 발생시킬 수 있다.엘라스틱서치와 힙 크기cat jvm.optionsXms = 4GXmx = 4G엘라스틱서치를 기본 설정대로 설치하면 힙 크기가 1GB로 되어있다.1GB는 엘라스틱서치를 처음 사용하는 사람들의 테스트 용도로 제공되는 값으로 운영에는 더 높은 값으로 설정이 필요하다.config.options 파일을 열어 Xms(최소 힙 크기), Xmx(최대 힙 크기) 설정을 변경하면 된..

Elastic Search 2025.10.10

Ch10. 대용량 처리를 위한 시스템 최적화 - 노드 실행 환경과 JVM 옵션

엘라스틱서치와 루씬 모두 Java 언어로 개발되었지만, 루씬은 독립적인 실행이 불가능하다엘라스틱서치 릴리스 노트https://www.elastic.co/downloads/past-releases?product=elasticsearch Past Releases www.elastic.co엘라스틱 서치는 2010년에 오픈소스로 개발되어 현재는 9.xx 버전이 릴리스되고 있다.엘라스틱서치는 루씬 기반으로 동작하기에 엘라스틱서치 버전에 따라 내부에서 사용하고 있는 루씬의 버전도 함께 달라진다.루씬의 기능이 추가될 때마다 엘라스틱서치도 루씬의 새로운 기능을 기반으로 새롭게 릴리스된다.실행 시 Java 8 이상을 사용해야 하는 이유1) 큰 물리 메모리 사용시대의 변화에 따라 자바 언어도 64 비트를 지원하기 시작하였..

Elastic Search 2025.10.10