fragile and resilient

Storage 4

[Elasticsearch] Shard Allocation 은 어떻게 결정될까?

성능 테스트 과정에서 특정 데이터 노드에 샤드가 집중된 것을 발견했습니다. 엘라스틱서치에서는 아래 상황에서 샤드의 배치를 결정하게 됩니다.클러스터에 인덱스를 추가하는 경우Node failure - 클러스터에서 노드가 drop된 경우 해당 노드에 존재하던 샤드들을 재배치클러스터 크기 조정 - 클러스터에 새로운 노드가 추가되거나 제거되는 경우 노드의 디스크 사용량이 전체의 90% 이상을 도달하는 경우샤드를 수동으로 라우팅하는 경우라우팅 관련 설정 업데이트ShardsAllo cator는 샤드 배치를 담당하는 ElasticSearch 인터페이스입니다. 해당 인터페이스의 구현체 BalancedShardsAllocator의 allocate를 보면 1. allocate unassigned shards, 2. move..

Storage 2024.04.10

[Elasticsearch] Near real-time search, Refresh

색인 작업 시 세그먼트 동작 방식엘라스틱서치는 내부적으로 Lucene이라는 라이브러리를 통해 검색 기능을 수행한다. 검색 요청이 오면 Segment들이 각각의 검색 결과를 만들고 이를 통합해서 검색 결과를 응답하도록 되어있다.루씬은 색인 작업 시 기존에 생성된 세그먼트에는 정보를 추가하거나 변경하지 않고, 색인 작업을 할 때마다 새로운 세그먼트 파일을 생성한다. 해당 방식으로 동작하는 이유는 Segment의 불변성을 유지해서 검색 성능을 보장하기 위함이다.(새로운 세그먼트가 계속 생성되므로, 루씬은 백그라운드에서 세그먼트 파일을 병합하는 작업을 수행하고 이를 통해 모든 세그먼트들을 물리적으로 하나의 파일로 병합한다.)이미지 출처: 엘라스틱서치 실무 가이드Refresh루씬은 효율적인 색인 작업을 위해 내부..

Storage 2024.02.15

[Elasticsearch] No master is elected

문제 상황성능 테스트 과정에서 master node 의 스펙을 변경하였고, 3개의 마스터 노드중에서 2개를 종료한 뒤 새로운 스펙으로 2대를 띄웠습니다. 해당 과정을 진행 후 도큐먼트 조회 / 업데이트가 안 되었고, 아래 에러가 떴습니다.{  "error" : {    "root_cause" : [      {        "type" : "master_not_discovered_exception",        "reason" : null      }    ],    "type" : "master_not_discovered_exception",    "reason" : null  },  "status" : 503}  원인노드가 추가되거나 제거될 때 Elasticsearch는 새 마스터를 선택합니다. 일..

Storage 2024.02.14

[MySQL] 인덱스 정리

인덱스란? 데이터베이스 테이블의 모든 데이터를 검색해서 원하는 결과를 가지고 오려면 시간이 오래 걸립니다. 따라서 컬럼의 값과 해당 레코드가 저장된 주소를 key-value 형태로 인덱스를 만들어 두는 것입니다. DBMS의 인덱스는 주어진 컬럼의 값을 기준으로 정렬해서 보관합니다. 인덱스는 INSERT, UPDATE, DELETE의 성능을 희생하고, 그 대신 읽기(Select)의 성능을 높이는 기능이다. 새로운 키를 추가하는 과정에서 B-Tree의 리프 노드가 꽉 찼을 경우, 리프 노드가 분리되어야 하는데 해당 작업은 상위 노드들까지 영향을 미치기 때문에 비용이 많이 드는 작업이기 때문입니다. 인덱스는 SELECT 뿐만이 아니라 UPDATE, DELETE를 처리하기 위해 해당 레코드를 검색하는 경우에도 ..

Storage 2022.09.26