Elasticsearch 클러스터 상태확인 인덱스목록 문서색인 문서삭제 문서조회 알아봅시다.
:클러스터 상태확인
우리의 클러스터가 어떻게 동작하고 있는지 기본적인 상태확인부터 시작해보겠습니다.
여기서는 curl 명령을 사용하여 진행할 것 이며, 필요에 따라 HTTP/REST 명령를 지원하는 어떤 방법이든 사용해도 상관없습니다.
일단, 동일한 서버에 Elasticsearch를 기동하고 명령창이 실행된 상태라고 가정하겠습니다.
상태확인을 위해서, _cat API를 사용하면 됩니다.
1 2 3 4 | $ curl -XGET 'localhost:9200/_cat/health?v&pretty' epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent 1536197750 10:35:50 elasticsearch green 1 1 0 0 0 0 0 0 - 100.0% | cs |
우리의 클러스터명이 elasticsearch 라는 것을 확인할 수 있고 정상적으로 잘 동작하고 있다는 green 상태입니다.
상태확인 메시지를 통해서 status 항목에 green, yellow, red라는 정보를 볼 수 있습니다.
. green은 모든 기능이 정상적으로 동작하고 있다는 것입니다.
. yellow는 전체적인 기능은 수행하고 있으나 일부 복제본이 아직 할당되지 않은 상태입니다.
. red는 어떤 이유로 인하여 데이터를 사용할 수 없는 상태입니다.
상태가 red라고 해서 사용 못하는 것이 아닌, 부분적인 기능(사용가능한 파편을 사용하여 검색요청을 수행)을 할 수 있는 상태입니다.
그렇지만 데이터 손실을 방지하기 위하여 가능하면 빨리 조치를 취해야할 것 입니다.
추가적인 내용을 보면 1개의 노드를 가지고 있고, 데이터가 없는 상태이기 때문에 0개의 파편이 있습니다.
실수로 동일 컴퓨터에서 1개 이상의 노드를 구동했다고 한다면, 클러스터 명은 기본값(elasticsearch)으로 되어있고 Elasticsearch가 유니캐스트방식으로 동일 장비에 다른 노드가 있는지 확인하여 모든 것을 단일 클러스터에 합류시킵니다.
이때는 응답결과에 1개 이상의 노드가 보일 것 입니다.
클러스터에 있는 노드 정보 또한 확인할 수 있습니다.
1 2 3 | $ curl -XGET 'localhost:9200/_cat/nodes?v&pretty' ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name 127.0.0.1 29 95 0 0.00 0.01 0.05 mdi * 6mBIlW0 | cs |
여기를 보면 6mBIlW0 이름을 가지는 1개의 노드가 클러스터에 구성되어있음을 알 수 있습니다.
자 이제 Mysql 에서 customer 라는 databases 에 external table 을 만들고 row data 를 입력할 겁니다.
Database customer
Table external
:인덱스 목록 확인
현재 보유하고 있는 인덱스 목록을 확인해보겠습니다.
1 2 | $ curl -XGET 'localhost:9200/_cat/indices?v&pretty' health status index uuid pri rep docs.count docs.deleted store.size pri.store.size | cs |
인덱스가 아직 존재하지 않는다고 나오네요.
자 그럼 customer라는 인덱스를 생성해보겠습니다.
:인덱스 생성
1 2 3 4 5 6 7 | $ curl -XPUT 'localhost:9200/customer?pretty&pretty' { "acknowledged" : true, "shards_acknowledged" : true, "index" : "customer" } | cs |
인덱스를 생성했으니 확인한번 해봐야겠죠?
1 2 3 4 | $ curl -XGET 'localhost:9200/_cat/indices?v&pretty' health status index uuid pri rep docs.count docs.deleted store.size pri.store.size yellow open customer 2XknE-UhRGKBCwv9gFCtfg 5 1 0 0 1.1kb 1.1kb | cs |
현재 우리가 customer라는 이름을 가지는 1개의 인덱스를 가지고 있고 5개의 주파편과 1개의 복제본(기본값)을 가지고 있으며 0개의 문서가 있다는 것을 알 수 있습니다.
customer 인덱스의 상태가 yellow인 것을 알 수 있습니다.
이전에 이야기했듯 yellow 상태는 일부 복제본이 아직 할당되지 않은 상태입니다.
Elasticsearch가 기본적으로 1개의 인덱스에 대한 1개의 복제본을 생성하기 때문에 발생한 것 입니다.
우리가 지금 1개의 노드만 기동하고 있기 때문에 클러스터에 노드를 추가하기 전까지는 복제본을 생성할 수 없는 상태인 것 입니다.
나중에 두번째 노드가 추가되고 복제본이 생성된다면 인덱스에 대한 상태가 green으로 변경될 것 입니다.
:문서 색인
이제 customer 인덱스에 무언가를 입력해보도록 하겠습니다.
이전에도 언급되었지만 문서를 색인할 때 Elasticsearch에게 인덱스의 어떤 타입으로 할 것 인지 알려줘야 합니다.
간단하게 customer 인덱스에 고객 정보를 ID가 1이고 external 타입으로 색인해보도록 하겠습니다
다음과 같이 어떤 간단한 고객 문서를 customer 색인, "external" 유형으로 색인화하고 ID는 1로 하겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | $ curl -XPUT -H 'Content-Type: application/json' http://localhost:9200/customer/external/1?pretty -d ' { "name": "John Doe" } ' { "_index" : "customer", "_type" : "external", "_id" : "1", "_version" : 1, "result" : "created", "_shards" : { "total" : 2, "successful" : 1, "failed" : 0 }, "_seq_no" : 0, "_primary_term" : 1 } | cs |
새로운 고객 문서가 customer 인덱스에 external 타입으로 성공적으로 생성됨을 알 수 있습니다.
문서의 ID는 색인할 때 지정했던 1로 되어있습니다.
Elasticsearch는 인덱스에 문서 정보를 입력할 때 인덱스를 먼저 생성하라고 강제하지는 않습니다.
직전 예제와 다르게 인덱스가 존재하지 않는다면 Elasticsearch가 자동으로 인덱스를 생성할 것 입니다.
방금 색인한 문서에 대해서 조회해보겠습니다.
: 색인문서 조회
1 2 3 4 5 6 7 8 9 10 11 12 | $ curl -XGET 'localhost:9200/customer/external/1?pretty&pretty' { "_index" : "customer", "_type" : "external", "_id" : "1", "_version" : 1, "found" : true, "_source" : { "name" : "John Doe" } } | cs |
위 내용 중 found는 조회할 때 요청한 ID가 1인 문서가 검색되었는지 여부이며, _source는 검색된 문서에 대한 JSON 정보입니다.
: 인덱스 삭제
이전에 생성했던 인덱스를 삭제하고 다시 조회해보겠습니다.
1 2 3 4 5 6 7 8 9 | $ curl -XDELETE 'localhost:9200/customer?pretty&pretty' { "acknowledged" : true } $ curl -XGET 'localhost:9200/_cat/indices?v&pretty' health status index uuid pri rep docs.count docs.deleted store.size pri.store.size | cs |
성공적으로 인덱스가 삭제되었고 클러스터 안에 아무것도 없는 상태가 되었다는 것 입니다.
복습하는 과정으로 다시 인덱스를 생성하고 문서를 생서한후 조회 해보겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | $ curl -XPUT 'localhost:9200/customer?pretty&pretty' { "acknowledged" : true, "shards_acknowledged" : true, "index" : "customer" } $ curl -XPUT -H 'Content-Type: application/json' http://localhost:9200/customer/external/1?pretty -d ' > { > "name": "John Doe" > } > ' { "_index" : "customer", "_type" : "external", "_id" : "1", "_version" : 1, "result" : "created", "_shards" : { "total" : 2, "successful" : 1, "failed" : 0 }, "_seq_no" : 0, "_primary_term" : 1 } $ curl -XGET 'localhost:9200/customer/external/1?pretty&pretty' { "_index" : "customer", "_type" : "external", "_id" : "1", "_version" : 1, "found" : true, "_source" : { "name" : "John Doe" } } | cs |
사용한 명령을 자세히 보시면 Elasticsearch에서 데이터에 어떤 패턴을 가지고 접근하는지 알 수 있습니다.
[REST Verb] /[Index]/[Type]/[ID]
이 REST API 명령 패턴을 잘 기억하고 계시면 Elasticsearch를 마스터하는데 좋은 기반이 될 것 입니다.
정리
curl -XGET 'localhost:9200/_cat/health?v&pretty'
curl -XGET 'localhost:9200/_cat/nodes?v&pretty'
인덱스 확인
curl -XGET 'localhost:9200/_cat/indices?v&pretty'
인덱스 생성
curl -XPUT 'localhost:9200/apt?pretty&pretty'
문서 확인
curl -XGET 'localhost:9200/apt/apartment_sale/1?pretty&pretty'
'소행성이야기' 카테고리의 다른 글
확장프로그램 설치없이 웹브라우저 전체화면 캡쳐 무료 (0) | 2018.09.07 |
---|---|
Elasticsearch 문서 수정 및 조회를 해보도록 하겠습니다. (0) | 2018.09.06 |
Elasticsearch 기본 개념을 잡아보자 (0) | 2018.09.06 |
Elasticsearch 6.4 한글 형태소 분석 플러그인 nori 설치 (0) | 2018.09.06 |
PhantomJS 과 CasperJS 을 이용한 자동 페이지 스크린샷 (캡쳐) 만들기 (0) | 2018.09.05 |