33,000원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨ElasticSearch Essential
Elastic Search 동작 이해하기 색인 설명 관련
안녕하세요 ES 를 처음 사용하게 되어 관련 정보를 찾아 보던차에 해당 강의를 접하게 되어 잘 듣고있습니다.아무래도 실무에 아직 적용해보지 않은 상태라 질문에서 부족한점이 많을 것 같아 이 부분은 양해를 부탁드립니다. 샤드의 라우팅을 설명해주시면서 한번 설정된 샤드는 변경될 수 없다고 하셨는데 , 색인 설명에서는'처음부터 완벽한 샤드 배치 계획을 세울수는 없기 때문에 샤드의 수를 늘리거나 데이터 노드를 스케일아웃/업 하면서 최적의 수치를 찾아 가야 한다' 라고 말씀해주신 부분과 겹쳐 궁금증이 생겨 질문을 남기게 되었습니다.샤드를 도중에 변경할 수 있는 방법이 있나요?찾아보니 ReIndex API 를 사용해서 새로운 인덱스를 생성해야 한다는데 이 방법으로 변경하는게 맞을까요? 답변주시면 감사하겠습니다.좋은 강의 감사드립니다 ^^
- 미해결ElasticSearch Essential
Compressed OOP 조건에 따른 ES Heap Size 제약
안녕하세요, 대용량 데이터 검색엔진 구축을 위해 Elasticsearch를 도입했습니다. 1. 개발환경 및 Spec 설명On-premise Kubernetes 환경에 Helm 배포를 통해 Master, Coordinating, Data Node 각각 4, 4, 10대로 Elasticsearch 클러스터를 구성했습니다.(HA 구성을 위해 Data Node는 모두 다른 Kubernetes Node에 배포되며, statefulSet을 통한 Rolling Update 방식입니다.)예상되는 클러스터 전체 Data Usage는 50TB 수준이고, primary shard와 replica shard의 개수는 각각 10과 1로 둘 예정입니다. 하나의 shard 용량은 10~20GB 수준으로 유지할 예정입니다. 현재는 초기 적재를 위해 replica shard 개수를 0으로 설정한 상황입니다.)pod container의 limit resource는 8core, 64Gi이며, ES_JAVA_OPTS 값으로는 -Xms30g -Xmx30g 옵션을 통해 Elasticsearch의 Heap Memory로는 30GB를 할당했습니다. 32Bit 포인터 관리 방식에서 object 그 자체가 아닌 object의 offset을 참조하는 Compressed OOP 사용을 위해, Elasticsearch의 Heap Size는 32GB를 권장하고 있습니다. 여기에 시작 주소를 0으로 두는 Zero-based 까지 고려하여 보수적으로 30GB를 사용했습니다.위와는 독립적인 권장 사항인 'JVM의 50%을 ES에 할당하라' 조건까지 고려하여 JVM Heapsize를 64Gi 로 두었습니다. 2. issue데이터 색인(bulk가 아닌 일반적인 PUT API) 중, kibana를 비롯하여 Elasticsearch 클러스터 전체에 503 에러가 발생했고 쿠버네티스 클러스터에 배포된 pod(Master, Coordinating Node 전부, 그리고 Data Node는 2대를 제외한 나머지 8개)가 restart 없이 죽었습니다. (원인은 CircuitBreaker입니다.)NAME READY STATUS RESTARTS AGE edms-p01-srep01-coordinating-0 0/1 Running 0 37h edms-p01-srep01-coordinating-1 0/1 Running 0 37h edms-p01-srep01-coordinating-2 0/1 Running 0 37h edms-p01-srep01-coordinating-3 0/1 Running 0 37h edms-p01-srep01-data-0 0/1 Running 0 37h edms-p01-srep01-data-1 0/1 Running 0 37h edms-p01-srep01-data-2 1/1 Running 0 37h edms-p01-srep01-data-3 0/1 Running 0 37h edms-p01-srep01-data-4 0/1 Running 0 37h edms-p01-srep01-data-5 0/1 Running 0 37h edms-p01-srep01-data-6 1/1 Running 0 37h edms-p01-srep01-data-7 0/1 Running 0 37h edms-p01-srep01-data-8 0/1 Running 0 26h edms-p01-srep01-data-9 0/1 Running 0 37h edms-p01-srep01-es-exporter-8457b87fb7-wsshd 1/1 Running 0 39h edms-p01-srep01-kb-84dcb6d7f7-gdhd9 0/1 Running 0 39h edms-p01-srep01-master-0 0/1 Running 0 37h edms-p01-srep01-master-1 0/1 Running 0 37h edms-p01-srep01-master-2 0/1 Running 0 37h edms-p01-srep01-master-3 0/1 Running 0 37h Data Node의 경우 빈번한 Young GC, 그리고 Old GC가 발생했지만 점차 확보하는 Memory 양이 적어지다가 CircuitBreakingException이 발생했습니다.Master와 Coordinating Node는 Old GC 없이 Young GC만으로 heap size가 잘 관리되다가 모든 Data Node 메모리 부하가 심해지니 Pod가 죽었는데, 유추하기로는 처리되지 못한 색인 데이터의 transport가 loop 되다가 Master/Coordinating 메모리에도 영향을 준 것으로 보입니다. CircuitBreakingException이 발생 전의 한 Data Node의 stats은 아래와 같습니다. (GET _nodes/stats) "mem" : { "heap_used_in_bytes" : 28558120848, "heap_used_percent" : 88, "heap_committed_in_bytes" : 32212254720, "heap_max_in_bytes" : 32212254720, "non_heap_used_in_bytes" : 191720344, "non_heap_committed_in_bytes" : 201515008, "pools" : { "young" : { "used_in_bytes" : 771751936, "max_in_bytes" : 0, "peak_used_in_bytes" : 19243466752, "peak_max_in_bytes" : 0 }, "old" : { "used_in_bytes" : 27784679400, "max_in_bytes" : 32212254720, "peak_used_in_bytes" : 32129130920, "peak_max_in_bytes" : 32212254720 }, "survivor" : { "used_in_bytes" : 1689512, "max_in_bytes" : 0, "peak_used_in_bytes" : 1520169584, "peak_max_in_bytes" : 0 } } }, ... "gc" : { "collectors" : { "young" : { "collection_count" : 226, "collection_time_in_millis" : 15603 }, "old" : { "collection_count" : 1, "collection_time_in_millis" : 6322 } } } 3. 의문점Data node 역할을 담당하는 pod가 죽은 것은 그럴 수 있다 쳐도 색인과 관련 없는 Coordinating/Master Node 역할의 pod에까지 영향을 미치는 이유는 무엇인가요?(위의 pod metric을 살펴보아도 OOM과는 전혀 거리가 멀어보이긴 합니다만) Elasticsearch가 분산시스템이지만 위와 같이 Kubernetes 노드에 문제가 없는 상태에서 pod만 죽어버리니 고가용성이 무색해지는군요... 앞서 말씀드린 것처럼 색인 데이터의 transport 내부 동작이 영향을 미쳤을까요?위와 같은 CircuitBreakingException에 대응하는 방법에는 ES_JAVA_OPT의 Heap Memory 용량을 증설하거나, 클러스터 세팅 indices.breaker.total.limit 값은 이미 95%입니다. (indices.breaker.total.use_real_memory가 true 이므로) 이때, 이미 Heap이 30GB라면, Compressed OOP의 조건인 32GB를 넘는 수준의 ES_JAVA_OPTS 설정을 시도하려면 어느 정도로 높게 하는게 좋을지 고견을 여쭙습니다.(Container의 jvm memory 자체에는 큰 제약이 없는 개발환경입니다. 즉, 128GB, 256GB처럼 높은 수준의 resources.limit 설정도 가능합니다.)
- 해결됨ElasticSearch Essential
6강 10분 색인 과정에 대해 질문 있습니다.
10분 00초에 2개의 가정->선택이 존재하는 것으로 파악했어요.인덱스 별 (각)샤드의 최대 크기를 10GB로 설정 -> 인덱스 별 프라이머리 샤드의 개수는 10개(이 말이 결국 데이터 노드 개수 10개와 이어지겠죠)데이터 노드 개수를 10개로 설정 -> 데이터 노드당 가져야할 디스크의 크기 600GB여기서 2번은 명확히 이해가 됩니다. 필요한 저장 공간이 6,000GB이므로 이를 데이터 노드 개수(10)만큼 나눈 600GB가 데이터 노드 당 가져야할 디스크 크기겠죠. 다만 1번이 이해 안갑니다. 하나의 인덱스 내 개별 샤드의 최대 크기가 10GB로 설정하는 것과 인덱스 별 프라이머리 샤드의 개수가 10개인 것이 무슨 연관관계가 있는 것이죠?(논리 전개가 잘 이해가 안됩니당)관점1: 인덱스 별 샤드의 최대 크기가 20GB가 돼야 각 노드의 크기(600GB)를 채울 수 있지 않나요? 매 노드가 프라이머리 샤드1개와 레플리카 샤드를 2개씩 가지니까요.관점2: 인덱스 별 (각)샤드의 최대 크기가 10GB라면 각 노드별로 샤드가 3개씩 존재할 것(프1 레2)이므로 각 노드의 최소 스펙은 30GB겠죠. 필요한 저장 공간이 6,000GB이므로 노드는 20개를 생성할 수 있으므로 인덱스 별 프라이머리 샤드의 개수는 20개가 되야하지 않나요?긴 질문 읽어주셔서 감사합니다.
- 해결됨ElasticSearch Essential
4강 14분51초 질문 있습니다!
인덱스 템플릿 예제를 보면 프라이머리 샤드3개, 레플리카 샤드 6개로 구성하셨는데요. 하루에 30GB 정도 쌓이는 로그를 인덱스에 저장해야하는데, 만약 클러스터 내 1개의 노드만 존재한다면, 프라이머리, 레플리카 샤드를 몇 개씩 배치하는게 좋을까요?참고로 로그는 저장하는 용도입니다. 키바나에서만 조회합니다!만약 하나의 클러스터 내 10개의 노드가 존재한다면, 총 10개의 EC2가 꼭 필요할까요? 하나의 EC2에서 2~3개의 노드를 만들 수 있을까요? 만들 수 있다면 이게 올바른 설계인지도 궁금합니다!6개월 정도 로그를 쌓으면 약 180개의 인덱스가 일자별로 생성이 될텐데, 인덱스의 개수가 100개가 넘어가면 자동으로 가장 오래된 인덱스부터 삭제할 수 있는 방법이 있을까요? 질문이 많네요ㅠㅠ
- 미해결ElasticSearch Essential
안녕하세요 elastic cloud를 사용하는데 cpu가 계속 칩니다 .
안녕하세요 선생님!!!elastic cloud를 사용하여 인덱싱을 하는데 계속 cpu가 치고 서버가 자꾸 다운이 되네요 ㅠㅠGET _cat/nodes?v=true&s=cpu:desccpu 노드 조회하면 아래와 같이 cpu로드가 너무 높고요,,GET nodes/instance-0000000008/hotthreads 을 통해서 조회를 하니 아래와 같이 뜨네요..샤드는 이정도 있구요! (default 샤드수 설정은 따로 건들지 않았습니다)---또한 snapshot을 30분 마다 저장 하고 있는데 (default가 30분마다 이더라고요) .. 이게 맞을까요?snapshot이 cpu부하를 많이 줄까요? 30분마다 하니;; 이게 혹시 부하를 많이 주는지.. (증분백업으로 알고 있는데) 또한 위와 같이 현재 snapshot이 너무 많이 쌓여서 정리를 하고 싶은데 정책을 바꾸고 싶은데 (snapshot retain이라든지 근데 경고가 떠서,, 함부로 못건들고 있습니다..) 문제가 여러개라서.. 어디부터 건들어야 할지 난감하네요.. 혹시 좋은 방도가 있을까요?..
- 해결됨ElasticSearch Essential
검색이 안되는 문제 문의
안녕하세요~ 찾아보다 해결이 안되어 문의 드립니다. 현재 동작하는 인덱스 색인은 아래와 같습니다.그런데, 예를들어 "트루그린" 이라고 검색하면이 인덱스에 들어있는 도큐먼트는 9개인데,2개만 검색이 됩니다.아래와 똑같이 테스트인덱스를 생성하여, 도큐먼트 9개를 넣어서 search하면또 9개가 나옵니다.왜 이런 현상이 발생하는지 도움주시면 정말 감사드리겠습니다~
- 미해결ElasticSearch Essential
7번째 강의에서 Token과 Term은 다른 건가요??
공부하다보니 Token, Term이라는 단어를 보게 되었는데요 Token : 문자열을 쪼갠 키워드Term : Token이 필터되고 역색인에 저장된 키워드 이렇게 정리하는게 맞을까요??
- 해결됨ElasticSearch Essential
서버 업데이트후 키바나 동작안함
안녕하세요~ 혹시 서버에 sudo yum update 를 진행하니, 기존에 도커에 깔린 kibana가 동작을 안하는데 업데이트랑 관련이 있을런지요 그렇다면 혹시 해결방법이 있을까요,,참고로 키바나는 서비스는 올라왔고 접속하니 사이트에 연결할수 없음으로 접속이 안됩니다구글링을 해보니 xpack.security.chromium 을 false 로 하라는데 맞을까요 도커로 실행중이라 방법을 알려주시면 너무 감사하겠습니다
- 해결됨ElasticSearch Essential
인덱스 설계에서 type 문의드립니다.
엘라스틱서치 버전 7부터 type이 제거되었다는데, 강의에서 설명하는 인덱스 설계를 보면 library 인덱스 vs 각 자료별 인덱스(book, 매거진 등) 예시로 나옵니다. 그럼 버전 7 이상부터는 이 설명이 유효하지 않은 건가요? 아니면 예시에 나온 type과 엘라스틱서치 7.x이상이부터 삭제된 type은 다른 개념인지 궁금합니다. 아니면 아래 질문에 있는 답변을 참고하면 될까요??ElasticSearch 와 RDBMS에 대한 비교 질문이 있습니다.
- 해결됨ElasticSearch Essential
/_cat/indices?v 로 인덱스 조회시 보이는 나머지 항목들
키바나 모니터링 툴을 연결하였고/_cat/indices?v 로 인덱스 조회시 프라이머리샤드, 레플리카 샤드 다 정상적으로 적용된 것으로 보입니다. 보다 보니 궁금증이 생겼습니다.1. monitoring-kibana-7 ~~ 의 존재는 무엇인지 궁금합니다.eng_search, kor_search의 pri, rep가 적용된 것처럼 monitoring-kibana-7, kibana~ 등 나머지 항목들은 인덱스들과 동일하게 pri, rep가 적용하지 않아도 되는지 monitoring-kibana-7, kibana~ 등 나머지 항목의 pri, rep가의 숫자를 3, 2 로 한번에 적용시키는 명령어가 존재하는지 궁급합니다.
- 미해결ElasticSearch Essential
색인 분석이란?
좋은 강의 덕분에 알차게 열심히 공부하고 있습니다.색인 파트 학습 중인데, 색인 분석이라는 단어가 나와서 문의드립니다. 색인 과정을 아래처럼 정리했는데, 색인 분석이 인덱스 체크와 매핑 체크를 포함하는 것을 말하는 걸까요??? 색인 분석(인덱스 체크 -> 매핑 체크) -> inverted index 생성 -> 프라이머리 샤드에 저장 -> 레플리카 샤드로 복사하는 일련의 과정
- 미해결ElasticSearch Essential
동적 스키마가 NoSQL을 의미하나요???
RDB만 공부했던 코린이입니다. 스승님, 동적 스키마라는 설명이 뒤에서도 설명이 있겠지만 엘라스틱 DB에 저장되는 값들이 RDB처럼 정해진 테이블 컬럼의 형태가 아닌, 다양하게 값이 저장/사용 할 수 있어서 동적 스키마라는 건가요?
- 해결됨ElasticSearch Essential
노리분석기 노드 적용 질문
노리분석기 설치를 하려하는데 궁금증이 생겨 질문합니다.엘라스틱서치가 실행되고 있는 모든 노드에(마스터, 데이터, 코디네이터..) 노리분석기를 설치해야 하는지아니면, 검색이 이루어지는 노드. 그 엘라스틱서치에만 노리분석기를 설치해도 되는지 질문드립니다.
- 해결됨ElasticSearch Essential
노드 heap size에 관해서
안녕하세요 선생님, elasticsearch 운영에 관해 질문이 있어 드립니다.제가 노드를 구성하고 힙사이즈를 32g로 주었습니다."OPENSEARCH_JAVA_OPTS=-Xms32g -Xmx32g"처음에는 괜찮았는데 한달정도 지나니 꽉차서 쿼리가 안되더라구요jvm.options는 바꾼거 없이 이렇게 다 잘들어갔습니다.## GC configuration-XX:+UseConcMarkSweepGC-XX:CMSInitiatingOccupancyFraction=75-XX:+UseCMSInitiatingOccupancyOnly가비지 컬렉션을 사용하고, 힙메모리의 75% 가 사용되면 old GC 를 진행해야되는데 진행이 안되는것같아서요.어떻게 힙메모리를 줄일수있을까요..감사합니다..
- 해결됨ElasticSearch Essential
로드밸런스 endpoint
검색 요청시 노드에 대해 직접적인 접근을 하지 않고강의 내용대로 로드밸러스를 통해 통신 할 수 있도록 하려 합니다. 한가지 궁금한점은 문석 색인/검색 요청시 로드밸러스의 endpoint에 대해 궁금합니다.<문서 색인>시에는 로드밸러스를 '데이터 노드'로만 접근하도록 하고<검색 요청>시에는 로드밸런서의 endpoint를 '코디네이팅 노드'에 접근하도록 설정하면 될까요?또,'데이터노드'도 색인 및 검색요청을 처리하는데,<검색 요청>시 로드밸런스를 통해 '데이터 노드, 코디네이팅 노드' 둘다에 접근하도록 해도 상관 없을까요?
- 미해결ElasticSearch Essential
마스터 후보노드와 구동관리에 대해 문의드립니다.
안녕하세요.이번에 엘라스틱서치를 공부하고자 강의를 수강했습니다. 쉽게 설명해주셔서 잘듣고 있습니다.질문좀 드릴께요.1) 만약 마스터후보 노드를 3개를 (전용으로)세팅했을 경우, 마스터노드가 1개 선출되면 나머지 2개의 노드는 아무것도 안하고 노는 노드가 되는건가요?2) 만약 클러스터를 100대를 구성했다면, 구동/해제 시키기 위해서는 각머신마다 들어가서 구동/해제 시켜야 하나요? 뭔가 툴 같은게 있을듯 한데, 실무에서 어떤식으로 하는지 궁금합니다. 좋은 강의 감사드려요!
- 해결됨ElasticSearch Essential
text와 keyowrd를 모두 사용하는 경우도 있을까요?
안녕하세요 강사님 수업 잘 듣고 있습니다! text와 keyword를 수업을 듣던 와중 궁금한게 있는데요, text와 keyword를 둘 다 사용하는 경우도 있을까요?예시의 url을 보면 text 타입이 적절해 보이는데 url 전문을 검색하는 경우도 많아서 keyword도 적절해 보여요.ex) /v1/api/story 인 경우 story로도 /v1/api/story로도 둘 다 검색을 자주 할 것 같아요이럴 경우 text와 keyword 둘 다 두는 것이 좋을지, 아니면 둘 다 두는 건 불필요하니 text 하나만 두는 것이 좋을지 궁금합니다.
- 미해결ElasticSearch Essential
레플리카 샤드에 대해
6, 7강을 듣고 의문점이 있는데요."number_of_replicas"를 2 이상으로 설정하고 노는 데이터 노드가 없는 상태라면 각 노드에 여러 개의 replica 샤드가 있는 상태가 되나요? 만약 그렇다면 이는 비효율적이라 생각하는데 어떻게 처리하나요?모든 노드가 색인과 검색을 처리하는 것이 좋다는 것은 각 노드에 primary, replica shard가 동시에 존재하는 것이 좋다는걸 의미하나요? 아니면 클러스터 역할을 수행하기 위해 각 노드에 적어도 하나의 shard가 있어야 한다는 것을 의미하나요?데이터 노드를 늘리고 number_of_replicas를 늘리면 7-12페이지 처럼 남는 노드에 replica 샤드가 들어가는 건 정해진 건가요?
- 해결됨ElasticSearch Essential
인제스트 노드의 필요성
안녕하세요강의를 듣고 나서 생각해보니문서의 데이터 전처리가 필요 없으면인제스트 노드는 아예 설정하지 않아도 될 것 같은데아예 설정하지 않고 사용해도 문제가 없을까요??
- 해결됨ElasticSearch Essential
rollover 설정 질문
안녕하세요 선생님, 질문 하나 드려도 될까요?? 다음과 같이 2개 조건이 만족하고싶습니다.hot 영역에 보관되면서도 primary shard size가 30기가 이상일 때 인덱스가 새로 생성인덱스가 hot 상태일 때는 만들어지고 30일 이후에 warm 영역으로 이동 ex) 오늘이 6.23일이면 logs-2023.06.23-000028 프라이머리샤드 30기가 이상 -> logs-2023.06.23-000029 생성(000028 도 여전히 hot 영역 왜냐면 생성되고 30일 이하)logs-2023.05.20-000001 샤드는 warm으로 이동 - 왜냐하면 30일 이후 그래서 아래와 같이 설정했는데, "hot" : { "min_age" : "0ms", "actions" : { "set_priority" : { "priority" : 100 }, "rollover" : { "max_primary_shard_size" : "30gb", "max_age" : "30d" } } }, 책에 rollover에서 둘중 하나 조건만 만족하면 된다라고 적혀있더라구요.그러면 위에와 같이 설정하면 primary 샤드가 30기가가 넘어갈때 인덱스가 새로 생성되면서 hot 상태가 아닌 warm 상태로 넘어가게 되는것같습니다. 저는 새로운 인덱스 생성 rollover는 프라이머리 샤드 30기가 이상, hot에서 warm으로 넘어가는 rollover는 30일 이렇게 설정하고 싶은데 어떻게 설정하면 되는걸까요??