2주차

Myeon·2021년 11월 27일
0

elastic search

목록 보기
3/3
  • index pattern
    보통 kibana는 시계열데이터를 시각적으로 보여주기 때문에 날짜별데이터 같은 걸 아스타(*)같은걸로 묶음
    time정보를 가지고 있는 필드를 지정해야 됨.

  • shard
    elasticsearch는 shard로 분산저장함. 데이터를 쪼개는 것(sharding)
    default 5개
    primary shard에 RW, replica R(분산search)
    replica가 많으면 비용이 많이들지만, 고가용성(데이터유실가능성) + 검색이 빠름
    노드가 1개인데 primary/replica가 1개씩 있으면 replica가 할당될 노드가 없기 때문에 Unassigned shard가 됨.
    shard 1개 10G정도가 권장?하는 양임 (요즘은 50G까진 괜찮다고함)

  • (경험)cluster 하나가 가질 수 있는 shard 3~4만개 ok, 6만개 이상이 되면 cluster query가 느려짐. index 생성속도도 막 몇분씩 걸리고 느려짐. (node 30~40대)는 (보통 서버는 64G, es는 jvm 32G(max임, 나머지는 시스템메모리 같은걸로 사용하기 때문에 남겨둠))

  • management
    es에 저장되는 데이터는 용량이 2.5배정도 됨
    indexing rate es에서 데이터 넣는거
    search rate es에서 데이터 읽는거
    둘다 latency가 높아지면(수십 초 이상) 장애가 발생할 수 있음

  • elasticsearch head (tool)
    https://chrome.google.com/webstore/detail/elasticsearch-head/ffmkiejjmecolpfloofpjologoblkegm

es는 비정규화데이터
node추가되면 rellocating
index는 Logical한 개념. 그 안에서 샤드,노드 등이 분산되는 것

  • 마스터(후보)노드(성능이 낮아도 됨, 하는일이 별로 없음). 보통 마스터노드는 3개정도로 설정하고, 한대만이 마스터가 됨.
    20-30대 넘어가거나, 용량이 크면 master/data같이 쓰면 성능저하가 될 수 있음.(병목)
    -> 마스터노드를 분리하는걸 추천
    ingest node는 데이터 가공 기능
    coordinating node는 검색 및 대량 색인 요청시 분산 저장된 데이터를 단일 결과 집합화. 검색은 메모리를 많이 사용함.

샤드수가 많고, 크기가 클수록 검색시간이 많이 걸린다. (데이터가 퍼져있으면 취합하는데 오래걸림)
레플리카가 많을수록 검색성능 수평확장 scale out이 가능함.

  • segment는 lucene의 개념
    es에 refresh 하면 검색가능한 형태로 최종 데이터 저장(searchable segment) 배치성으로 일어남

  • 오늘날짜데이터 같은 경우 데이터가 계속 들어오니까 hot node. cpu를 많이 쓰기때문에(writing) cpu쪽 성능이 높은 서버를 쓰면 됨
    반대로 예전데이터 같은 경우에는 warm/cold node. 메모리를 많이 쓰기때문에(search) 그쪽 성능을 높이면 좋음

  • index.routing.allocation.total_shards_per_node
    노드에 분배될 수 있는 샤드 수 지정
    shards per node가 2, 노드가 4, 생성되는샤드수가 6개면 노드에 1개씩 혹은 2개씩 들어갈 것
    반대로 per node수가 1이면 노드가 총 4개 이기때문에 2개의 샤드는 Unassigned로 빠짐.
    그렇기때문에 너무 작게 잡으면 안됨.

field data

  • String
    keyword: 키워드 형태로 사용, 검색 시 필터링되는 항목, 정렬/집계 항목
    text: 보통의 문자열. standard analyzer사용해서 전문검색이 가능함. 그렇기때문에 resource를 많이 사용함.
    text를 aggregation하면 error
    추가로 키워드타입으로도 지정할 수 있음. 그럼 집계/필터가 가능함
    -> 책 제목같은 경우에 사용할 수 있음.
        "reason" : {
          "type" : "illegal_argument_exception",
          "reason" : "Text fields are not optimised for operations that require per-document field data like aggregations and sorting, so these operations are disabled by default. Please use a keyword field instead. Alternatively, set fielddata=true on [book_name02] in order to load field data by uninverting the inverted index. Note that this can use significant memory."
        }
  • Date
    format을 설정해주면 좋음
  • Geo
    위치기반 쿼리 수행 가능

질문
flush
max search rate?
es restapi timeout
_id값을 지정해서 넣고, search하면 속도가 빠른지?
alias asta

0개의 댓글