elasticsearch의 복구
5235 단어 elasticsearch
무엇이 복구입니까?
elasticsearch에서 recovery는 한 인덱스의 조각을 다른 노드에 분배하는 과정을 가리킨다. 일반적으로 스냅샷 복구, 인덱스 복제 조각의 변경, 노드 고장 또는 재부팅할 때 발생한다. 마스터 노드는 전체 집단과 관련된 상태 정보를 저장하기 때문에 어떤 조각을 재분배하고 어느 노드에 분배해야 하는지 판단할 수 있다. 예를 들어
그러나 복구 과정은 CPU, 메모리, 노드 간의 네트워크 대역폭 등 추가 자원을 소모해야 한다.집단의 서비스 성능이 떨어지고 심지어 일부 기능이 일시적으로 사용할 수 없기 때문에 복구 과정과 관련된 설정을 파악하여 불필요한 소모와 문제를 줄일 필요가 있다.
집단fullrestart로 인한 데이터 왕복 복사 감소
때때로 es 집단이 전체적으로 재개되는 상황을 만날 수 있다. 예를 들어 하드웨어 업그레이드, 불가항력의 의외 등이다. 그러면 다시 집단을 재개하는 것은 문제를 가져올 수 있다. 일부 노드가 우선화되고 주 노드가 우선적으로 선출되며 주 노드가 있으면 이 주 노드는 즉시recovery의 과정을 주재한다.
그러나 이때 이 집단 데이터는 아직 완전하지 않다. (다른 노드가 일어나지 않았다.) 예를 들어 A 노드의 주 분할에 대응하는 복제 분할이 있는 B 노드가 일어나지 않았지만, 주 노드는 A 노드의 복제 분할이 없는 몇 개의 주 분할을 사용할 수 있는 C 노드에 다시 복사할 것이다.그러나 B 노드가 성공하고 자체 검사를 할 때 자신의 노드에 저장된 A 노드의 메인 블록에 대응하는 복제 블록이 C 노드에 이미 나타났다는 것을 발견하면 자신의 노드에서'실효'된 데이터(A 노드의 몇 개의 복제 블록)를 직접 삭제한다. 이런 상황은 여러 노드의 집단에 빈번하게 나타날 가능성이 높다.
그러나 전체 집단이 회복된 후에 그 각 노드의 데이터 분포는 분명히 불균형적이다. (먼저 시작한 노드가 데이터를 복구했고 나중에 일어난 노드에서 무효한 데이터를 삭제했다.) 이때master는 Rebalance의 과정을 촉발하여 데이터를 각 노드 사이로 옮기는데 이 과정은 대량의 네트워크 데이터를 소모한다.따라서 우리는 복구 관련 파라미터를 합리적으로 설정하여 복구 과정을 최적화해야 한다.
gateway.expected_nodes: 3
gateway.expected_master_nodes: 3
gateway.expected_data_nodes: 3
집단이 기대하는 노드 수 조건이 충족되기 전에recovery 과정이 기다립니다
gateway.recover_after_time
지정된 시간, 대기 시간이 초과되면 다음과 같은 조건에 따라 복구 프로세스를 실행할지 여부를 판단합니다.gateway.recover_after_nodes: 3 # 3 (master data )
gateway.recover_after_master_nodes: 3 # 3 master
gateway.recover_after_data_nodes: 3 # 3 data
위의 세 가지 설정이 하나를 충족시키면 복구 과정을 실행할 수 있습니다.다음과 같이 구성된 클러스터가 있는 경우
gateway.expected_data_nodes: 10
gateway.recover_after_time: 5m
gateway.recover_after_data_nodes: 8
이때 집단은 5분 안에 10개의 데이터 노드가 집단에 가입하거나 5분 후에 8개 이상의 데이터 노드가 집단에 가입하면 복구 과정을 시작합니다.
운영 복제본 간 데이터 복제 감소
만약fullrestart가 아니라 하나의 노드를 다시 시작하면 서로 다른 노드 사이를 복제할 수 있습니다. 이 문제를 피하기 위해 다시 시작하기 전에 그룹을 닫을 수 있습니다shard allocation
. PUT _cluster/settings
{
"transient": {
"cluster.routing.allocation.enable":"none"
}
}
노드가 재부팅되면 다시 엽니다.PUT _cluster/settings
{
"transient": {
"cluster.routing.allocation.enable":"all"
}
}
이렇게 하면 노드가 다시 시작된 후에 가능한 한 이 노드에서 직접 데이터를 복구할 수 있다.그러나es1.6 버전 이전에 상기 조치를 취했음에도 불구하고 대량의 주부분편 간의 데이터 복사가 나타날 수 있다는 점은 이해하기 어렵다. 주부분편 데이터는 완전히 일치한다. 노드가 재부팅된 후에 본 노드의 사본에서 직접 수증을 다시 복원하면 된다. 왜 다시 주부분편에서 복제해야 하는가?복구는 주 부분편의 segment 파일(분단 파일)을 간단하게 비교하여 어떤 데이터가 일치하는지 로컬 복구가 가능한지, 어떤 일치하지 않으면 다시 복사해야 하는지 판단하기 때문이다.한편, 서로 다른 노드의segment 파일은 완전히 독립적으로 실행된다. 이것은 주 부본merge의 깊이가 완전히 일치하지 않아 제때에 문서 집합이 똑같아지고segment 파일은 완전히 같지 않을 수 있다.
이 문제를 해결하기 위해 es1.6 버전 이후에syncedflush(동기화 리셋)의 새로운 기능을 추가했습니다. 5분 동안 업데이트되지 않은shard에 대해syncedflush를 자동으로 추가합니다. 사실은 대응하는shard에 대한syncedflushid를 추가합니다. 이렇게 노드가 리셋된 후에 주부shard의syncedflushid를 비교하면 두 shard가 완전히 같은지 알 수 있고 불필요한 segment 파일 복사를 피할 수 있습니다.
주의해야 할 것은syncedflush는 콜드 인덱스에만 유효하고, 핫 인덱스 (5분 안에 업데이트된 인덱스) 에는 무효이며, 다시 시작하는 노드에 핫 인덱스가 포함되어 있다면, 대량의 복사를 피할 수 없습니다.대량의 열 인덱스를 포함하는 노드를 재부팅하려면 다음 절차에 따라 재부팅 프로세스를 실행하여 복구 프로세스를 순식간에 완성할 수 있습니다.
PUT _cluster/settings
{
"transient": {
"cluster.routing.allocation.enable":"none"
}
}
PUT _cluster/settings
{
"transient": {
"cluster.routing.allocation.enable":"all"
}
}
특대열 인덱스가 왜 느리게 회복됩니까
콜드 인덱스에 대해 데이터가 더 이상 업데이트되지 않기 때문에(elasticsearch에 대해 5분, 오래되었습니다)syncedflush를 이용하여 로컬에서 데이터를 신속하게 복구할 수 있습니다. 핫 인덱스, 특히shard의 큰 열 인덱스는syncedflush파가 쓸모가 없기 때문에segmentfile를 대량으로 복사해야 하는 것을 제외하고translogrecovery가 느린 더 중요한 원인이 될 수 있습니다.
이translog recovery가 뭔지 연구해 봅시다!노드가 재부팅되면 운영 슬라이스에서 데이터를 복구하고 슬라이스를 복제하는 데 3단계가 걸립니다.
이를 통해 알 수 있듯이 복구 과정이 끝나기 전에translog는 제거될 수 없습니다.만약shard가 비교적 크다면 첫 번째 단계는 시간이 오래 걸리고 이 단계에서 발생하는translog가 매우 크다. 간단한 파일 복사보다 translog를 다시 넣는 데 시간이 더 걸리기 때문에 두 번째 단계의translog 소모 시간도 현저히 증가했다.3단계가 되면 다시 넣어야 하는translog가 2단계보다 더 많을 수 있습니다.중요한 것은 3단계는 새로운 인덱스 (쓰기) 요청을 막을 수 있기 때문에 쓰기에 대한 실시간 요구가 높은 상황에서 성능 저하를 초래하고 사용자 체험에 매우 영향을 미친다.따라서 특대 열 인덱스 복구 속도를 높이려면 이전 섹션의 방식을 참조하는 것이 좋습니다.
이렇게 하면 데이터 지연의 영향을 최소화할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
kafka connect e elasticsearch를 관찰할 수 있습니다.No menu lateral do dashboard tem a opção de connectors onde ele mostra todos os clusters do kafka connect conectados atu...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.