elasticsearch cluster 구성 시 기본으로 생성되는 index확인
데이터베이스/Elasticsearch

elasticsearch cluster 구성 시 기본으로 생성되는 index확인

반응형

elasticsearch cluster를 사용하기 위해서 cluster를 구성하기전에 꼭 추가해야하는 부분이 있는데 기본으로 생성되는 index에 대한 disable처리가 필요하다.

 

geoip_databases 인덱스

기본적으로 cluster 구성 시 geoip_databases가 인덱스가 추가가 되어있는데 이게 hidden index여서 모르고 지나칠 수 있다. 만약 모르고 클러스터를 구성하고 노드를 조작할 경우 해당 인덱스의 primary shard가 unassigned되면서 cluster 상태가 red가 될 수 있다.

 

그럼 왜 geoip_databases가 기본적으로 생기는가? 생기지 않도록 할 수 없는가? 

해당 인덱스가 생성되는 이유는 ingest.geoip.downloader.enabled 속성 때문에 생성되는데 해당 속성의 기본값이 true이다. 그리고 이게 true인 상태에서 cluster red 상태로 만든 index를 지울 수 없게 되어있어서 서비스 운영시 장애를 유발할 가능성이 있다.

 

해결방법은 간단하다. 이미 클러스트를 구성하고 있다면 아래 api를 호출하여 ingest.geoip.downloader.enabled를 비활성화 해주면 된다.

PUT _cluster/settings
{
    "persistent": {
       "ingest.geoip.downloader.enabled": false
    }
}

그럼 red상태에 빠졌던 클러스터는 index가 제거되면서 다시 green으로 돌아온다.

 

만약 클러스터를 구성하기 전이었다면 elasticsearch.yml에 해당 설정을 추가해주고 cluster를 올리는게 좋다.

ingest.geoip.downloader.enabled: false

 

.ds-ilm-history-*

ilm은 index lifecycle management에 약자로 elasticsearch에서 인덱스에 라이프사이클에 따라서 인덱스의 생명주기를 관리하는 것인데 이 policy에 따라서 진행된 내용을 history index에 생성한다.

 

하지만 이걸 사용하지 않는다고 하면 해당인덱스를 보유하고 있을 필요가 없다. 레플리카가 한개있기 때문에 만약 두개의 데이터 노드가 이탈된다면 이또한 cluster상태를 red로 만들 수 있다.

 

cluster 구성 시 indices.lifecycle.history_index_enabled=false를 설정해서 history가 저장되지 않게 한다.

 

 

 

[참고]

클러스터 생성 docker-compose.yml

version: "2"

services:
  elasticsearch1:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.17.5
    container_name: elasticsearch1
    environment:
     - cluster.name=docker-cluster
     - node.name=elasticsearch1
     - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
     - indices.lifecycle.history_index_enabled=false
     - xpack.monitoring.collection.enabled=false
     - discovery.seed_hosts=elasticsearch1,elasticsearch2,elasticsearch3
     - cluster.initial_master_nodes=elasticsearch1,elasticsearch2,elasticsearch3
     - xpack.security.enabled=false
    ports:
      - "19200:9200"

  elasticsearch2:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.17.5
    container_name: elasticsearch2
    environment:
     - cluster.name=docker-cluster
     - node.name=elasticsearch2
     - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
     - xpack.monitoring.collection.enabled=false
     - indices.lifecycle.history_index_enabled=false
     - discovery.seed_hosts=elasticsearch1,elasticsearch2,elasticsearch3
     - cluster.initial_master_nodes=elasticsearch1,elasticsearch2,elasticsearch3
     - xpack.security.enabled=false
    ports:
      - "29200:9200"

  elasticsearch3:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.17.5
    container_name: elasticsearch3
    environment:
     - cluster.name=docker-cluster
     - node.name=elasticsearch3
     - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
     - xpack.monitoring.collection.enabled=false
     - indices.lifecycle.history_index_enabled=false
     - discovery.seed_hosts=elasticsearch1,elasticsearch2,elasticsearch3
     - cluster.initial_master_nodes=elasticsearch1,elasticsearch2,elasticsearch3
     - xpack.security.enabled=false
    ports:
      - "39200:9200"

 

 

결론

위 index들이외에도 언제든지 생성될 수 있다. 어떤 index가 설정에 따라서 기본으로 special 속성으로 생성될지 모르기 때문에 항상 클러스터 운영시 설정을 지켜보고 Index를 주기적으로 체크하는게 좋다. 

반응형