# Elasticsearch 패치시 간략한 팁 & 인덱스를 하나씩 날짜의 역순으로 오픈하는 스크립트

**URL:** <https://discuss.elastic.co/t/elasticsearch/24766>\
**Category:** 한국어 질문 및 토론\
**Created:** [July 2, 2015, 5:40am UTC](https://discuss.elastic.co/t/elasticsearch/24766 "2015-07-02T05:40:29Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![godway](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/godway/32/3547_2.png) [@godway](https://discuss.elastic.co/u/godway)\
**Post date:** [July 2, 2015, 5:40am UTC](https://discuss.elastic.co/t/elasticsearch/24766/1 "2015-07-02T05:40:29Z")

</div>

어제 meetup 에서 cluster 재기동시에 replica 를 재사용하지 않게 될때 부하가 너무 많이 걸린다고 하신 분이 계셨습니다.  
저도 동일한 문제를 겪고 있습니다.  
재기동시 방법을 조금이나마 더 안전하게 하는 방법을 공유하려고 합니다.

오늘 날짜에 대한 인덱싱 작업을 멈춥니다.  
cluster 를 shutdown 하기 전에 오늘 날짜의 인덱스를 제외하고 모든 인덱스를 close 합니다.  
그리고 cluster 를 shutdown 후에 elasticsearch 패치 작업을 합니다.  
모든 노드를 구동시키게 되면 빠른 시간 안에 오늘 날짜의 index 는 빠르게 recovery 됩니다.

recovery 된 후에 멈췄던 오늘 날짜에 대한 인덱싱 작업을 다시 진행합니다.

그리고 날짜의 역순으로 인덱스를 하나씩 open 합니다.  
하나의 index 를 open 하고 완전히 recovery 될때 까지 기다렸다가 이전의 index 를 하나 open 합니다.  
이 과정을 반복하여 모든 index 를 open 합니다.  
하지만 이 과정을 사람이 모니터링하면서 진행하기 귀찮아서 저는 스크립트를 하나 만들었습니다.  
필요하신 분은 자신에 맞게 수정하셔서 운영에 사용하셔도 될 것 같습니다.

사용법 : ./open\_index\_monthly.sh 2015-06

```
#!/bin/sh

PREFIX="sec_log_"

if [$# -eq 1]
then
        MONTH=$1
else
        exit
fi

INDEX_DATE_LIST=`curl -s localhost:9200/_cat/indices | grep $PREFIX$MONTH | awk -F $PREFIX '{print $2}' | awk '{print $1}' | sort -r`

for INDEX_DATE in $INDEX_DATE_LIST
do
        INDEX_NAME="$PREFIX$INDEX_DATE"
        CNT=`curl -s localhost:9200/_cat/indices | grep $INDEX_NAME | grep close | wc | cut -c6-7`
        if [$CNT -eq 1]
        then
                DATE=`date +"%Y%m%d_%H%M%S"`
                echo "$DATE index is opening : $INDEX_NAME"
                curl -s -XPOST http://localhost:9200/$INDEX_NAME/_open
                echo ""
                while [1]
                do
                        CNT=`curl -s localhost:9200/_cat/shards | grep $INDEX_NAME | grep -v STARTED | wc | cut -c6-7`
                        DATE=`date +"%Y%m%d_%H%M%S"`
                        echo "$DATE Recovering Shard Count : $CNT"
                        if [$CNT -eq 0]
                        then
                                DATE=`date +"%Y%m%d_%H%M%S"`
                                echo "$DATE index is opened : $INDEX_NAME"
                                break
                        fi
                        sleep 10
                done
        else
                echo "index is already opened : $INDEX_NAME"
        fi
done
```

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [July 6, 2017, 1:51pm UTC](https://discuss.elastic.co/t/elasticsearch/24766/2 "2017-07-06T13:51:52Z")

</div>


