[Elasticsearch] 클러스터링 작업 - 두 번째 섹션

5976 단어 elasticsearch
본고는 Elasticsearch 공식 안내서의 life inside a cluster장을 번역하였다.

장애 조치(Failover) 기능 추가


하나의 노드만 실행하면 단일 실패 (Single point of failure) 의 문제가 존재할 수 있습니다. 불필요한 문제가 없기 때문입니다.다행히도문제를 해결하려면 우리는 단지 하나의 노드가 더 있어야 한다.

두 번째 노드 시작


두 번째 노드에 가입했을 때 무슨 일이 일어날지 시험하기 위해서는 첫 번째 노드를 시작하는 것처럼 두 번째 노드를 시작해야 한다(ES 실행 참조).같은 폴더 아래에서 여러 노드가 같은 폴더를 공유할 수 있습니다.
단지 두 번째 노드도 첫 번째 노드와 같은 cluster.name(./config/elasticsearch.yml 파일 참조)을 가지고 있으면 스스로 첫 번째 노드가 있는 집단에 식별되고 가입할 수 있다.
만약 그렇지 않다면, 로그를 검사해서 잘못된 정보를 얻는다.오류 원인은 네트워크가 멀티캐스트(Multicast)를 사용하지 않거나 방화벽이 있어 노드 간의 통신을 막았기 때문일 수 있습니다.
만약 우리가 두 번째 노드를 가동했다고 가정하자.오늘날의 집단은 다음과 같이 보일 것이다.
현재 두 번째 노드는 집단으로 증가했고 세 개의 던전 분할도 이 노드에 분배되었다. - 이 세 개의 던전은 각각 세 개의 주 분할의 던전이다.이것은 이때 우리가 두 노드 중 어느 하나를 잃었다고 가정해도 데이터를 잃지 않는다는 것을 의미한다.
색인된 문서는 우선 주 섹션에 저장된 다음 병렬적으로 관련된 복사본 섹션에 복사됩니다.
이것은 이 문서가 주 분할 또는 임의의 사본을 통해 얻을 수 있음을 보장한다.
이때 집단의 건강 상태는 green으로 나타난다.모든 6개의 슬라이스 (메인 슬라이스 3개와 사본 슬라이스 3개) 가 활성 상태임을 나타냅니다.
{
   "cluster_name":          "elasticsearch",
   "status":                "green", 
   "timed_out":             false,
   "number_of_nodes":       2,
   "number_of_data_nodes":  2,
   "active_primary_shards": 3,
   "active_shards":         6,
   "relocating_shards":     0,
   "initializing_shards":   0,
   "unassigned_shards":     0
}

지금우리의 집단은 정상적인 기능을 실행할 수 있을 뿐만 아니라 고가용성도 갖추고 있다.

수평 확장(Scale Horizontally)


응용 프로그램이 확장됨에 따라 ES는 어떻게 집단을 확장합니까?세 번째 노드를 시작했다고 가정하면 다음과 같이 클러스터가 자체 구조를 다시 구성할 수 있습니다.
노드 1과 노드 2에 각각 하나의 분할이 현재 새로운 노드 3로 이동되었다.이때 각 노드에는 원래의 세 개가 아니라 두 개의 조각이 있다.즉, 각 노드의 하드웨어 리소스(CPU, RAM. I/O)는 더 적은 슬라이스에 할당되어 각 슬라이스의 성능을 향상시킬 수 있습니다.
모든 분할 자체는 하나의 완전한 검색 엔진으로 하나의 노드의 모든 자원을 완전히 이용할 수 있다.따라서 6개의 블록(3주, 3부본)이 있는 상황에서 우리의 집단은 최대 6개의 노드로 확장될 수 있으며, 이때 각 노드에는 1개의 블록만 있다.따라서 한 조각씩 나누면 이 노드의 100% 자원을 보유할 수 있다.

계속 확장할 경우


만약에 우리가 6개 이상의 노드로 확장하고 싶다면?
색인을 만들 때, 주 분할의 수량이 고정되었다.실제로 이 수량은 이 인덱스에 저장할 수 있는 최대 데이터량을 결정한다.(실제 수량은 당신의 데이터 특징과 하드웨어에 달려 있다.)
그러나 읽기 요청 - 검색 또는 문서 얻기 - 주 분할 또는 분할 처리될 수 있기 때문에 데이터가 많은 복제본이 있으면 검색의 흡수량이 더욱 높아질 수 있음을 의미한다.
사본 분할의 수량은 하나의 활동 집단에서 동태적으로 변동할 수 있다. 이것은 우리가 반드시 집단 규모를 조정해야 한다는 것에 동의한다.현재 사본 분할 수량을 1에서 2로 조정합니다.
PUT /blogs/_settings
{
   "number_of_replicas" : 2
}

조정된 조직은 다음과 같습니다.
현재 블로그 인덱스에는 9개의 섹션이 존재한다. 3개의 메인 섹션과 6개의 복사본 섹션이다.이것은 현재 우리가 최대 9개의 노드로 확장할 수 있다는 것을 의미한다.모든 노드 중에는 단지 하나의 분편만 있다.이것은 검색 성능을 원래의 3개 노드에 비해 비교할 수 있다.세 배로 올리다.
물론 노트는 사본 분할 수량만 추가하고 노드를 추가하지 않는 수량은 성능에 아무런 영향을 주지 않습니다.이것은 이 상황 때문이다.모든 분할은 그 노드의 일부 자원만 얻을 수 있다.
너는 처리량을 높이기 위해 하드웨어 자원을 추가해야 한다.
그러나 이 새로 추가된 사본들은 의심할 여지없이 데이터의 군더더기를 추가했다. 위의 그림처럼 설정하면 우리는 이제 두 노드를 잃어버려도 데이터를 잃어버리지 않을 수 있다.

대응 실패


우리는 ES가 노드의 실패에 대응할 수 있다고 말했기 때문에 한번 해 봅시다.만약 우리가 첫 번째 노드를 죽였다고 가정하면그러면 노드가 이렇게 됩니다.
살해된 노드는 마스터 노드(Master Node)입니다.
한 집단에 반드시 하나의 주 노드가 있어야 집단이 정상적으로 작업할 수 있기 때문에 첫 번째 일은 남은 노드가 새로운 주 노드를 선택하는 것이다. 예를 들어 노드 2.
우리가 노드 1을 죽였을 때같은 시간에 메인 필름 1과 메인 필름 2를 잃어버렸고 메인 필름이 부족할 때 색인은 정상적으로 작동하지 않습니다.
이때 집단의 건강 상태를 검사한다고 가정하면 우리는 의심할 여지없이 red을 얻을 수 있다. 모든 주분편이 활동 상태에 있는 것은 아니다!
다행히도 잃어버린 두 개의 메인 필름의 사본 필름은 다른 노드에 완전무결하게 존재한다.그래서 주 노드로 선택된 노드 2가 먼저 해야 할 일은 노드 2와 노드 3의 대응 부본 분할을 향상시켜 주 분할이 되도록 하는 것이다.이때 집단의 상태는 yellow으로 변한다. 모든 주분은 활동 상태에 있다.조각의 승급은 바로 작동할 것이다. 마치 스위치를 당기는 것처럼.
그럼 우리 집단은 왜 yellow이야?green이 아니라?우리는 3개의 메인 필름이 있지만, 우리는 모든 메인 필름에 2개의 부본 필름이 있어야 한다고 지정했다. 그러나 현재 우리는 단지 1개의 부본 필름을 분배할 수 있다.
이 조직은 집단의 상태가 green으로 변했지만, 여기서 우리는 지나치게 걱정할 필요가 없다. 만약 우리가 노드 2를 죽였다면.응용 프로그램은 데이터를 잃지 않고 계속 실행할 수 있습니다.노드 3은 각 조각의 복사본을 저장했기 때문이다.
노드 1을 다시 시작한다고 가정하십시오.이 때 집단은 아직 분배되지 않은 사본의 조각을 분배할 수 있다.그래서 이러한 조직 구조로 회복되었다.
노드 1에 이전의 조각이 여전히 존재한다고 가정하십시오.그러면 그것은 그것들을 계속 사용하려고 시도할 것이다. 단지 상응하는 메인 필름에서 최신 변화 데이터를 복사해야만 할 뿐이다.
이제 당신은 ES가 어떻게 파편을 사용하여 팽창의 정도와 어떻게 이해하는 데이터의 안전성을 실현해야 합니다.잠시 후에 우리는 영화 등에 관한 세부 사항을 소개할 것이다.

좋은 웹페이지 즐겨찾기