본문 바로가기
Linux

Elasticsearch - 기본 용어 이해, 환경 구성 및 REST API 기본

by 올엠 2024. 3. 18.
반응형

요즘 Elasticsearch는 오픈소스로 많이 사용한다.

BigData가 화제인 요즘 엘라스틱서치는 고성능의 풀텍스트 검색 및 분석 엔진으로 활용성이 높다.

오픈소스로 제공되며 준 실시간으로 대량의 데이터를 빠르게 저장하고 검색할 수 있다.

그럼 가장 기본(Basic)이 되는 핵심 요소들에 대해서 알아보자.

Cluster(클러스터)

클러스터는 전체 데이터를 하나 또는 그 이상의 노드의 집합에서 유지하고 있다는 것을 의미한다.  하나의 클러스터는 다수의 로드로 구성될 수 있으며, 하나의 클러스터에 다수의 서버로 바인딩하여 운영하거나 하나의 서버에 다수의 클러스터를 운영할 수 있다.

실행 명령

bin/elasticsearch --cluster.name=elasticsearch

환경설정 파일

cluster.name: elasticsearch

 

Node(노드)

클러스터에 구성된 하나의 서버를 의미한다. 노드는 데이터를 저장하고 클러스터 인덱싱에 참여하여 검색기능을 제공합니다. 이름으로 클러스터내 노드간에 구분할 수 있으며 같은 클러스터명을 가진 노드는 자동으로 함께 바인딩 된다.

 

실행 명령

bin/elasticsearch --node.name=node01

환경설정 파일

node.name: "node01"

노드는 클러스터의 상태를 관리하는 마스터 노드와 데이터 입/출력과 검색을 수행하는 데이터 노드로 구분된다. 아래와 같이 node01을 마스터로 지정하고 데이터 노드로 지정하지 않으면 실제 데이터는 node01에는 저장되지 않는다.

 

실행 명령

bin/elasticsearch --node.master=true --node.data=true
bin/elasticsearch --node.name=node01 --node.master=true --node.data=false 
bin/elasticsearch --node.name=node02 --node.master=false --node.data=true 
bin/elasticsearch --node.name=node03 --node.master=false --node.data=true

환경설정 파일

node.master: true 
node.data: true

기존 관계형 DB를 많이 봐왔기 때문에 Elasticsearch의 용어적 차이를 설명하면 다음과 같다.

데이터베이스 (Database) -> 인덱스(index)
테이블(Table) -> 타입(Type)
행(Column) -> 필드(Field)
열(Row)-> 도큐먼트 (Document)
스키마(Schema) -> 매핑(Mapping)

 

인덱스(index)

인덱스는 비슷한 특성을 가진 도큐먼트의 집합으로 인덱스를 생성하여 하나의 집합으로 관리할 수 있다. 인텍스는 고유의 이름을 가지며 이를 통해 검색을 하거나 업데이트 및 삭제를 진행할 수 있다. Elasticsearch를 구성한다면 가장 먼저 해야 할 작업이다.

인덱스를 지정할 때 Shard(샤드) / Replica(리플리카)를 설정해야 한다.

Shard(샤드): 데이터 검색 단위로 데이터를 나누어 저장하게 된다.  인덱스에 참여할 노드수라고 생각하셔도 된다. 부하분산 및 처리량 확장을 위해서 사용된다.

Replica(리플리카): 샤드의 복사본 개수를 지정한다. 샤드로 분산되어 저장되었는데 노드에 문제가 발생하였을때

다른 노드에 복사본이 있어 고가용성용도로 사용하시면 된다. 다만 리플리카는 전체 노드수보다 작게 구성하여야 한다.

 

실행 명령

curl -XPUT localhost:9200/graylog2_1 -d '
{ 
    "settings" : { 
        "number_of_shards" : 5, 
        "number_of_replicas" : 1 
    } 
}'
 

환경설정 파일

index.number_of_shards: 5 
index.number_of_replicas: 1

 

필드(Field) / 매핑(Mapping)

JSON으로 Elasticsearch는 데이터를 조회하거나 업데이트 검색 할 수 있다. 그때 파라미터들이 필드가 된다. 단 필드와 행이 다른 부분은 필드의 경우 필드 안에 다수의 필드를 가지고 있을 수 있다. 필드의 전체 구조가 매핑이 된다.

아래 에 보면 전체 매핑구조를 확인 할 수 있고 각 필드명과 타입에 대해서 알 수 있다.

curl localhost:9200/graylog2_1/_mapping?pretty

 

도큐먼트 (Document)

하나의 저장된 테스트 기반의 데이터 의미한다.

 

REST API

Elasticsearch는 REST API 구조로 통신을 한다.

다음과 같이 4가지 메소드를 통해 Elasticsearch를 이용할 수 있다.

GET -> Read(curl 옵션: -X GET, GET은 X 옵션을 사용하지 않으면 GET으로 동작)

PUT -> Update(curl 옵션: -X PUT)

POST -> Create(curl 옵션: -X POST)

DELETE -> Delete(curl 옵션: -X DELETE)

*pretty 옵션은 시각적으로 정렬해 주는 기능을 한다.

 

curl localhost:9200/graylog2_0/message/11234422?pretty

{
  "_index" : "graylog2_0",
  "_type" : "message",
  "_id" : "8763fd30-2c7d-11e6-a91e-0050569eb67d",
  "_version" : 1,
  "found" : true,
  "_source":{"process........
}
반응형