-
운영 중인 엘라스틱서치 순차적 재시작 ( Rolling-Restart )검색/ElasticSearch 2021. 8. 26. 13:20반응형
소개
- ES 입장에서는 클러스터에 속한 노드중 한대가 중지되면 그 노드에 속한 프라이머리 샤드나 레플리카 샤드를 다른 노드로 옮기려는 샤드 할당(Shard Allocation) 작업을 수행한다. 이는 클러스터의 특정 노드가 장애상황일 때 이부분에 대한 Fail Over가 동작하는 과정이다. 그러나 순차적 재시작 case에서는 이 과정이 오히려 오버헤드(overhead)로 동작하기 때문에 재시작 전 클러스터의 샤드 할당 기능을 꺼두어 샤드 할당이 다시 일어나는 것을 미연에 방지한다.
(출처 : https://bit.ly/31ADg0V)
Rolling-Restart 사용 이유
- 검색 중단 없이 하드웨어 교체, 서버/ Elasticsearch 업그레이드 작업을 위해 사용
- indices의 _close, _open 없이 수정된 설정 정보를 새로 읽기 위해 사용
작업 순서
step1 : 샤드 할당 기능 disable
# 공식문서 제안 PUT _cluster/settings { "persistent": { "cluster.routing.allocation.enable": "primaries" } } ===== # 블로그 제안 PUT /_cluster/settings { "transient" : { "cluster.routing.allocation.enable" : "none" } } all - (default) Allows shard allocation for all kinds of shards. primaries - Allows shard allocation only for primary shards. new_primaries - Allows shard allocation only for primary shards for new indices. none - No shard allocations of any kind are allowed for any indices.
새롭게 샤드를 할당 하면서 발생하는 I/O비용을 없애기 위해 설정하는 것이므로 none 옵션을 적용한다.
persistent와 transient 차이 (https://bistros.tistory.com/167)
allocation none 설정을 통해 해당 노드의 어떤 indices에도 데이터 i/o 작업이 일어나지 않는다.
색인 상태를 다음 명령으로 확인 가능하다GET jn3_product/_stats
“indexing” : {“index_current” : 0}
step2 : 인덱싱 중지 후에 동기화 된 플러시
POST _flush/synced
_flush/synced : node 재시작 후에 샤드 데이터를 다시 색인할 필요가 없음을 sync_id로 빠르게 확인하기 때문에 복구 시간이 단축된다.
step3 : 노드 shutdown - start
/elastic/elasticsearch-6.5.4/stop.sh GET _cat/nodes /elastic/elasticsearch-6.5.4/start.sh
step4 : 샤드 할당 기능 복구 및 health체크
PUT /_cluster/settings { "transient" : { "cluster.routing.allocation.enable" : null } } GET _cluster/health
실행 URL
#클러스터 헬스 체크 curl -XGET 'localhost:9200/_cluster/health?pretty' #클러스터 세팅 체크 curl -XGET 'localhost:9200/_cluster/settings?pretty' #클러스터 세팅 변경 curl -XPUT 'localhost:9200/_cluster/settings?pretty' -H 'Content-Type: application/json' -d' { "transient": { "cluster.routing.allocation.enable": "none" } } ' #_flush curl -XPOST 'localhost:9200/_flush/synced?pretty' #node1 - stop /elastic/elasticsearch/stop.sh #none1 - start /elastic/elasticsearch/start.sh #node1 - 체크 curl -XGET 'localhost:9200/_cat/nodes?pretty' #node2 - stop /elastic/elasticsearch/stop.sh #none2 - start /elastic/elasticsearch/start.sh #node2 - 체크 curl -XGET 'localhost:9200/_cat/nodes?pretty' #node3 - stop /elastic/elasticsearch/stop.sh #none3 - start /elastic/elasticsearch/start.sh #node3 - 체크 curl -XGET 'localhost:9200/_cat/nodes?pretty' #클러스터 세팅 변경 curl -XPUT 'localhost:9200/_cluster/settings?pretty' -H 'Content-Type: application/json' -d' { "transient": { "cluster.routing.allocation.enable": null } } '
반응형'검색 > ElasticSearch' 카테고리의 다른 글
kibana 접속 안될때 (read-only 전환된 상태) (0) 2021.08.26 Search Query Test ( Elasticsearch v6.5.4) (0) 2021.08.26 동의어 등록 테스트 ( nori / Elasticsearch v6.5.4) (0) 2021.08.26 동의어 사전 다중 등록 테스트 (Elasticsearch v6.5.4) (0) 2021.08.26 elasticsearch-plugin 생성하기 (0) 2021.01.13 - ES 입장에서는 클러스터에 속한 노드중 한대가 중지되면 그 노드에 속한 프라이머리 샤드나 레플리카 샤드를 다른 노드로 옮기려는 샤드 할당(Shard Allocation) 작업을 수행한다. 이는 클러스터의 특정 노드가 장애상황일 때 이부분에 대한 Fail Over가 동작하는 과정이다. 그러나 순차적 재시작 case에서는 이 과정이 오히려 오버헤드(overhead)로 동작하기 때문에 재시작 전 클러스터의 샤드 할당 기능을 꺼두어 샤드 할당이 다시 일어나는 것을 미연에 방지한다.