본문 바로가기
배우고 있습니다/elastic-search

[Elastic Search 6.5] shard를 수동으로 locate 하기 / node restart시 shard 처리

by 유헤 2019. 1. 14.

이번 포스팅은 shard을 재배치(Rellocation) 및 리라우트(reroute) 에 대해 설명하고자 합니다.


일단, 기본적으로 Node를 종료하면 그 안에있던 shard는 다른 shard로 재배치를 시작합니다.


그것을 Rellocation이라고 하며


* 단순히 재기동이나 서버 환경설정 한개 변경하기 위해서 껐다 키는건데

끄니까 샤드가 바로 다른 노드로 이동한다면?


서버에 부하도 많이 가고, 의미없는 일이기 때문에 껐다 키는동안은 샤드 이동이 없었으면 합니다!




node restart시 shard 처리

  • # 재배치 중지 $ curl -XPUT 'localhost:9200/_cluster/settings?pretty=true' -d { "transient" : { "cluster.routing.allocation.enable" : "none" } }

    재기동 / 환경설정 을 마쳐서 다시 노드를 올릴 경우

    # 재배치 시작 $ curl -XPUT 'localhost:9200/_cluster/settings?pretty=true' -d { "transient" : { "cluster.routing.allocation.enable" : "all" } }

•TIP: 작은 샤드들은 작은 세그먼트로 생성될 것이며, 오버헤드를 유발시킨다. 샤드의 크기는 수 GB ~ 수십 GB 수준으로 만들도록 노력할 것.

시간 기반 데이터(항공기 운항 기록 등)의 사용례에서는 흔히 20~40GB의 크기를 보였다.


 

•TIP: 샤드 당 오버헤드는 세그먼트 크기와 갯수에 의해 결정되므로,

작은 세그먼트들을 병합하도록 강제하는 forcemerge 연산은 오버헤드를 줄이고 질의 퍼포먼스를 향상시킬 수 있다.

이는 일단 색인 작업을 마쳐야 할 수 있으며, 비용이 높은 연산이므로 피크타임 이외에 수행되어야 할 것이다.


 

•TIP: 노드가 들고 있는 샤드의 갯수는 사용 가능한 heap에 의해 결정되겠지만, Elasticsearch 자체에는 한계값을 주고 있지는 않다.

좋은 방법은 노드 당 샤드의 갯수를 힙의 GB당 20~25개 정도를 지정하는 것이다.

즉 30GB 힙을 들고 있는 노드는 최대 600~750개의 샤드를 가질 수 있지만, 이것보다는 아래 값으로 지정하는 것이 좋을 것이다.

이렇게 하여 클러스터를 good health로 유지할 수 있을 것이다.


https://www.elastic.co/blog/how-many-shards-should-i-have-in-my-elasticsearch-cluster

https://polbear.github.io/technical/information/2017/11/12/ElasticSerach-backup-restore.html

http://asuraiv.blogspot.com/2015/04/elasticsearch-rolling-restarts.html




shard를 수동으로 locate 하기 


분명 "cluster.routing.allocation.enable" : "all"  로 지정했는데도, unassigned shard가 그대로 남아있다면


* 빨간색으로 표시된 unassigned shard, 특정 노드를 종료하여도 샤드 재배치가 일어나지 않았다.



노드를 다시 킨 상태에서, Node2에 있는 샤드를 Node에 지정해서 옮겨두고 노드를 종료해야 한다.



엘라스틱에서도 나와있는 reroute

아래와 같이 명령어를 사용하면 된다.




위 내용을 참고하여, 아래와 같이 입력해주면



성공적으로 잘 된 것을 확인 할 수 있다. 



Relocating(보라색) 되고 있는 14번 샤드



http://paulina0206.tistory.com/entry/Elasticsearch-%EC%9A%B4%EC%98%81


https://nakjunizm.github.io/2017/09/26/reroute/