Elasticsearch가 처음이신가요? Elasticsearch 입문용 웨비나에 참여하세요. 지금 무료 클라우드 체험을 시작하거나, 내 기기에서 Elastic을 사용해 볼 수 있습니다.
Elasticsearch 클러스터를 업그레이드하려는 경우, 별도의 새 클러스터를 생성하고 이전 클러스터에서 새 클러스터로 데이터를 전송하는 것이 더 쉬울 때가 있습니다. 따라서 사용자는 다운타임이나 데이터 손실의 위험 없이 모든 애플리케이션을 사용하여 새 클러스터에서 모든 데이터와 구성을 테스트할 수 있다는 이점을 누릴 수 있습니다.
이 접근 방식의 단점은 하드웨어를 일부 복제해야 하고 모든 데이터를 원활하게 전송하고 동기화하려고 할 때 문제가 발생할 수 있다는 점입니다.
한 데이터 센터에서 다른 데이터 센터로 애플리케이션을 마이그레이션해야 하는 경우에도 유사한 절차를 수행해야 할 수 있습니다.
이 문서에서는 Elasticsearch 클러스터 간에 데이터를 전송하는 세 가지 방법에 대해 자세히 설명합니다.
Elasticsearch 클러스터 간에 데이터를 마이그레이션하는 방법은 무엇인가요?
Elasticsearch 클러스터 간에 데이터를 전송하는 방법에는 3가지가 있습니다:
일반적으로 스냅샷을 사용하는 것이 데이터를 전송하는 가장 빠르고 안정적인 방법입니다. 그러나 스냅샷은 동일하거나 상위 버전의 클러스터로만 복원할 수 있으며, 주 버전과 차이가 한 개 이상 나는 경우에는 복원할 수 없습니다. 즉, 6.x 스냅샷을 7.x 클러스터로 복원할 수는 있지만 8.x 클러스터로 복원할 수는 없습니다.
하나 이상의 주요 버전으로 늘려야 하는 경우, 색인을 다시 생성하거나 Logstash를 사용해야 합니다.
이제 Elasticsearch 클러스터 간에 데이터를 전송하는 세 가지 옵션 각각에 대해 자세히 살펴보겠습니다.
1. 원격 클러스터에서 데이터 재색인하기
재색인을 시작하기 전에 새 클러스터의 모든 인덱스에 대해 적절한 매핑을 설정해야 한다는 점을 기억하세요. 이렇게 하려면 적절한 매핑을 사용하여 직접 인덱스를 만들거나 인덱스 템플릿을 사용해야 합니다.
원격에서 재색인 - 구성 필요
원격에서 재색인하려면 데이터를 수신하는 클러스터의 elasticseearch.yml 파일에 아래 구성을 추가해야 하며, Linux 시스템에서는 일반적으로 여기에 위치합니다: /etc/elasticsearch/elasticsearch.yml. 추가할 구성은 다음과 같습니다:
SSL을 사용하는 경우, 각 노드에 CA 인증서를 추가하고 elasticsearch.yml의 각 노드에 대한 명령에 다음을 포함해야 합니다:
또는 모든 Elasticsearch 노드에 아래 줄을 추가하여 SSL 확인을 사용하지 않도록 설정할 수 있습니다. 그러나 이 방법은 이전 옵션만큼 안전하지 않으므로 권장하지 않습니다:
모든 노드에서 이러한 수정 사항을 적용하고 롤링 재시작을 수행해야 합니다. 방법에 대한 자세한 내용은 가이드를 참조하세요.
재색인 명령
elasticsearch.yml 파일에서 원격 호스트를 정의하고 필요한 경우 SSL 인증서를 추가한 후, 아래 명령으로 데이터 재색인을 시작할 수 있습니다:
이 과정에서 시간 초과 오류가 발생할 수 있으므로 기본값에 의존하기보다는 시간 초과에 대한 넉넉한 값을 설정하는 것이 유용할 수 있습니다.
이제 원격에서 재색인할 때 발생할 수 있는 몇 가지 일반적인 오류를 살펴보겠습니다.
원격에서 재색인할 때 흔히 발생하는 오류
1. 화이트리스트에 등재되지 않은 재인덱싱
이 오류가 발생하면 위에서 설명한 대로 Elasticsearch에서 원격 호스트 IP 주소 또는 노드 이름 DNS를 정의하지 않았거나 Elasticsearch 서비스를 다시 시작하는 것을 잊었음을 나타냅니다.
Elasticsearch 클러스터에 대해 이 문제를 해결하려면 모든 Elasticsearch 노드에 원격 호스트를 추가하고 Elasticsearch 서비스를 다시 시작해야 합니다.
2. SSL 핸드셰이크 예외
이 오류는 위에서 설명한 대로 elasticsearch.yml에 reindex.ssl.certificate_authorities를 추가하는 것을 잊었음을 의미합니다. 추가하려면:
2. 스냅샷을 사용하여 데이터 전송
위에서 언급했듯이 스냅샷은 동일하거나 상위 버전의 클러스터로만 복원할 수 있으며, 주요 버전이 하나 이상 차이 나는 경우에는 절대로 복원할 수 없습니다.
하나 이상의 주요 버전으로 늘려야 하는 경우, 색인을 다시 생성하거나 Logstash를 사용해야 합니다.
스냅샷을 통해 데이터를 전송하려면 다음 단계가 필요합니다:
1단계. 첫 번째 Elasticsearch 클러스터에 리포지토리 플러그인 추가 - 스냅샷을 통해 클러스터 간에 데이터를 전송하려면 새 클러스터와 이전 클러스터 모두에서 리포지토리에 액세스할 수 있는지 확인해야 합니다. 일반적으로 AWS, Google, Azure와 같은 클라우드 스토리지 리포지토리가 가장 이상적입니다. 스냅샷을 찍으려면 가이드를 참조하여 설명된 단계를 따르세요.
2단계. Elasticsearch 서비스를 다시 시작합니다(롤링 재시작).
3단계. 첫 번째 Elasticsearch 클러스터를 위한 리포지토리를 생성합니다.
4단계- 두 번째 Elasticsearch 클러스터에 리포지토리 플러그인을 추가합니다.
5단계- 두 번째 Elasticsearch 클러스터에 리포지토리를 읽기 전용으로 추가하기 - 첫 번째 Elasticsearch 클러스터를 생성할 때와 동일한 단계를 반복하여 리포지토리를 추가해야 합니다.
중요 참고: 두 번째 Elasticsearch 클러스터를 동일한 AWS S3 리포지토리에 연결할 때는 리포지토리를 읽기 전용 리포지토리로 정의해야 합니다:
이는 동일한 스냅샷 리포지토리 내에서 Elasticsearch 버전이 혼합되는 위험을 방지하고자 하기 때문에 중요합니다.
6단계- 두 번째 Elasticsearch 클러스터로 데이터 복원 - 위의 단계를 수행한 후 데이터를 복원하여 새 클러스터로 전송할 수 있습니다. 이 문서에 설명된 단계에 따라 새 클러스터로 데이터를 복원하세요.
3. Logstash를 사용하여 데이터 전송
로그스태시로 데이터 전송을 시작하기 전에, 새 클러스터의 모든 인덱스에 대해 적절한 매핑을 설정해야 한다는 것을 기억하세요. 이렇게 하려면 인덱스를 직접 만들거나 인덱스 템플릿을 사용해야 합니다.
두 개의 Elasticsearch 클러스터 간에 데이터를 전송하려면 임시 Logstash 서버를 설정하고 이를 사용하여 두 클러스터 간에 데이터를 전송할 수 있습니다. 소규모 클러스터의 경우 2GB 램 인스턴스로 충분합니다. 대규모 클러스터의 경우 8GB RAM이 장착된 4코어 CPU를 사용할 수 있습니다.
Logstash 설치에 대한 안내는 여기를 참조하세요.
한 클러스터에서 다른 클러스터로 데이터를 전송하기 위한 Logstash 구성
클러스터 A에서 클러스터 B로 단일 인덱스를 복사하는 기본 구성은 다음과 같습니다:
보안 엘라스틱 검색의 경우, 아래 구성을 사용할 수 있습니다:
인덱스 메타데이터
위의 명령은 하나의 명명된 인덱스에 기록합니다. 여러 인덱스를 전송하고 인덱스 이름을 유지하려면 Logstash 출력에 다음 줄을 추가해야 합니다:
또한 문서의 원래 ID를 유지하려면 추가해야 합니다:
문서 ID를 설정하면 데이터 전송 속도가 현저히 느려지므로 필요한 경우에만 원본 ID를 유지하세요.
업데이트 동기화
위에서 설명한 모든 방법은 비교적 오랜 시간이 걸리며 프로세스가 완료될 때까지 기다리는 동안 원본 클러스터의 데이터가 업데이트될 수 있습니다.
데이터 전송 프로세스 중에 발생한 업데이트를 동기화할 수 있는 다양한 전략이 있으며, 이 프로세스를 시작하기 전에 이러한 문제에 대해 생각해 보아야 합니다. 특히 다음 사항을 고려해야 합니다:
- 데이터 전송 프로세스 시작 이후 업데이트/추가된 데이터를 식별할 수 있는 방법(예: 데이터의 'last_update_time' 필드)은 무엇인가요?
- 마지막 데이터를 전송하는 데 어떤 방법을 사용할 수 있나요?
- 기록이 중복될 위험이 있나요? 사용 중인 메서드가 재색인 중에 문서 ID를 알려진 값으로 설정하지 않는 한 일반적으로 있습니다).
업데이트 동기화를 활성화하는 다양한 방법은 아래에 설명되어 있습니다.
1. 대기열 시스템 사용
일부 수집/업데이트 시스템에서는 지난 x일 동안 수신된 데이터 수정 사항을 '재생'할 수 있는 대기열을 사용합니다. 이는 수행된 모든 변경 사항을 동기화할 수 있는 수단을 제공할 수 있습니다.
2. 원격에서 재색인
"last_update_time" > x 일 전인 모든 항목에 대해 재색인 프로세스를 반복합니다. 재인덱스 요청에 '쿼리' 매개변수를 추가하여 이 작업을 수행할 수 있습니다.
3. Logstash
Logstash 입력에 쿼리를 추가하여 "last_update_time" > x일 전인 모든 항목을 필터링할 수 있습니다. 그러나 이 프로세스는 문서_id를 설정하지 않은 경우 시계열이 아닌 데이터에 중복을 발생시킵니다.
4. 스냅샷
인덱스의 일부만 복원할 수는 없으므로 위에서 설명한 다른 데이터 전송 방법 중 하나(또는 스크립트)를 사용하여 데이터 전송 프로세스가 수행된 이후 발생한 변경 사항을 업데이트해야 합니다.
그러나 스냅샷 복원은 재색인/로그스토시보다 훨씬 빠른 프로세스이므로 스냅샷을 전송하는 동안 잠시 동안 업데이트를 일시 중단하여 문제를 완전히 피할 수 있습니다.




