ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 운영 중인 엘라스틱서치 순차적 재시작 ( 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
      }
    }
    '
    반응형
Designed by Tistory.