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를 주기적으로 체크하는게 좋다.
'데이터베이스 > Elasticsearch' 카테고리의 다른 글
elasticsearch routing 사용하기 (0) | 2023.07.25 |
---|---|
shard reroute api 테스트 (0) | 2023.07.25 |
Line 세미나. 대규모 음악 데이터 검색 기능을 위한 Elasticsearch 구성 및 속도 개선 방법 - 2. 클러스터 튜닝 (0) | 2021.11.14 |
Line 세미나. 대규모 음악 데이터 검색 기능을 위한 Elasticsearch 구성 및 속도 개선 방법 - 1. 검색 쿼리 개선 (0) | 2021.11.14 |
Java Lowlevel client bulk api에서 filter_path 사용하기 (0) | 2021.07.26 |