본문 바로가기

Elasticsearch

Elasticsearch replica shard Issue replica shard Elasticsearch shard란? replica shard란? Replica는 또 다른 형태의 shard라고 할 수 있다. Elasticsearch에서 replica의 기본값은 1이다. 이 때 replica의 값이 1이라는 것은 primary shard를 제외한 replica shard가 1개라는 것을 의미한다. 그렇기에 replica의 최대 개수는 전체 노드의 수 -1. Replica가 필요한 이유는 크게 두 가지인데, 그 중 첫 번째는 ‘검색성능(search performance)‘이고, 두 번째는 ‘장애복구(fail-over)‘입니다. Replica shard가 존재하는 경우 하나의 노드에 문제가 발생하게 된다고 해도 나머지 노드에 모든 데이터 shrad들이.. 더보기
Elasticsearch shard Es shard Elasicsearch를 시작하게 되면 하나의 Elasticsearch 노드가 생성되며 이 노드는 동일한 네트워크 상에서 같은 클러스터명을 같는 클러스터가 존재하는 지를 찾게 된다. - Elasticsearch cluseter? 만약, Discovery 결과 찾은 클러스터가 없다면 이 노드는 스스로 클러스터를 생성하게 되고 만약 클러스터가 이미 존재한다면 해당 클러스터에 연결된다. 새로운 클러스터가 생성되었다면 노드에는 아직 어떠한 인덱스도 존재하지 않는 상태이며, 새로운 인덱스를 생성할 때 인덱스를 몇 개의 shard로 나누어 저장할 것인지를 정의할 수 있다. Shard의 개수를 따로 지정하지 않는다면 Elasticsearch의 기본 shard 개수인 5개로 데이터가 나누어져 저장된다... 더보기
Elasticsearch restart issue Es restart issue 배경 : AWS에서 EC2 인스턴스를 활용하고 인스턴스 내에 docker로 Elasticsearch를 활용한다. Elasticsearch를 실행시킨 EC2 인스턴스의 정상동작을 확인한다. 사용하지 않을 때 EC2 인스턴스를 중지한다. 사용할 때 다시 EC2 인스턴스를 시작한다. 그런데 시간이 아무리 지나도 다른 서비스(kibana, beats, other es)들이 시작한 EC2의 ES를 찾지 못한다. 다른 컨테이너들의 경우 EC2 인스턴스를 재시작하여도 정상적으로 동작하는 것과는 확연히 다른 현상이다. 해당 이슈는 레딧의 같은 이슈에 대한 링크를 참고하여 해결하였으며 정리하자면 다음과 같다. docker.service가 비활성화상태일 가능성이 있기에 다음 명령어로 활성화시.. 더보기
Elasticsearch clustering 구현 Elasticsearch clustering의 경우 3개의 Master-eligible nodes로 구성하는 것으로 HA를 구현하기 적절 먼저 원본 es ec2와 같은 ec2를 2개 생성하고 es를 전부 설치한다. 그리고 각 es를 실행시키면 당연하게도 클러스터링이 되지 않는다. docker-compose.yml과 .env를 신경써서 수정해주어야 하며 그 수정사항은 대표적으로 - discovery.type - http.port - transport.tcp.port - clustering.initial_master_nodes - ports, expose - .env의 ES_SEED_HOSTS, ES_MASTER_HOSTS 등이 있다. 추가로 kibana에도 각 ES의 주소를 입력해주어야 하는데 ES에서 여.. 더보기
Elasticsearch clustering Es clustering Elasticsearch의 노드들은 클라이언트와의 통신을 위한 http 포트(9200~9299), 노드 간의 데이터 교환을 위한 tcp 포트 (9300~9399) 총 2개의 네트워크 통신을 활용한다. 한 서버에 여러개의 노드를 실행시키는 것도 가능하나 일반적으로 1개의 물리 서버마다 하나의 노드를 실행하는 것을 권장한다. 물리적인 구성과 상관 없이 여러 노드가 하나의 클러스터로 묶이기 위해서는 클러스터명 cluster.name 설정이 묶여질 노드들 모두 동일해야 함. 같은 서버나 네트워크망 내부에 있다 하더라도 cluster.name이 동일하지 않으면 논리적으로 서로 다른 클러스터로 실행이 되고, 각각 별개의 시스템으로 인식된다. 디스커버리 (Discovery) 노드가 처음 실행.. 더보기