대형 ES 클러스터가 있습니다. 디스크 경고 정책이 90 % (내 ES 최고 워터 마크가 87 %로 설정)로 설정되어 있으므로 일반적으로 디스크 경고가 발생합니다. 샤드 할당을 보면 노드가 높은 디스크 사용량 노드에서 임의의 노드로 이동하는 것을 볼 수 있습니다.이 노드는 디스크 문제를 신속하게 해결하지만 일반적으로 디스크 사용량이 가장 적은 노드로는 해당 샤드를 이동하지 않습니다. 높은 워터 마크에 도달했을 때 임의의 노드로 이동하는 대신 디스크 검색 사용률이 가장 낮은 노드로 elasticsearch move shard를 강제로 적용 할 수 있습니까?elasticsearch는 샤드 이동에서 대상 노드를 어떻게 선택합니까?
1
A
답변
1
사실 ES 계정 a lot of factors에 걸리는 임의 결정을 사용하지 않습니다
- MaxRetryAllocationDecider - 파편 할당이 성공
- NodeVersionAllocationDecider없이 N 번 시도 된 경우 모든 노드에 할당되는 파편을 방지 - 버전과 호환되지 않을 수있는 노드에서 재배치 또는 할당을 방지합니다.
- SameShardAllocationDecider - 동일한 샤드의 여러 인스턴스가 동일한 노드에 할당되지 않도록합니다.
- DiskThresholdDecider - 샤드가 잠재적으로 할당되고있는 노드에 디스크 공간이 충분한 지 확인합니다.
- ShardsLimitAllocationDecider - 인덱스 또는 노드 단위로 노드 당 샤드 수를 제한합니다.
- AwarenessAllocationDecider - 노드 구성에 정의 된 인식 키 - 값 쌍을 기반으로 샤드 할당을 제어합니다.
위에서 볼 수 있듯이 많은 요소가 있으며 디스크 공간 검사기가 부족합니다. 그러므로 유일한 해결책은 결정자에게 제공 할 org.elasticsearch.plugins.ClusterPlugin
을 확장하는 your own plugin을 작성하는 것입니다. 그러나 나는 그것이 ES 할당 결정 부 패턴의 주요 디자인/아이디어 모순 때문에 좋은 생각이 아니라고 생각 :
- 이전의 모든 결정기
- 긍정적 솔루션의 결정에 거부권을 행사할 수있는 결정자는 다음에 영향을주지 않습니다 결정
- 결정기의 대부분이 사용하는 로컬 노드의 데이터
이 전략은 당신이 금지 할 수 있으며 클러스터 내에서 선택할 수있는 자유를 극대화하도록 설계되었습니다. 그래서 밖에서 무작위로 움직이는 것처럼 보입니다. 이것은 크고 수명이 긴 클러스터를위한 훌륭한 전략입니다.
어떤 종류의 바이어스가 도입되면 생산에 치명적인 문제가 발생할 수 있습니다. 디스크 공간 기반의 결정자가 있고 한 서버에 엄청나게 큰 HDD가 있다고 가정 해 보겠습니다. 잠시 후 모든 샤드가이 기계에 할당됩니다. 이 문제를 해결하려면 CPU, 메모리, 네트워크, 파편 등의 중요한 자원을 고려해야합니다. 또한 각 요인에 대한 척도와 가중치를 찾아야합니다.