Elasticsearch 집단 빨간색, 분할 복구 불가: cannot allocatebecause all found copies of the shard are either stale or c

3196 단어 elasticsearch

문제


노드를 여러 번 다시 시작할 때 0 분배할 수 없는 문제가 생겼다.
elasticsearch는 Allocation IDs라는 개념을 사용합니다. 이것은 서로 다른 블록을 구분하는 유일한 표지(UUIDS)입니다.
Allocation IDs는shard급 메타데이터에 저장됩니다. 모든shard는 자신의 Allocation ID를 가지고 있으며, 집단 메타데이터에는 최신shard로 여겨지는 Allocation ID 집합을 기록합니다. 이 집합을 in-sync allocation IDs라고 합니다.만약 네트워크나 다른 이유로 주부shard가 동기화되지 않는다면, 복사본의shard는 in-syncallocation IDs에서 차일 것입니다.
아마도 상술한 문제가 생겼을 것이다.

해결하다


다음 명령을 사용하여 확인합니다.
GET/_cluster/allocation/explain
explain API는 왜 메인 슬라이스가 분배되지 않은 상태인지 알려주고 각 노드에 기반한 더 자세한 분배 정보를 제공합니다.주 노드는 그룹에서 현재 사용할 수 있는 노드에서 동기화 (in-sync) 분할 복사본을 찾을 수 없습니다.
{
  "index" : "my_index",
  "shard" : 0,
  "primary" : true,
  "current_state" : "unassigned",
  "unassigned_info" : {
    "reason" : "NODE_LEFT",
    "at" : "2017-01-26T09:20:24.054Z",
    "last_allocation_status" : "no_valid_shard_copy"
  },
  "can_allocate" : "no_valid_shard_copy",
  "allocate_explanation" : "cannot allocate because all found copies of the shard are either stale or corrupt",
  "node_allocation_decisions" : [
    {
      "node_id" : "0ZJS1ffpRg-E_5L0Q0NnDA",
      "node_name" : "data5-3",
      "transport_address" : "192.168.1.108:9303",
      "node_decision" : "no",
      "store" : {
          "found": false
      }
    },
     {
      "node_id" : "0ZJS1ffpRg-E_5L0Q0NnDA",
      "node_name" : "data5-3",
      "transport_address" : "192.168.1.108:9303",
      "node_decision" : "no",
      "store" : {
          "found": false
      }
    },
    .......
    .......
    {
      "node_id" : "JSofMo_0TSieKnfI4HmEcQ",
      "node_name" : "data6",
      "transport_address" : "192.168.1.109:9300",
      "node_decision" : "no",
      "store" : {
        "in_sync" : false,
        "allocation_id" : "J3gygIvYT06tKSW5rYkGtw"
      }
    }
  ]
}
cannot allocate because all found copies of the shard are either stale or corrupt 위의 결과에서 보실 수 있습니다data6 노드에서 사용할 수 있는 조각 복사본은 낡았다(store.in_sync =false).in-sync 분할 복사본을 가진 노드를 시작하면 그룹을 그린으로 다시 만듭니다.만약 그 노드가 영원히 돌아온다면?
reroute API에서 하위 명령 allocate_ 제공stale_primary, 낡은 분할을 위주로 분할하는 데 사용됩니다.이 명령을 사용하면 지정된 조각 복사본에 누락된 데이터가 손실됩니다.슬라이스 동기화를 일시적으로 사용할 수 없는 경우 이 명령을 사용하면 동기화 복사본에서 최근에 업데이트된 데이터를 의미합니다.그것을 군집체로 하여금 적어도 일부 데이터를 운행하게 하는 마지막 조치로 간주해야 한다.모든 분할 사본이 존재하지 않는 상황에서 Elasticsearch가 빈 분할 사본을 사용하여 주 분할을 분배하도록 강요할 수 있습니다. 이것은 이 분할과 관련된 모든 이전 데이터를 잃어버렸다는 것을 의미합니다.말하지 않아도 알로카테_empty_primary 명령은 최악의 경우에만 사용할 수 있으며, 그 의미는 이해하기 쉽다.
명령을 사용하여 복구하려면 다음과 같이 하십시오.
POST _cluster/reroute?pretty
{
	"commands": [
		{
			"allocate_stale_primary": {
				"index": "my_index",
				"shard": 0,
				"node": "data6",
				"accept_data_loss": true
			}
		}
	]
}

좋은 웹페이지 즐겨찾기