엘라스틱서치에서는 장애에 대한 고가용성을 제공하기 위해 Translog를 사용하고 있다. 장애복구와 데이터 유실을 방지하기 위한 저장소로써 Translog를 사용한다.
엘라스틱서치는 샤드 내부에 Translog라는 로그 파일을 가지고 있다.
샤드에 변경사항이 발생할때마다 Translog에 먼저 해당 내역을 기록한뒤 루씬 인덱스로 데이터를 전달한다.루씬으로 전달된 데이터는 인메모리 버퍼로 저장되고 주기적으로 처리되어 세그먼트가 된다.
엘라스틱서치는 디폴트세팅으로 1초에 한번씩 Refresh 작업을 수행한다. 이를 통해 추가된 세그먼트의 내용을 읽을수 있게 되고 검색에 데이터가 조회된다.
Translog의 내용을 바탕으로 장애 발생시 복구작업을 수행할수 있다.
엘라스틱서치의 Flush 작업은 내부적으로 fsync()를 사용하여 디스크에 물리적으로 동기화 되기 때문에 비용이 많이 드는 작업이다.
Flush가 완료되어 디스크에 물리적으로 기록이 완료되면 해당 시점까지의 Translog는 더이상 필요하지 않게 되고 이 시점에 이전 Translog는 제거된다.
가장 큰 목적은 장애 복구를 위해서다.
1초마다 수행되는 Refresh는 검색에 조회가 가능한 상태지만 물리적으로 디스크에는 동기화되지 않은 불안전한 상태다. 이 시점에 문제가 생기면 해당 데이터를 유실되게 되는데, Translog에는 남아있기 때문에 해당 내용을 replay하여 복구가 가능하다.
하지만 Translog가 커진다면 복구에 걸리는 시간도 늘어나기 때문에 크기가 너무 커지지 않도록 관리하는 것이 중요하다. flush interval 시간이나 size threshold 시간등을 조정할 수 있다.