elasticsearch에서는 색인(indexing) 시간이 많이 소요되기 때문에, 색인하는 과정에서 데이터를 검색하다가 데이터 손실을 볼 수 있다. 따라서 색인할 때는 2 개의 색인(index)을 만들어 색인 작업(indexing)을 교대로 하도록 한다. 


zero downtime 으로 가능한 방법이다. 




임의의 이름으로 poi_suggest_v1이란 색인(index)를 생성한다.


curl -s -XPUT http://localhost:9200/poi_suggest_v1/ -d '{

   "settings": {

     "index": {

       "number_of_shards": 1,

       "number_of_replicas": 0

     }

   },

   "mappings": {

     "suggest": {

       "properties": {

         "title": {

           "index": "not_analyzed",

           "type": "string"

         }

       }

     }

   }

}'





poi_suggest_v1에 별명(alias)를 준다.


curl -XPOST localhost:9200/_aliases -d '

{

    "actions": [

        { "add": {

            "alias": "poi_suggest",

            "index": "poi_suggest_v1"

        }}

    ]

}

'



head 플러그인 UI로 보면 별명(alias)가 v1으로 되어 있는 것을 볼 수 있다. (사실 v2 는 아직 생성전이다.)



별명(alias)인 poi_suggest으로 데이터 한 건을 읽어본다. 읽어지고 실제 색인은 _index 속성으로 표시된다. 

애플리케이션은 poi_suggest로 보고 있도록 한다.


curl -XGET localhost:9200/poi_suggest/suggest/1

{"_index":"poi_suggest_v1","_type":"suggest","_id":"1","found":false}





poi_suggest_v2를 생성한다. 


curl -s -XPUT http://localhost:9200/poi_suggest_v2/ -d '{

   "settings": {

     "index": {

       "number_of_shards": 1,

       "number_of_replicas": 0

     }

   },

   "mappings": {

     "suggest": {

       "properties": {

         "title": {

           "index": "not_analyzed",

           "type": "string"

         }

       }

     }

   }

}'



 poi_suggest_v2로  데이터를 가져와 색인(indexing) 하는 작업을 한다. 또는 v1에서 v2로 복사하는 작업을 진행한다.

(전문용어로 scroll-reindex)


색인을 받아들일 준비가 되면, 별명(alias)를  poi_suggest_v2로 변경한다.


curl -XPOST localhost:9200/_aliases -d '

{

    "actions": [

        { "remove": {

            "alias": "poi_suggest",

            "index": "poi_suggest_v1"

        }},

        { "add": {

            "alias": "poi_suggest",

            "index": "poi_suggest_v2"

        }}

    ]

}

'



head 플러그인 UI로 보면 다음과 같을 것이다.



애플리케이션에서 호출하면 poi_suggest는 그대로 존재하는 것처럼 보이지만, 실제 색인은 _index의 결과처럼 poi_suggest_V2 가 된다.


curl -XGET localhost:9200/poi_suggest/suggest/1

{"_index":"poi_suggest_v2","_type":"suggest","_id":"1","found":false}






Posted by '김용환'
,