아빠는 개발자

[es] Full-cluster restart and rolling restart 본문

Elastic/elasticsearch

[es] Full-cluster restart and rolling restart

father6019 2024. 2. 4. 17:12
728x90
반응형

전체 클러스터 재시작 및 순차적 재시작 

전체 클러스터 다시 시작 또는 롤링 다시 시작을 수행하려는 상황이 있을 수 있습니다 . 전체 클러스터 재시작 의 경우 클러스터의 모든 노드를 종료하고 다시 시작하는 반면 , 롤링 재시작 의 경우 한 번에 하나의 노드만 종료하므로 서비스가 중단되지 않습니다.

 

전체 클러스터 다시 시작

1. 샤드 할당을 비활성화합니다. Disable shard allocation.

노드를 종료하면 할당 프로세스는 index.unassigned.node_left.delayed_timeout해당 노드의 샤드를 클러스터의 다른 노드에 복제하기 시작하기 전에(기본적으로 1분) 기다립니다. 이 작업에는 많은 I/O가 포함될 수 있습니다. 노드가 곧 다시 시작될 예정이므로 이 I/O는 필요하지 않습니다. 노드를 종료하기 전에 복제본 할당을 비활성화 하면 시계 경주를 피할 수 있습니다 .

 

PUT _cluster/settings
{
  "persistent": {
    "cluster.routing.allocation.enable": "primaries"
  }
}


#CURL
curl -X PUT "localhost:9200/_cluster/settings?pretty" -H 'Content-Type: application/json' -d'
{
  "persistent": {
    "cluster.routing.allocation.enable": "primaries"
  }
}
'

 

 

cluster.routing.allocation.enable

특정 종류의 샤드에 대한 할당을 활성화 또는 비활성화합니다.

  • 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. - 어떤 인덱스에도 어떤 종류의 샤드 할당도 허용되지 않습니다.

 

이 설정은 노드를 다시 시작할 때 로컬 기본 샤드 복구에 영향을 주지 않습니다. 할당되지 않은 기본 샤드의 복사본이 있는 다시 시작된 노드는 해당 할당 ID가 클러스터 상태의 활성 할당 ID 중 하나와 일치한다고 가정하여 해당 기본 샤드를 즉시 복구합니다.

 

 

2. 인덱싱을 중지하고 동기화된 플러시를 수행합니다.  Stop indexing and perform a synced flush.

- 동기화된 플러시를 수행하면 샤드 복구 속도가 빨라집니다.

 

POST _flush/synced

curl -X POST "localhost:9200/_flush/synced?pretty"

 

동기화된 플러시를 수행할 때 응답을 확인하여 오류가 없는지 확인하세요. 보류 중인 인덱싱 작업으로 인해 실패한 동기화된 플러시 작업은 응답 본문에 나열되지만 요청 자체는 여전히 200 OK 상태를 반환합니다. 실패하면 요청을 다시 발행하십시오.

 

Request

POST /<index>/_flush/synced

GET /<index>/_flush/synced

POST /_flush/synced

GET /_flush/synced

 

3. (선택) 활성 기계 학습 작업 및 데이터 피드와 관련된 작업을 일시적으로 중지합니다. Temporarily stop the tasks associated with active machine learning jobs and datafeeds. (Optional)

 

클러스터를 종료할 때 기계 학습 작업 및 데이터 피드를 처리하는 두 가지 옵션이 있습니다.

 

기계 학습 작업 및 데이터 피드와 관련된 작업을 일시적으로 중지하고 업그레이드 모드 설정 API를 사용하여 새 작업이 열리지 않도록 합니다 .

 

업그레이드 모드를 비활성화하면 자동으로 저장된 마지막 모델 상태를 사용하여 작업이 재개됩니다. 이 옵션은 종료 중에 활성 작업을 관리하는 오버헤드를 방지하며 명시적으로 데이터 피드를 중지하고 작업을 닫는 것보다 빠릅니다.

 

POST _ml/set_upgrade_mode?enabled=true


curl -X POST "localhost:9200/_ml/set_upgrade_mode?enabled=true&pretty"

 

모든 데이터 공급을 중지하고 모든 작업을 닫습니다 . 이 옵션은 닫을 때 모델 상태를 저장합니다. 클러스터를 다시 시작한 후 작업을 다시 열면 정확히 동일한 모델을 사용합니다. 그러나 최신 모델 상태를 저장하는 것은 업그레이드 모드를 사용하는 것보다 시간이 더 오래 걸립니다. 특히 작업이 많거나 모델 상태가 큰 작업이 있는 경우에는 더욱 그렇습니다.

 

 

4. 모든 노드를 종료합니다.

systemd 사용하여 Elasticsearch를 실행하는 경우:

sudo systemctl stop elasticsearch.service

SysV init 으로 Elasticsearch를 실행하는 경우 :

sudo -i service elasticsearch stop

Elasticsearch를 데몬으로 실행하는 경우:

kill $(cat pid)

 

 

5. 필요한 변경을 수행합니다.

6. 노드를 다시 시작합니다.

 

GET _cat/health

GET _cat/nodes

모든 노드가 클러스터에 참여할 때까지 기다렸다가 노란색 상태를 보고합니다.

 

 

할당을 다시 활성화합니다.

 

머신러닝 작업을 다시 시작하세요. (선택 과목)

 

롤링 재시작

  1. 샤드 할당을 비활성화합니다.
    노드를 종료하면 할당 프로세스는 index.unassigned.node_left.delayed_timeout해당 노드의 샤드를 클러스터의 다른 노드에 복제하기 시작하기 전에(기본적으로 1분) 기다립니다. 이 작업에는 많은 I/O가 포함될 수 있습니다. 노드가 곧 다시 시작될 예정이므로 이 I/O는 필요하지 않습니다. 노드를 종료하기 전에 복제본 할당을 비활성화 하면 시계 경주를 피할 수 있습니다 .
PUT _cluster/settings
{
  "persistent": {
    "cluster.routing.allocation.enable": "primaries"
  }
}

curl -X PUT "localhost:9200/_cluster/settings?pretty" -H 'Content-Type: application/json' -d'
{
  "persistent": {
    "cluster.routing.allocation.enable": "primaries"
  }
}
'

 

 

  1. 인덱싱을 중지하고 동기화된 플러시를 수행합니다.

 

동기화된 플러시를 수행할 때 응답을 확인하여 오류가 없는지 확인하세요. 보류 중인 인덱싱 작업으로 인해 실패한 동기화된 플러시 작업은 응답 본문에 나열되지만 요청 자체는 여전히 200 OK 상태를 반환합니다. 실패하면 요청을 다시 발행하십시오.

 

동기화된 플러시는 더 이상 사용되지 않으며 8.0에서 제거될 예정입니다. 플러시는 Elasticsearch 7.6 이상에서 동기화된 플러시와 동일한 효과를 갖습니다.

 

동기화된 플러시를 수행하면 샤드 복구 속도가 빨라집니다.

POST _flush/synced

curl -X POST "localhost:9200/_flush/synced?pretty"

 

활성 기계 학습 작업 및 데이터 피드와 관련된 작업을 일시적으로 중지합니다. (선택 )

클러스터를 종료할 때 기계 학습 작업 및 데이터 피드를 처리하는 두 가지 옵션이 있습니다.

순차적 재시작을 수행하는 경우 기계 학습 작업을 계속 실행 상태로 둘 수도 있습니다. 기계 학습 노드를 종료하면 해당 작업이 자동으로 다른 노드로 이동하고 모델 상태를 복원합니다. 이 옵션을 사용하면 종료 중에 작업을 계속 실행할 수 있지만 클러스터에 로드가 증가합니다.

기계 학습 작업 및 데이터 피드와 관련된 작업을 일시적으로 중지하고 업그레이드 모드 설정 API를 사용하여 새 작업이 열리지 않도록 합니다 .

 

업그레이드 모드를 비활성화하면 자동으로 저장된 마지막 모델 상태를 사용하여 작업이 재개됩니다. 이 옵션은 종료 중에 활성 작업을 관리하는 오버헤드를 방지하며 명시적으로 데이터 피드를 중지하고 작업을 닫는 것보다 빠릅니다.

POST _ml/set_upgrade_mode?enabled=true

모든 데이터 공급을 중지하고 모든 작업을 닫습니다 . 이 옵션은 닫을 때 모델 상태를 저장합니다. 클러스터를 다시 시작한 후 작업을 다시 열면 정확히 동일한 모델을 사용합니다. 그러나 최신 모델 상태를 저장하는 것은 업그레이드 모드를 사용하는 것보다 시간이 더 오래 걸립니다. 특히 작업이 많거나 모델 상태가 큰 작업이 있는 경우에는 더욱 그렇습니다.

기계 학습 기능을 사용하려면 특정 구독이 필요합니다 .

  1. 롤링 재시작 시 단일 노드를 종료합니다.

systemd 사용하여 Elasticsearch를 실행하는 경우:

sudo systemctl stop elasticsearch.service

SysV init 으로 Elasticsearch를 실행하는 경우 :

sudo -i service elasticsearch stop

Elasticsearch를 데몬으로 실행하는 경우:

kill $(cat pid)

 

  1. 필요한 변경을 수행합니다.
  2. 변경한 노드를 다시 시작합니다.
    GET _cat/nodes
    
    
    curl -X GET "localhost:9200/_cat/nodes?pretty"
  3. 노드를 시작하고 로그 파일을 확인하거나 요청을 제출하여 노드가 클러스터에 연결되는지 확인합니다 _cat/nodes.
  4. 샤드 할당을 다시 활성화합니다.
    PUT _cluster/settings
    {
      "persistent": {
        "cluster.routing.allocation.enable": null
      }
    }
       
         
    curl -X PUT "localhost:9200/_cluster/settings?pretty" -H 'Content-Type: application/json' -d'
    {
      "persistent": {
        "cluster.routing.allocation.enable": null
      }
    }
    '
  5. 노드가 클러스터에 조인되면 cluster.routing.allocation.enable 샤드 할당을 활성화하는 설정을 제거하고 노드 사용을 시작합니다.

 

  1. 롤링 재시작의 경우 반복합니다.

노드가 복구되고 클러스터가 안정되면 변경해야 하는 각 노드에 대해 이러한 단계를 반복합니다.

 

  1. 머신러닝 작업을 다시 시작하세요. (선택)
    POST _ml/set_upgrade_mode?enabled=false
    
    
    curl -X POST "localhost:9200/_ml/set_upgrade_mode?enabled=false&pretty"
    노드를 중지하기 전에 모든 기계 학습 작업을 닫은 경우 작업을 열고 Kibana에서 데이터 피드를 시작하거나 열려 있는 작업을 사용하여 데이터 피드 API를 시작 하세요 .
  2. 기계 학습 작업과 관련된 작업을 일시적으로 중지한 경우 업그레이드 모드 설정 API를 사용하여 활성 상태로 되돌립니다.
728x90
반응형