본 포스팅은 2022년 01월 01일을 기준으로 작성되었습니다.
Elasticsearch CCR(클러스터 간 복제) 기능을 사용한 인덱스(데이터) 복제
Cross-Cluster Replication (CCR: 클러스터 간 복제) X-Pack
CCR 기능을 사용하면 원격 클러스터의 인덱스를 로컬 클러스터로 복제할 수 있습니다.
데이터 센터에서 장애가 발생해도 검색 요청을 처리할 수 있도록 백업 역할
검색량이 인덱싱 처리량에 영향을 미치지 않도록 방지
사용자와 지리적으로 가까운 곳에서 검색 요청을 처리하여 검색 지연 시간 단축
Overview(개요)
CCR(클러스터 간 복제)은 Index-by-Index로 수행됩니다.
복제(replication)는 인덱스 수준에서 구성되며, Leader Index는 원본 인덱스을 뜻하며, Follower Index는 복제된 인덱스를 뜻합니다.
CCR(클러스터 간 복제)은 Active-Passive 모델을 사용합니다.
Leader Index는 write(쓰기)가 가능하고, Follower Index는 write(쓰기)가 불가합니다.
CCR(클러스터 간 복제)의 Replication(복제)은 pull 기반입니다.
Replication이 Follower Index에 의해 주도 된다는 것을 의미합니다. 따라서 Leader Index의 상태 관리가 간편해지고, CCR이 Leader Index의 인덱싱을 방해하지 않습니다.
* CCR은 플래티넘 라이선스 이상에서 사용 가능합니다.
재해 복구(DR) / 고가용성(HA)
CCR을 사용하여 DR/HA를 Elasticsearch에서 직접 해결할 수 있습니다.
데이터 지역성
사용자와 서버를 가까이 두기 위한 데이터 복제: 데이터를 전 세계 데이터센터에 복제하여 데이터와 애플리케이션 서버 사이의 거리를 최소화 합니다.
Ex) 런던과 뉴욕에 사무실을 두고 있는 증권사A가 있다. 런던 사무실 현지에서 작성되는 모든 거래를 뉴욕 지점으로 복제할 수 있고, 마찬가지로 뉴욕 사무실에서 작성되는 모든 거래를 런던 지점으로 복제할 수 있다. (어느 지점에 가도 증권사A에서의 모든 거래를 조회할 수 있다)
중앙화된 보고
규모가 작은 여러대의 클러스터에서 중앙 클러스터로 데이터를 복제하는 방법입니다. 대규모 네트워크에서 사용하면 유용합니다.
Ex) 세계 각지에 지점을 둔 글로벌 은행A는 (각 지점에 한대씩) 총 100개의 ES 클러스터를 보유하고 있다. 은행 A는 CCR을 사용하여 전 세계 모든(100개) 은행의 이벤트를 중앙 클러스터로 복제하여 중앙 센터에서 모든 지점의 이벤트를 분석하고 집계할 수 있다.
솔루션 관리
Elasticsearch의 CCR을 이용하면, 사용자가 복잡한 솔루션을 관리해야 하는 부담과 단점을 없애줍니다. Kibana에서 CCR 모니터링이 가능합니다.
클러스터 간 복제를 인덱스로 설정 하더라도 샤드 수준에서 복제를 수행합니다.
Follower 인덱스는 Leader 인덱스와 동일한 수의 샤드를 갖습니다.
Leader의 모든 작업은 Follower에 의해 복제됩니다. (문서 생성, 업데이트,삭제 작업 포함)
Follower 샤드가 읽기 요청을 보내면, Leader 샤드는 Follower 인덱스를 구성할 때 설정한 읽기 매개변수에 따라 새로운 작업을 응답합니다. 새로운 작업이 없으면, Leader 샤드는 설정된 타임아웃 시간까지 새로운 작업을 기다립니다. 타임아웃이 경과하면, Leader 샤드는 Follower 샤드에게 새로운 작업이 없음을 응답합니다. Follower 샤드는 샤드 통계를 업데이트하고 즉시 Leader 샤드에게 또 다른 읽기 요청을 보냅니다. 이러한 통신 모델은 원격 클러스터와 로컬 클러스터 간의 네트워크 연결이 지속적으로 사용되도록 보장하여 방화벽과 같은 외부 소스에 의해 강제로 연결이 종료되는 것을 방지합니다.
읽기 요청이 실패하면 실패 원인이 검사됩니다. 실패 원인이 복구 가능한 것으로 간주되면(예: 네트워크 오류) Follower 샤드는 재시도 루프에 들어갑니다. 그렇지 않으면 Follower 샤드는 재개할 때까지 일시 중지됩니다 .
※위에 그림은 CCR과 관련없이 단순 샤드를 설명하기 위한 그림입니다.
주기적으로 새로운 인덱스를 생성하는 경우 매우 유용하게 사용할 수 있습니다.
Ex) Filebeat가 보내는 일일 인덱스 A가 있다. A인덱스는 ILM(Index Lifecycle Management)에서 자동으로 Rollover되고 있다. 이런 인덱스의 경우, CCR에 Auto Follow기능을 빌드하게 되면 새로운 인덱스가 생성될 때마다 자동으로 Follower Index가 생성된다.
CCR은 (미리 설정한) Data view와 일치하는 인덱스가 있는지 주기적 모니터링하고, Data view와 일치하는 인덱스를 발견하면 자동으로 Follower 인덱스를 생성합니다.
CCR과 ILM을 함께 사용할 수도 있습니다. CCR은 인덱스를 복제하고, ILM은 소스와 클러스터 양쪽을 모두 관리할 수 있게 됩니다.
Ex) ILM은 CCR이 언제 Leader Index를 복제하는지, 언제 복제가 완료되는지 알고 있어야 인덱스 축소 또는 삭제 등의 작업을 진행할 때 문제가 발생하지 않는다.
생산(Production) 및 DR(Disaster Recovery) 데이터센터
데이터는 생산 데이터센터에서 DR 데이터센터로 복제됨
생산 데이터센터를 사용할 수 없는 경우, DR 데이터센터를 사용할 수 있음
둘 이상의 데이터센터
데이터는 데이터센터 A에서 여러 데이터센터(다이어그램의 B 및 C)로 복제됨
데이터센터 B와 C는 읽기 전용 인덱스
연결된 복제
Leader 인덱스는 데이터센터 A에 있음
데이터는 데이터센터 A에서 데이터센터 B로 복제되고, 데이터센터 B의 Follower에서 데이터센터 C로 복제되어 연결된 복제 패턴을 생성함 (A -> B -> C)
양방향 복제
데이터센터 별로 Leader 인덱스 있음
애플리케이션은 모든 데이터 센터에 접근하여 읽기가 가능함
쓰기는 각 로컬 인덱스에서만 가능함
CCR은 사용자가 생성한 인덱스만 복제하도록 설계되었으며 아직까진(v8.14) 아래 항목에 대해서는 복제하지 않습니다.